forked from grapefi/front-end
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path.eslintcache
1 lines (1 loc) · 391 KB
/
.eslintcache
1
[{"C:\\Users\\CR\\Documents\\front-end\\src\\index.tsx":"1","C:\\Users\\CR\\Documents\\front-end\\src\\i18n.js":"2","C:\\Users\\CR\\Documents\\front-end\\src\\serviceWorker.js":"3","C:\\Users\\CR\\Documents\\front-end\\src\\App.tsx":"4","C:\\Users\\CR\\Documents\\front-end\\src\\newTheme.js":"5","C:\\Users\\CR\\Documents\\front-end\\src\\views\\BackgroundGlows.js":"6","C:\\Users\\CR\\Documents\\front-end\\src\\config.ts":"7","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useNetworkPrompt.ts":"8","C:\\Users\\CR\\Documents\\front-end\\src\\state\\Updaters.tsx":"9","C:\\Users\\CR\\Documents\\front-end\\src\\views\\Home\\index.js":"10","C:\\Users\\CR\\Documents\\front-end\\src\\views\\Bond\\index.js":"11","C:\\Users\\CR\\Documents\\front-end\\src\\views\\Stats\\index.js":"12","C:\\Users\\CR\\Documents\\front-end\\src\\views\\Roadmap\\index.js":"13","C:\\Users\\CR\\Documents\\front-end\\src\\views\\NFTRaffle\\index.js":"14","C:\\Users\\CR\\Documents\\front-end\\src\\views\\Dashboard\\index.js":"15","C:\\Users\\CR\\Documents\\front-end\\src\\views\\Strategies\\index.js":"16","C:\\Users\\CR\\Documents\\front-end\\src\\views\\Raffle\\index.js":"17","C:\\Users\\CR\\Documents\\front-end\\src\\views\\Help\\index.js":"18","C:\\Users\\CR\\Documents\\front-end\\src\\views\\Rebates\\index.js":"19","C:\\Users\\CR\\Documents\\front-end\\src\\components\\Loader\\index.js":"20","C:\\Users\\CR\\Documents\\front-end\\src\\state\\index.ts":"21","C:\\Users\\CR\\Documents\\front-end\\src\\theme\\index.ts":"22","C:\\Users\\CR\\Documents\\front-end\\src\\components\\NetworkVerifier\\index.ts":"23","C:\\Users\\CR\\Documents\\front-end\\src\\contexts\\Banks\\index.ts":"24","C:\\Users\\CR\\Documents\\front-end\\src\\contexts\\Modals\\index.ts":"25","C:\\Users\\CR\\Documents\\front-end\\src\\views\\Extinction\\index.ts":"26","C:\\Users\\CR\\Documents\\front-end\\src\\contexts\\GrapeFinanceProvider\\index.ts":"27","C:\\Users\\CR\\Documents\\front-end\\src\\contexts\\RefreshContext\\index.ts":"28","C:\\Users\\CR\\Documents\\front-end\\src\\components\\Popups\\index.tsx":"29","C:\\Users\\CR\\Documents\\front-end\\src\\views\\Leaderboard\\index.tsx":"30","C:\\Users\\CR\\Documents\\front-end\\src\\state\\application\\updater.ts":"31","C:\\Users\\CR\\Documents\\front-end\\src\\state\\transactions\\updater.tsx":"32","C:\\Users\\CR\\Documents\\front-end\\src\\views\\Home\\Home.js":"33","C:\\Users\\CR\\Documents\\front-end\\src\\views\\Rebates\\Cemetery.js":"34","C:\\Users\\CR\\Documents\\front-end\\src\\components\\Loader\\Loader.js":"35","C:\\Users\\CR\\Documents\\front-end\\src\\state\\transactions\\reducer.ts":"36","C:\\Users\\CR\\Documents\\front-end\\src\\state\\application\\reducer.ts":"37","C:\\Users\\CR\\Documents\\front-end\\src\\theme\\colors.ts":"38","C:\\Users\\CR\\Documents\\front-end\\src\\services\\event.ts":"39","C:\\Users\\CR\\Documents\\front-end\\src\\views\\Bond\\Bond.tsx":"40","C:\\Users\\CR\\Documents\\front-end\\src\\views\\Roadmap\\Roadmap.tsx":"41","C:\\Users\\CR\\Documents\\front-end\\src\\views\\NFTRaffle\\NFTRaffle.tsx":"42","C:\\Users\\CR\\Documents\\front-end\\src\\views\\Stats\\Stats.tsx":"43","C:\\Users\\CR\\Documents\\front-end\\src\\views\\Dashboard\\Dashboard.tsx":"44","C:\\Users\\CR\\Documents\\front-end\\src\\views\\Strategies\\Strategies.tsx":"45","C:\\Users\\CR\\Documents\\front-end\\src\\views\\Help\\Help.tsx":"46","C:\\Users\\CR\\Documents\\front-end\\src\\views\\Raffle\\Raffle.tsx":"47","C:\\Users\\CR\\Documents\\front-end\\src\\contexts\\Banks\\context.ts":"48","C:\\Users\\CR\\Documents\\front-end\\src\\state\\application\\hooks.ts":"49","C:\\Users\\CR\\Documents\\front-end\\src\\components\\NetworkVerifier\\NetworkVerifier.tsx":"50","C:\\Users\\CR\\Documents\\front-end\\src\\contexts\\Banks\\Banks.tsx":"51","C:\\Users\\CR\\Documents\\front-end\\src\\views\\Extinction\\Extinction.tsx":"52","C:\\Users\\CR\\Documents\\front-end\\src\\contexts\\RefreshContext\\RefreshContextProvider.tsx":"53","C:\\Users\\CR\\Documents\\front-end\\src\\contexts\\Modals\\Modals.tsx":"54","C:\\Users\\CR\\Documents\\front-end\\src\\contexts\\GrapeFinanceProvider\\GrapeFinanceProvider.tsx":"55","C:\\Users\\CR\\Documents\\front-end\\src\\state\\txEvent.js":"56","C:\\Users\\CR\\Documents\\front-end\\src\\utils\\convertTime.ts":"57","C:\\Users\\CR\\Documents\\front-end\\src\\utils\\provider.ts":"58","C:\\Users\\CR\\Documents\\front-end\\src\\components\\Popups\\PopupItem.tsx":"59","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useRebateTreasury.js":"60","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useWineStats.ts":"61","C:\\Users\\CR\\Documents\\front-end\\src\\state\\transactions\\actions.ts":"62","C:\\Users\\CR\\Documents\\front-end\\src\\state\\application\\actions.ts":"63","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useLpStats.ts":"64","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useGrapeFinance.ts":"65","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useRaffleBalance.ts":"66","C:\\Users\\CR\\Documents\\front-end\\src\\state\\transactions\\hooks.tsx":"67","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\usePegPoolRewards.ts":"68","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\usePegPool.ts":"69","C:\\Users\\CR\\Documents\\front-end\\src\\components\\Page\\index.ts":"70","C:\\Users\\CR\\Documents\\front-end\\src\\views\\Raffle\\components\\ExchangeCard.tsx":"71","C:\\Users\\CR\\Documents\\front-end\\src\\grape-finance\\ether-utils.ts":"72","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useCashPriceInLastTWAP.ts":"73","C:\\Users\\CR\\Documents\\front-end\\src\\utils\\constants.ts":"74","C:\\Users\\CR\\Documents\\front-end\\src\\views\\Extinction\\components\\PegPoolInfo.tsx":"75","C:\\Users\\CR\\Documents\\front-end\\src\\components\\Popups\\ErrorPopup.tsx":"76","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useGrapeMimSWTotalNode.ts":"77","C:\\Users\\CR\\Documents\\front-end\\src\\components\\Popups\\TransactionPopup.tsx":"78","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useWineTotalNodes.ts":"79","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useGrapeTotalNodes.ts":"80","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useNodesRewardBalance.ts":"81","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useWalletNodesAndNFTs.ts":"82","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useSVintagePrice.ts":"83","C:\\Users\\CR\\Documents\\front-end\\src\\views\\Dashboard\\DashboardNFTBox.tsx":"84","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useVintagePrice.ts":"85","C:\\Users\\CR\\Documents\\front-end\\src\\views\\Dashboard\\DashboardTokenBox.tsx":"86","C:\\Users\\CR\\Documents\\front-end\\src\\views\\Dashboard\\Nodes.tsx":"87","C:\\Users\\CR\\Documents\\front-end\\src\\views\\Dashboard\\Presses.tsx":"88","C:\\Users\\CR\\Documents\\front-end\\src\\views\\Dashboard\\BoardroomCard.tsx":"89","C:\\Users\\CR\\Documents\\front-end\\src\\views\\Dashboard\\Farms.tsx":"90","C:\\Users\\CR\\Documents\\front-end\\src\\components\\TokenSymbol\\index.ts":"91","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useRefresh.ts":"92","C:\\Users\\CR\\Documents\\front-end\\src\\components\\LaunchCountdown\\index.ts":"93","C:\\Users\\CR\\Documents\\front-end\\src\\grape-finance\\index.ts":"94","C:\\Users\\CR\\Documents\\front-end\\src\\components\\UnlockWallet\\index.ts":"95","C:\\Users\\CR\\Documents\\front-end\\src\\utils\\dexscreener.ts":"96","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useTokenBalance.ts":"97","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useModal.ts":"98","C:\\Users\\CR\\Documents\\front-end\\src\\grape-finance\\config.ts":"99","C:\\Users\\CR\\Documents\\front-end\\src\\views\\Raffle\\components\\ExchangeModal.tsx":"100","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useCashPriceInEstimatedTWAP.ts":"101","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useApprove.ts":"102","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\usePegPoolWithdraw.ts":"103","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\usePegPoolWithdrawFee.ts":"104","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\usePegPoolDeposit.ts":"105","C:\\Users\\CR\\Documents\\front-end\\src\\components\\Page\\Page.tsx":"106","C:\\Users\\CR\\Documents\\front-end\\src\\views\\Extinction\\components\\PegPoolRewards.tsx":"107","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useGrapeStats.ts":"108","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useEarningsOnBoardroom.ts":"109","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useHarvestFromBoardroom.ts":"110","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\boardroom\\useClaimRewardTimerBoardroom.ts":"111","C:\\Users\\CR\\Documents\\front-end\\src\\views\\Bank\\components\\WithdrawModal.tsx":"112","C:\\Users\\CR\\Documents\\front-end\\src\\views\\Bank\\components\\DepositModal.tsx":"113","C:\\Users\\CR\\Documents\\front-end\\src\\views\\Dashboard\\NodeCard.tsx":"114","C:\\Users\\CR\\Documents\\front-end\\src\\views\\Dashboard\\SolerapressCard.tsx":"115","C:\\Users\\CR\\Documents\\front-end\\src\\views\\Dashboard\\FarmCard.tsx":"116","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useWithdrawFromBoardroom.ts":"117","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\boardroom\\useUnstakeTimerBoardroom.ts":"118","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useStakeToBoardroom.ts":"119","C:\\Users\\CR\\Documents\\front-end\\src\\components\\TokenSymbol\\TokenSymbol.tsx":"120","C:\\Users\\CR\\Documents\\front-end\\src\\grape-finance\\GrapeFinance.ts":"121","C:\\Users\\CR\\Documents\\front-end\\src\\components\\LaunchCountdown\\LaunchCountdown.tsx":"122","C:\\Users\\CR\\Documents\\front-end\\src\\components\\UnlockWallet\\UnlockWallet.tsx":"123","C:\\Users\\CR\\Documents\\front-end\\src\\components\\Label\\index.ts":"124","C:\\Users\\CR\\Documents\\front-end\\src\\components\\CardContent\\index.ts":"125","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useAllowance.ts":"126","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useHandleTransactionReceipt.ts":"127","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useGetBurntGrape.ts":"128","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\usePegPoolRewardsClaim.ts":"129","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\usePegPoolCompound.ts":"130","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useSolerapressUserInfo.ts":"131","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useBurnGrapePress.ts":"132","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useAssassinatePress.ts":"133","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useStatsForPool.ts":"134","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useWithdraw.ts":"135","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useZap.ts":"136","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useStakedTokenPriceInDollars.ts":"137","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useStake.ts":"138","C:\\Users\\CR\\Documents\\front-end\\src\\utils\\formatBalance.ts":"139","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useStakedBalance.ts":"140","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useEarnings.ts":"141","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useHarvest.ts":"142","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useGetPressUsersNearAssassination.ts":"143","C:\\Users\\CR\\Documents\\front-end\\src\\views\\Bank\\components\\ZapModal.tsx":"144","C:\\Users\\CR\\Documents\\front-end\\src\\grape-finance\\ERC20.ts":"145","C:\\Users\\CR\\Documents\\front-end\\src\\views\\GrapeNode\\components\\ClaimModal.jsx":"146","C:\\Users\\CR\\Documents\\front-end\\src\\components\\CardContent\\CardContent.tsx":"147","C:\\Users\\CR\\Documents\\front-end\\src\\components\\Label\\Label.tsx":"148","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useApproveZapper.ts":"149","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useGrapeNodeClaimFee.ts":"150","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useENS.ts":"151","C:\\Users\\CR\\Documents\\front-end\\src\\components\\WalletProviderModal\\index.js":"152","C:\\Users\\CR\\Documents\\front-end\\src\\components\\WalletProviderModal\\WalletProviderModal.js":"153","C:\\Users\\CR\\Documents\\front-end\\src\\components\\ModalTitle\\index.ts":"154","C:\\Users\\CR\\Documents\\front-end\\src\\components\\WalletProviderModal\\WalletCard.js":"155","C:\\Users\\CR\\Documents\\front-end\\src\\components\\ModalTitle\\ModalTitle.tsx":"156","C:\\Users\\CR\\Documents\\front-end\\src\\components\\Modal\\index.ts":"157","C:\\Users\\CR\\Documents\\front-end\\src\\components\\ModalActions\\index.ts":"158","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\usePoolBalance.ts":"159","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useZapStakePress.ts":"160","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\usePressLottoInfo.ts":"161","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useStakePress.ts":"162","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useCompoundPress.ts":"163","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useClaimPress.ts":"164","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useCompound.ts":"165","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useNodePrice.ts":"166","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useLpStatsBTC.ts":"167","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useTotalNodes.ts":"168","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useUserDetails.ts":"169","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useNodes.ts":"170","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useMaxPayout.ts":"171","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useDailyDrip.ts":"172","C:\\Users\\CR\\Documents\\front-end\\src\\components\\TokenInput\\index.ts":"173","C:\\Users\\CR\\Documents\\front-end\\src\\views\\Dashboard\\ProgressCountdown.tsx":"174","C:\\Users\\CR\\Documents\\front-end\\src\\components\\Modal\\Modal.tsx":"175","C:\\Users\\CR\\Documents\\front-end\\src\\components\\ModalActions\\ModalActions.tsx":"176","C:\\Users\\CR\\Documents\\front-end\\src\\components\\TokenInput\\TokenInput.tsx":"177","C:\\Users\\CR\\Documents\\front-end\\src\\components\\Container\\index.ts":"178","C:\\Users\\CR\\Documents\\front-end\\src\\components\\Card\\index.ts":"179","C:\\Users\\CR\\Documents\\front-end\\src\\components\\Input\\index.ts":"180","C:\\Users\\CR\\Documents\\front-end\\src\\components\\Card\\Card.tsx":"181","C:\\Users\\CR\\Documents\\front-end\\src\\components\\Container\\Container.tsx":"182","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useXGrapePrice.ts":"183","C:\\Users\\CR\\Documents\\front-end\\src\\components\\Input\\Input.tsx":"184","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useEagerConnect.js":"185","C:\\Users\\CR\\Documents\\front-end\\src\\components\\Footer\\index.js":"186","C:\\Users\\CR\\Documents\\front-end\\src\\components\\Footer\\Footer.js":"187","C:\\Users\\CR\\Documents\\front-end\\src\\components\\Button\\index.ts":"188","C:\\Users\\CR\\Documents\\front-end\\src\\components\\Button\\Button.tsx":"189","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useTreasuryAllocationTimes.ts":"190","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\boardroom\\useWithdrawCheck.ts":"191","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\boardroom\\useClaimRewardCheck.ts":"192","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useFetchBoardroomAPR.ts":"193","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useTotalStakedOnBoardroom.ts":"194","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useGetBoardroomPrintRate.ts":"195","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useCurrentEpoch.ts":"196","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useRedeemOnBoardroom.ts":"197","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useStakedBalanceOnBoardroom.ts":"198","C:\\Users\\CR\\Documents\\front-end\\src\\views\\Dashboard\\SodapressCard.tsx":"199","C:\\Users\\CR\\Documents\\front-end\\src\\views\\Dashboard\\WinepressCard.tsx":"200","C:\\Users\\CR\\Documents\\front-end\\src\\views\\Winery\\components\\ProgressCountdown.tsx":"201","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useSodapressUserInfo.ts":"202","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useWinepressUserInfo.ts":"203","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useWalletStats.ts":"204","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useBanks.ts":"205","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useBank.ts":"206","C:\\Users\\CR\\Documents\\front-end\\src\\views\\NFTRaffle\\components\\ExchangeCard.tsx":"207","C:\\Users\\CR\\Documents\\front-end\\src\\components\\Chart\\index.js":"208","C:\\Users\\CR\\Documents\\front-end\\src\\components\\Chart\\Chart.js":"209","C:\\Users\\CR\\Documents\\front-end\\src\\views\\NFTRaffle\\components\\ExchangeModal.tsx":"210","C:\\Users\\CR\\Documents\\front-end\\src\\views\\Bond\\BondEstimatorModal.js":"211","C:\\Users\\CR\\Documents\\front-end\\src\\views\\Rebates\\CemeteryCard.js":"212","C:\\Users\\CR\\Documents\\front-end\\src\\0x.ts":"213","C:\\Users\\CR\\Documents\\front-end\\src\\views\\Home\\HomeCard.js":"214","C:\\Users\\CR\\Documents\\front-end\\src\\grape-finance\\constants.ts":"215","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useBondsPurchasable.ts":"216","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useBondStats.ts":"217","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useTotalValueLocked.ts":"218","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useIsWindowVisible.ts":"219","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useDebounce.ts":"220","C:\\Users\\CR\\Documents\\front-end\\src\\views\\Bond\\components\\ExchangeCard.tsx":"221","C:\\Users\\CR\\Documents\\front-end\\src\\views\\Bond\\components\\ExchangeStat.tsx":"222","C:\\Users\\CR\\Documents\\front-end\\src\\components\\Spacer\\index.ts":"223","C:\\Users\\CR\\Documents\\front-end\\src\\components\\LPInfoCard\\index.ts":"224","C:\\Users\\CR\\Documents\\front-end\\src\\views\\Rebates\\components\\DepositModal.tsx":"225","C:\\Users\\CR\\Documents\\front-end\\src\\components\\InfoCard\\index.ts":"226","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useCatchError.ts":"227","C:\\Users\\CR\\Documents\\front-end\\src\\views\\Bond\\components\\ExchangeModal.tsx":"228","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useFantomPrice.ts":"229","C:\\Users\\CR\\Documents\\front-end\\src\\components\\Spacer\\Spacer.tsx":"230","C:\\Users\\CR\\Documents\\front-end\\src\\components\\LPInfoCard\\LPInfoCard.tsx":"231","C:\\Users\\CR\\Documents\\front-end\\src\\components\\InfoCard\\InfoCard.tsx":"232","C:\\Users\\CR\\Documents\\front-end\\src\\components\\Page\\PriceItems.tsx":"233","C:\\Users\\CR\\Documents\\front-end\\src\\components\\Button\\AnimatedButton.tsx":"234","C:\\Users\\CR\\Documents\\front-end\\src\\components\\Page\\AccountButton.tsx":"235","C:\\Users\\CR\\Documents\\front-end\\src\\components\\Page\\AccountModal.tsx":"236","C:\\Users\\CR\\Documents\\front-end\\src\\views\\Dashboard\\DashboardTop.tsx":"237"},{"size":572,"mtime":1667860334955,"results":"238","hashOfConfig":"239"},{"size":1497,"mtime":1667860334954,"results":"240","hashOfConfig":"239"},{"size":5181,"mtime":1667860334959,"results":"241","hashOfConfig":"239"},{"size":4666,"mtime":1667869901405,"results":"242","hashOfConfig":"239"},{"size":904,"mtime":1667869901590,"results":"243","hashOfConfig":"239"},{"size":666,"mtime":1668095556250,"results":"244","hashOfConfig":"239"},{"size":15131,"mtime":1667869901560,"results":"245","hashOfConfig":"239"},{"size":1359,"mtime":1667860334940,"results":"246","hashOfConfig":"239"},{"size":272,"mtime":1667860334960,"results":"247","hashOfConfig":"239"},{"size":33,"mtime":1667860334986,"results":"248","hashOfConfig":"239"},{"size":33,"mtime":1667860334973,"results":"249","hashOfConfig":"239"},{"size":34,"mtime":1667860334997,"results":"250","hashOfConfig":"239"},{"size":36,"mtime":1667860334996,"results":"251","hashOfConfig":"239"},{"size":38,"mtime":1667860334990,"results":"252","hashOfConfig":"239"},{"size":38,"mtime":1667860334980,"results":"253","hashOfConfig":"239"},{"size":39,"mtime":1667860334997,"results":"254","hashOfConfig":"239"},{"size":35,"mtime":1667860334992,"results":"255","hashOfConfig":"239"},{"size":33,"mtime":1667860334985,"results":"256","hashOfConfig":"239"},{"size":39,"mtime":1667860334995,"results":"257","hashOfConfig":"239"},{"size":58,"mtime":1667860334881,"results":"258","hashOfConfig":"239"},{"size":668,"mtime":1667860334961,"results":"259","hashOfConfig":"239"},{"size":496,"mtime":1667860334965,"results":"260","hashOfConfig":"239"},{"size":44,"mtime":1667869901544,"results":"261","hashOfConfig":"239"},{"size":81,"mtime":1667860334905,"results":"262","hashOfConfig":"239"},{"size":44,"mtime":1667860334906,"results":"263","hashOfConfig":"239"},{"size":41,"mtime":1667869901610,"results":"264","hashOfConfig":"239"},{"size":82,"mtime":1667860334906,"results":"265","hashOfConfig":"239"},{"size":82,"mtime":1667860334907,"results":"266","hashOfConfig":"239"},{"size":1712,"mtime":1667869901554,"results":"267","hashOfConfig":"239"},{"size":4406,"mtime":1667869901618,"results":"268","hashOfConfig":"239"},{"size":2128,"mtime":1667860334961,"results":"269","hashOfConfig":"239"},{"size":3328,"mtime":1667869901592,"results":"270","hashOfConfig":"239"},{"size":13892,"mtime":1668718499062,"results":"271","hashOfConfig":"239"},{"size":6467,"mtime":1668096831467,"results":"272","hashOfConfig":"239"},{"size":715,"mtime":1667869901506,"results":"273","hashOfConfig":"239"},{"size":1976,"mtime":1667860334963,"results":"274","hashOfConfig":"239"},{"size":1784,"mtime":1667860334961,"results":"275","hashOfConfig":"239"},{"size":694,"mtime":1667860334965,"results":"276","hashOfConfig":"239"},{"size":487,"mtime":1667860334959,"results":"277","hashOfConfig":"239"},{"size":8108,"mtime":1667869901599,"results":"278","hashOfConfig":"239"},{"size":8078,"mtime":1668096853796,"results":"279","hashOfConfig":"239"},{"size":6140,"mtime":1667869901618,"results":"280","hashOfConfig":"239"},{"size":599,"mtime":1668096855310,"results":"281","hashOfConfig":"239"},{"size":9194,"mtime":1668619892195,"results":"282","hashOfConfig":"239"},{"size":2308,"mtime":1668096663849,"results":"283","hashOfConfig":"239"},{"size":3019,"mtime":1667869901615,"results":"284","hashOfConfig":"239"},{"size":6316,"mtime":1668096845033,"results":"285","hashOfConfig":"239"},{"size":232,"mtime":1667860334905,"results":"286","hashOfConfig":"239"},{"size":1920,"mtime":1667860334961,"results":"287","hashOfConfig":"239"},{"size":1049,"mtime":1667869901544,"results":"288","hashOfConfig":"239"},{"size":1665,"mtime":1667860334905,"results":"289","hashOfConfig":"239"},{"size":3460,"mtime":1667869901609,"results":"290","hashOfConfig":"239"},{"size":921,"mtime":1667860334907,"results":"291","hashOfConfig":"239"},{"size":1735,"mtime":1667860334906,"results":"292","hashOfConfig":"239"},{"size":1004,"mtime":1667860334905,"results":"293","hashOfConfig":"239"},{"size":410,"mtime":1667869901592,"results":"294","hashOfConfig":"239"},{"size":598,"mtime":1667860334966,"results":"295","hashOfConfig":"239"},{"size":416,"mtime":1667860334967,"results":"296","hashOfConfig":"239"},{"size":2454,"mtime":1667869901553,"results":"297","hashOfConfig":"239"},{"size":11254,"mtime":1667869901585,"results":"298","hashOfConfig":"239"},{"size":671,"mtime":1668621426064,"results":"299","hashOfConfig":"239"},{"size":1029,"mtime":1667860334962,"results":"300","hashOfConfig":"239"},{"size":724,"mtime":1667860334960,"results":"301","hashOfConfig":"239"},{"size":684,"mtime":1667860334939,"results":"302","hashOfConfig":"239"},{"size":239,"mtime":1667860334936,"results":"303","hashOfConfig":"239"},{"size":744,"mtime":1667860334945,"results":"304","hashOfConfig":"239"},{"size":3254,"mtime":1667869901591,"results":"305","hashOfConfig":"239"},{"size":2909,"mtime":1667869901582,"results":"306","hashOfConfig":"239"},{"size":907,"mtime":1667869901580,"results":"307","hashOfConfig":"239"},{"size":33,"mtime":1667860334891,"results":"308","hashOfConfig":"239"},{"size":3442,"mtime":1667869901622,"results":"309","hashOfConfig":"239"},{"size":775,"mtime":1667860334921,"results":"310","hashOfConfig":"239"},{"size":834,"mtime":1667860334930,"results":"311","hashOfConfig":"239"},{"size":1507,"mtime":1667869901593,"results":"312","hashOfConfig":"239"},{"size":5543,"mtime":1667869901609,"results":"313","hashOfConfig":"239"},{"size":812,"mtime":1667869901552,"results":"314","hashOfConfig":"239"},{"size":834,"mtime":1667860334936,"results":"315","hashOfConfig":"239"},{"size":1237,"mtime":1667869901554,"results":"316","hashOfConfig":"239"},{"size":818,"mtime":1667860334952,"results":"317","hashOfConfig":"239"},{"size":821,"mtime":1667860334937,"results":"318","hashOfConfig":"239"},{"size":772,"mtime":1667860334941,"results":"319","hashOfConfig":"239"},{"size":862,"mtime":1667860334951,"results":"320","hashOfConfig":"239"},{"size":638,"mtime":1667869901586,"results":"321","hashOfConfig":"239"},{"size":1169,"mtime":1667869901604,"results":"322","hashOfConfig":"239"},{"size":633,"mtime":1667869901588,"results":"323","hashOfConfig":"239"},{"size":1254,"mtime":1667869901604,"results":"324","hashOfConfig":"239"},{"size":690,"mtime":1668619525557,"results":"325","hashOfConfig":"239"},{"size":905,"mtime":1668095556252,"results":"326","hashOfConfig":"239"},{"size":26675,"mtime":1668616016703,"results":"327","hashOfConfig":"239"},{"size":720,"mtime":1668613361042,"results":"328","hashOfConfig":"239"},{"size":40,"mtime":1667860334898,"results":"329","hashOfConfig":"239"},{"size":261,"mtime":1667860334946,"results":"330","hashOfConfig":"239"},{"size":85,"mtime":1667860334879,"results":"331","hashOfConfig":"239"},{"size":117,"mtime":1667860334921,"results":"332","hashOfConfig":"239"},{"size":41,"mtime":1667860334900,"results":"333","hashOfConfig":"239"},{"size":855,"mtime":1667869901593,"results":"334","hashOfConfig":"239"},{"size":977,"mtime":1668621423160,"results":"335","hashOfConfig":"239"},{"size":369,"mtime":1667860334940,"results":"336","hashOfConfig":"239"},{"size":890,"mtime":1667860334914,"results":"337","hashOfConfig":"239"},{"size":1691,"mtime":1667860334992,"results":"338","hashOfConfig":"239"},{"size":712,"mtime":1667860334930,"results":"339","hashOfConfig":"239"},{"size":2084,"mtime":1667869901574,"results":"340","hashOfConfig":"239"},{"size":1012,"mtime":1667869901583,"results":"341","hashOfConfig":"239"},{"size":1247,"mtime":1667869901584,"results":"342","hashOfConfig":"239"},{"size":1025,"mtime":1667869901582,"results":"343","hashOfConfig":"239"},{"size":60710,"mtime":1669319729068,"results":"344","hashOfConfig":"239"},{"size":6306,"mtime":1667869901610,"results":"345","hashOfConfig":"239"},{"size":671,"mtime":1668621414518,"results":"346","hashOfConfig":"239"},{"size":774,"mtime":1667860334934,"results":"347","hashOfConfig":"239"},{"size":595,"mtime":1667860334938,"results":"348","hashOfConfig":"239"},{"size":556,"mtime":1667860334924,"results":"349","hashOfConfig":"239"},{"size":1906,"mtime":1667869901597,"results":"350","hashOfConfig":"239"},{"size":1764,"mtime":1667869901595,"results":"351","hashOfConfig":"239"},{"size":25416,"mtime":1668619218088,"results":"352","hashOfConfig":"239"},{"size":46833,"mtime":1668617312618,"results":"353","hashOfConfig":"239"},{"size":22371,"mtime":1668615905855,"results":"354","hashOfConfig":"239"},{"size":684,"mtime":1667860334953,"results":"355","hashOfConfig":"239"},{"size":544,"mtime":1667860334925,"results":"356","hashOfConfig":"239"},{"size":627,"mtime":1667860334948,"results":"357","hashOfConfig":"239"},{"size":2564,"mtime":1669315808161,"results":"358","hashOfConfig":"239"},{"size":81241,"mtime":1669334670159,"results":"359","hashOfConfig":"239"},{"size":1705,"mtime":1667860334879,"results":"360","hashOfConfig":"239"},{"size":317,"mtime":1668097546174,"results":"361","hashOfConfig":"239"},{"size":34,"mtime":1667860334879,"results":"362","hashOfConfig":"239"},{"size":40,"mtime":1667860334869,"results":"363","hashOfConfig":"239"},{"size":838,"mtime":1667860334925,"results":"364","hashOfConfig":"239"},{"size":1303,"mtime":1667869901580,"results":"365","hashOfConfig":"239"},{"size":639,"mtime":1667869901578,"results":"366","hashOfConfig":"239"},{"size":766,"mtime":1667869901583,"results":"367","hashOfConfig":"239"},{"size":789,"mtime":1667869901581,"results":"368","hashOfConfig":"239"},{"size":795,"mtime":1667869901587,"results":"369","hashOfConfig":"239"},{"size":737,"mtime":1667869901576,"results":"370","hashOfConfig":"239"},{"size":742,"mtime":1667869901575,"results":"371","hashOfConfig":"239"},{"size":1030,"mtime":1667860334949,"results":"372","hashOfConfig":"239"},{"size":868,"mtime":1667860334952,"results":"373","hashOfConfig":"239"},{"size":751,"mtime":1667860334953,"results":"374","hashOfConfig":"239"},{"size":1160,"mtime":1668621420279,"results":"375","hashOfConfig":"239"},{"size":1238,"mtime":1667860334947,"results":"376","hashOfConfig":"239"},{"size":788,"mtime":1667860334967,"results":"377","hashOfConfig":"239"},{"size":1057,"mtime":1668621416899,"results":"378","hashOfConfig":"239"},{"size":1085,"mtime":1668621407798,"results":"379","hashOfConfig":"239"},{"size":697,"mtime":1667860334937,"results":"380","hashOfConfig":"239"},{"size":819,"mtime":1667869901579,"results":"381","hashOfConfig":"239"},{"size":8437,"mtime":1667869901598,"results":"382","hashOfConfig":"239"},{"size":7556,"mtime":1667860334912,"results":"383","hashOfConfig":"239"},{"size":2178,"mtime":1668096541413,"results":"384","hashOfConfig":"239"},{"size":370,"mtime":1667860334869,"results":"385","hashOfConfig":"239"},{"size":1042,"mtime":1667869901505,"results":"386","hashOfConfig":"239"},{"size":2493,"mtime":1667860334926,"results":"387","hashOfConfig":"239"},{"size":630,"mtime":1667869901579,"results":"388","hashOfConfig":"239"},{"size":549,"mtime":1667860334932,"results":"389","hashOfConfig":"239"},{"size":97,"mtime":1667860334902,"results":"390","hashOfConfig":"239"},{"size":2805,"mtime":1667869901559,"results":"391","hashOfConfig":"239"},{"size":39,"mtime":1667860334885,"results":"392","hashOfConfig":"239"},{"size":377,"mtime":1667869901558,"results":"393","hashOfConfig":"239"},{"size":570,"mtime":1667869901541,"results":"394","hashOfConfig":"239"},{"size":76,"mtime":1667860334883,"results":"395","hashOfConfig":"239"},{"size":41,"mtime":1667860334884,"results":"396","hashOfConfig":"239"},{"size":985,"mtime":1667869901584,"results":"397","hashOfConfig":"239"},{"size":876,"mtime":1667869901589,"results":"398","hashOfConfig":"239"},{"size":778,"mtime":1667869901585,"results":"399","hashOfConfig":"239"},{"size":818,"mtime":1667869901587,"results":"400","hashOfConfig":"239"},{"size":693,"mtime":1667869901577,"results":"401","hashOfConfig":"239"},{"size":672,"mtime":1667869901577,"results":"402","hashOfConfig":"239"},{"size":674,"mtime":1667860334931,"results":"403","hashOfConfig":"239"},{"size":1034,"mtime":1667860334940,"results":"404","hashOfConfig":"239"},{"size":693,"mtime":1667860334939,"results":"405","hashOfConfig":"239"},{"size":904,"mtime":1667860334949,"results":"406","hashOfConfig":"239"},{"size":947,"mtime":1667860334951,"results":"407","hashOfConfig":"239"},{"size":929,"mtime":1667860334941,"results":"408","hashOfConfig":"239"},{"size":941,"mtime":1667860334940,"results":"409","hashOfConfig":"239"},{"size":941,"mtime":1667860334932,"results":"410","hashOfConfig":"239"},{"size":39,"mtime":1667860334897,"results":"411","hashOfConfig":"239"},{"size":2083,"mtime":1668096638352,"results":"412","hashOfConfig":"239"},{"size":706,"mtime":1667869901507,"results":"413","hashOfConfig":"239"},{"size":980,"mtime":1667860334884,"results":"414","hashOfConfig":"239"},{"size":1631,"mtime":1667869901555,"results":"415","hashOfConfig":"239"},{"size":38,"mtime":1667860334872,"results":"416","hashOfConfig":"239"},{"size":33,"mtime":1667860334869,"results":"417","hashOfConfig":"239"},{"size":76,"mtime":1667860334877,"results":"418","hashOfConfig":"239"},{"size":366,"mtime":1667860334868,"results":"419","hashOfConfig":"239"},{"size":954,"mtime":1667860334872,"results":"420","hashOfConfig":"239"},{"size":621,"mtime":1667869901588,"results":"421","hashOfConfig":"239"},{"size":1160,"mtime":1667869901503,"results":"422","hashOfConfig":"239"},{"size":646,"mtime":1667860334933,"results":"423","hashOfConfig":"239"},{"size":58,"mtime":1667860334874,"results":"424","hashOfConfig":"239"},{"size":7326,"mtime":1669239207249,"results":"425","hashOfConfig":"239"},{"size":35,"mtime":1667860334868,"results":"426","hashOfConfig":"239"},{"size":3448,"mtime":1667869901499,"results":"427","hashOfConfig":"239"},{"size":645,"mtime":1667860334950,"results":"428","hashOfConfig":"239"},{"size":748,"mtime":1667860334925,"results":"429","hashOfConfig":"239"},{"size":776,"mtime":1667860334924,"results":"430","hashOfConfig":"239"},{"size":634,"mtime":1667860334934,"results":"431","hashOfConfig":"239"},{"size":811,"mtime":1667860334950,"results":"432","hashOfConfig":"239"},{"size":675,"mtime":1667860334934,"results":"433","hashOfConfig":"239"},{"size":723,"mtime":1667860334932,"results":"434","hashOfConfig":"239"},{"size":659,"mtime":1667860334945,"results":"435","hashOfConfig":"239"},{"size":784,"mtime":1667860334948,"results":"436","hashOfConfig":"239"},{"size":47027,"mtime":1668617312616,"results":"437","hashOfConfig":"239"},{"size":47220,"mtime":1668617312612,"results":"438","hashOfConfig":"239"},{"size":1797,"mtime":1668096650898,"results":"439","hashOfConfig":"239"},{"size":789,"mtime":1667869901586,"results":"440","hashOfConfig":"239"},{"size":789,"mtime":1667869901588,"results":"441","hashOfConfig":"239"},{"size":705,"mtime":1668576580186,"results":"442","hashOfConfig":"239"},{"size":219,"mtime":1667860334927,"results":"443","hashOfConfig":"239"},{"size":348,"mtime":1667860334927,"results":"444","hashOfConfig":"239"},{"size":3437,"mtime":1667869901619,"results":"445","hashOfConfig":"239"},{"size":55,"mtime":1667860334871,"results":"446","hashOfConfig":"239"},{"size":275,"mtime":1667869901499,"results":"447","hashOfConfig":"239"},{"size":1691,"mtime":1667860334989,"results":"448","hashOfConfig":"239"},{"size":6024,"mtime":1667869901599,"results":"449","hashOfConfig":"239"},{"size":3934,"mtime":1668096754707,"results":"450","hashOfConfig":"239"},{"size":853,"mtime":1667860334785,"results":"451","hashOfConfig":"239"},{"size":5645,"mtime":1669315843968,"results":"452","hashOfConfig":"239"},{"size":203,"mtime":1667860334914,"results":"453","hashOfConfig":"239"},{"size":616,"mtime":1667860334929,"results":"454","hashOfConfig":"239"},{"size":666,"mtime":1667860334929,"results":"455","hashOfConfig":"239"},{"size":683,"mtime":1667860334950,"results":"456","hashOfConfig":"239"},{"size":824,"mtime":1667860334939,"results":"457","hashOfConfig":"239"},{"size":739,"mtime":1667860334932,"results":"458","hashOfConfig":"239"},{"size":5140,"mtime":1667869901600,"results":"459","hashOfConfig":"239"},{"size":1048,"mtime":1667869901600,"results":"460","hashOfConfig":"239"},{"size":35,"mtime":1667860334896,"results":"461","hashOfConfig":"239"},{"size":39,"mtime":1667860334878,"results":"462","hashOfConfig":"239"},{"size":4242,"mtime":1668096714766,"results":"463","hashOfConfig":"239"},{"size":37,"mtime":1667860334876,"results":"464","hashOfConfig":"239"},{"size":729,"mtime":1667860334930,"results":"465","hashOfConfig":"239"},{"size":1691,"mtime":1667860334973,"results":"466","hashOfConfig":"239"},{"size":469,"mtime":1667860334934,"results":"467","hashOfConfig":"239"},{"size":729,"mtime":1667860334896,"results":"468","hashOfConfig":"239"},{"size":4012,"mtime":1667869901504,"results":"469","hashOfConfig":"239"},{"size":4605,"mtime":1667869901503,"results":"470","hashOfConfig":"239"},{"size":3632,"mtime":1668095556244,"results":"471","hashOfConfig":"239"},{"size":1012,"mtime":1668095556237,"results":"472","hashOfConfig":"239"},{"size":1735,"mtime":1668097583937,"results":"473","hashOfConfig":"239"},{"size":2824,"mtime":1668097567038,"results":"474","hashOfConfig":"239"},{"size":23763,"mtime":1668628367302,"results":"475","hashOfConfig":"239"},{"filePath":"476","messages":"477","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},"1w001cr",{"filePath":"479","messages":"480","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"481"},{"filePath":"482","messages":"483","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"481"},{"filePath":"484","messages":"485","errorCount":0,"fatalErrorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"486","usedDeprecatedRules":"478"},{"filePath":"487","messages":"488","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"481"},{"filePath":"489","messages":"490","errorCount":0,"fatalErrorCount":0,"warningCount":4,"fixableErrorCount":0,"fixableWarningCount":0,"source":"491","usedDeprecatedRules":"481"},{"filePath":"492","messages":"493","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"494","messages":"495","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"496","messages":"497","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"498","messages":"499","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"481"},{"filePath":"500","messages":"501","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"481"},{"filePath":"502","messages":"503","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"481"},{"filePath":"504","messages":"505","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"481"},{"filePath":"506","messages":"507","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"481"},{"filePath":"508","messages":"509","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"481"},{"filePath":"510","messages":"511","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"481"},{"filePath":"512","messages":"513","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"481"},{"filePath":"514","messages":"515","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"481"},{"filePath":"516","messages":"517","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"481"},{"filePath":"518","messages":"519","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"481"},{"filePath":"520","messages":"521","errorCount":0,"fatalErrorCount":0,"warningCount":3,"fixableErrorCount":0,"fixableWarningCount":0,"source":"522","usedDeprecatedRules":"478"},{"filePath":"523","messages":"524","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"525","messages":"526","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"527","messages":"528","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"529","messages":"530","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"531","messages":"532","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"533","messages":"534","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"535","messages":"536","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"537","messages":"538","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"539","messages":"540","errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"541","usedDeprecatedRules":"478"},{"filePath":"542","messages":"543","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"544","messages":"545","errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"546","usedDeprecatedRules":"478"},{"filePath":"547","messages":"548","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"481"},{"filePath":"549","messages":"550","errorCount":0,"fatalErrorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"551","usedDeprecatedRules":"481"},{"filePath":"552","messages":"553","errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"554","usedDeprecatedRules":"481"},{"filePath":"555","messages":"556","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"557","messages":"558","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"559","messages":"560","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"561","messages":"562","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"563","messages":"564","errorCount":0,"fatalErrorCount":0,"warningCount":4,"fixableErrorCount":0,"fixableWarningCount":0,"source":"565","usedDeprecatedRules":"478"},{"filePath":"566","messages":"567","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"568","messages":"569","errorCount":0,"fatalErrorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"570","usedDeprecatedRules":"478"},{"filePath":"571","messages":"572","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"573","messages":"574","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"575","messages":"576","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"577","messages":"578","errorCount":0,"fatalErrorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"579","usedDeprecatedRules":"478"},{"filePath":"580","messages":"581","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"582","messages":"583","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"584","messages":"585","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"586","messages":"587","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"588","messages":"589","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"590","messages":"591","errorCount":0,"fatalErrorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"592","usedDeprecatedRules":"478"},{"filePath":"593","messages":"594","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"595","messages":"596","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"597","messages":"598","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"599","messages":"600","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"481"},{"filePath":"601","messages":"602","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"603","messages":"604","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"605","messages":"606","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"607","messages":"608","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"481"},{"filePath":"609","messages":"610","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"611","messages":"612","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"613","messages":"614","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"615","messages":"616","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"617","messages":"618","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"619","messages":"620","errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"621","usedDeprecatedRules":"478"},{"filePath":"622","messages":"623","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"624","messages":"625","errorCount":0,"fatalErrorCount":0,"warningCount":4,"fixableErrorCount":0,"fixableWarningCount":0,"source":"626","usedDeprecatedRules":"478"},{"filePath":"627","messages":"628","errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"629","usedDeprecatedRules":"478"},{"filePath":"630","messages":"631","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"632","messages":"633","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"634","messages":"635","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"636","messages":"637","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"638","messages":"639","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"640","messages":"641","errorCount":0,"fatalErrorCount":0,"warningCount":3,"fixableErrorCount":0,"fixableWarningCount":0,"source":"642","usedDeprecatedRules":"478"},{"filePath":"643","messages":"644","errorCount":0,"fatalErrorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"645","usedDeprecatedRules":"478"},{"filePath":"646","messages":"647","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"648","messages":"649","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"650","messages":"651","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"652","messages":"653","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"654","messages":"655","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"656","messages":"657","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"658","messages":"659","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"660","messages":"661","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"662","messages":"663","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"664","messages":"665","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"666","messages":"667","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"668","messages":"669","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"670","messages":"671","errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"672","usedDeprecatedRules":"478"},{"filePath":"673","messages":"674","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"675","messages":"676","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"677","messages":"678","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"679","messages":"680","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"681","messages":"682","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"683","messages":"684","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"685","messages":"686","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"687","messages":"688","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"689","messages":"690","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"691","messages":"692","errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"693","usedDeprecatedRules":"478"},{"filePath":"694","messages":"695","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"696","messages":"697","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"698","messages":"699","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"700","messages":"701","errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"702","usedDeprecatedRules":"478"},{"filePath":"703","messages":"704","errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"705","usedDeprecatedRules":"478"},{"filePath":"706","messages":"707","errorCount":0,"fatalErrorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"708","usedDeprecatedRules":"478"},{"filePath":"709","messages":"710","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"711","messages":"712","errorCount":0,"fatalErrorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"713","usedDeprecatedRules":"478"},{"filePath":"714","messages":"715","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"716","messages":"717","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"718","messages":"719","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"720","messages":"721","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"722","messages":"723","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"724","messages":"725","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"726","messages":"727","errorCount":0,"fatalErrorCount":0,"warningCount":5,"fixableErrorCount":0,"fixableWarningCount":0,"source":"728","usedDeprecatedRules":"478"},{"filePath":"729","messages":"730","errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"731","usedDeprecatedRules":"478"},{"filePath":"732","messages":"733","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"734","messages":"735","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"736","messages":"737","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"738","messages":"739","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"740","messages":"741","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"742","messages":"743","errorCount":0,"fatalErrorCount":0,"warningCount":11,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"744","messages":"745","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"746","messages":"747","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"748","messages":"749","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"750","messages":"751","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"752","messages":"753","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"754","messages":"755","errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"756","usedDeprecatedRules":"478"},{"filePath":"757","messages":"758","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"759","messages":"760","errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"761","usedDeprecatedRules":"478"},{"filePath":"762","messages":"763","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"764","messages":"765","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"766","messages":"767","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"768","messages":"769","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"770","messages":"771","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"772","messages":"773","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"774","messages":"775","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"776","messages":"777","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"778","messages":"779","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"780","messages":"781","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"782","messages":"783","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"784","messages":"785","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"786","messages":"787","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"788","messages":"789","errorCount":0,"fatalErrorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"790","usedDeprecatedRules":"478"},{"filePath":"791","messages":"792","errorCount":0,"fatalErrorCount":0,"warningCount":15,"fixableErrorCount":0,"fixableWarningCount":0,"source":"793","usedDeprecatedRules":"478"},{"filePath":"794","messages":"795","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"796","messages":"797","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"481"},{"filePath":"798","messages":"799","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"800","messages":"801","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"802","messages":"803","errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"804","usedDeprecatedRules":"478"},{"filePath":"805","messages":"806","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"807","messages":"808","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"809","messages":"810","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"481"},{"filePath":"811","messages":"812","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"481"},{"filePath":"813","messages":"814","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"815","messages":"816","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"481"},{"filePath":"817","messages":"818","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"819","messages":"820","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"821","messages":"822","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"823","messages":"824","errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"825","usedDeprecatedRules":"478"},{"filePath":"826","messages":"827","errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"828","usedDeprecatedRules":"478"},{"filePath":"829","messages":"830","errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"831","usedDeprecatedRules":"478"},{"filePath":"832","messages":"833","errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"834","usedDeprecatedRules":"478"},{"filePath":"835","messages":"836","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"837","messages":"838","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"839","messages":"840","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"841","messages":"842","errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"843","usedDeprecatedRules":"478"},{"filePath":"844","messages":"845","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"846","messages":"847","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"848","messages":"849","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"850","messages":"851","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"852","messages":"853","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"854","messages":"855","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"856","messages":"857","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"858","messages":"859","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"860","messages":"861","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"862","messages":"863","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"864","messages":"865","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"866","messages":"867","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"868","messages":"869","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"870","messages":"871","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"872","messages":"873","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"874","messages":"875","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"876","messages":"877","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"878","messages":"879","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"880","messages":"881","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"481"},{"filePath":"882","messages":"883","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"481"},{"filePath":"884","messages":"885","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"886","messages":"887","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"888","messages":"889","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"890","messages":"891","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"892","messages":"893","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"894","messages":"895","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"896","messages":"897","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"898","messages":"899","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"900","messages":"901","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"902","messages":"903","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"904","messages":"905","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"906","messages":"907","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"908","messages":"909","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"910","messages":"911","errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"912","usedDeprecatedRules":"478"},{"filePath":"913","messages":"914","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"915","messages":"916","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"917","messages":"918","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"919","messages":"920","errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"921","usedDeprecatedRules":"478"},{"filePath":"922","messages":"923","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"924","messages":"925","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"926","messages":"927","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"928","messages":"929","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"481"},{"filePath":"930","messages":"931","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"481"},{"filePath":"932","messages":"933","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"934","messages":"935","errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"936","usedDeprecatedRules":"481"},{"filePath":"937","messages":"938","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"481"},{"filePath":"939","messages":"940","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"941","messages":"942","errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":1,"source":"943"},{"filePath":"944","messages":"945","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"946","messages":"947","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"948","messages":"949","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"950","messages":"951","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"952","messages":"953","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"954","messages":"955","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"956","messages":"957","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"958","messages":"959","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"960","messages":"961","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"962","messages":"963","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"964","messages":"965","errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"966","usedDeprecatedRules":"478"},{"filePath":"967","messages":"968","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"969","messages":"970","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"971","messages":"972","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"973","messages":"974","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"975","messages":"976","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"977","messages":"978","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"979","messages":"980","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"981","messages":"982","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"983","messages":"984","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"985","messages":"986","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"987","messages":"988","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"478"},{"filePath":"989","messages":"990","errorCount":0,"fatalErrorCount":0,"warningCount":7,"fixableErrorCount":0,"fixableWarningCount":0,"source":"991","usedDeprecatedRules":"478"},"C:\\Users\\CR\\Documents\\front-end\\src\\index.tsx",[],["992","993"],"C:\\Users\\CR\\Documents\\front-end\\src\\i18n.js",[],["994","995"],"C:\\Users\\CR\\Documents\\front-end\\src\\serviceWorker.js",[],"C:\\Users\\CR\\Documents\\front-end\\src\\App.tsx",["996","997"],"import React, {Suspense, lazy} from 'react';\r\nimport {Provider} from 'react-redux';\r\nimport {BrowserRouter as Router, Route, Switch} from 'react-router-dom';\r\nimport {ThemeProvider as TP} from '@material-ui/core/styles';\r\nimport {ThemeProvider as TP1} from 'styled-components';\r\nimport useWallet, {UseWalletProvider} from 'use-wallet';\r\nimport usePromptNetwork from './hooks/useNetworkPrompt';\r\nimport BanksProvider from './contexts/Banks';\r\nimport GrapeFinanceProvider from './contexts/GrapeFinanceProvider';\r\nimport ModalsProvider from './contexts/Modals';\r\nimport {store} from './state';\r\nimport theme from './theme';\r\nimport newTheme from './newTheme';\r\nimport config from './config';\r\nimport Updaters from './state/Updaters';\r\nimport Loader from './components/Loader';\r\nimport Popups from './components/Popups';\r\nimport {RefreshContextProvider} from './contexts/RefreshContext';\r\nimport NetworkVerifier from './components/NetworkVerifier';\r\nimport BackgroundDecoration from './components/BackgroundDecoration';\r\nimport BackgroundGlows from './views/BackgroundGlows';\r\n\r\nconst Home = lazy(() => import('./views/Home'));\r\nconst Dashboard = lazy(() => import('./views/Dashboard'));\r\nconst Bond = lazy(() => import('./views/Bond'));\r\nconst Stats = lazy(() => import('./views/Stats'));\r\nconst Roadmap = lazy(() => import('./views/Roadmap'));\r\nconst Raffle = lazy(() => import('./views/Raffle'));\r\nconst Strategies = lazy(() => import('./views/Strategies'));\r\nconst Help = lazy(() => import('./views/Help'));\r\nconst Leaderboard = lazy(() => import('./views/Leaderboard'));\r\nconst NFTRaffle = lazy(() => import('./views/NFTRaffle'));\r\nconst Rebates = lazy(() => import('./views/Rebates'));\r\nconst Peg = lazy(() => import('./views/Extinction'));\r\n\r\nconst NoMatch = () => (\r\n <h3 style={{position: 'absolute', top: '50%', left: '50%', transform: 'translate(-50%, -50%)'}}>\r\n URL Not Found. <a href=\"/\">Go back home.</a>\r\n </h3>\r\n);\r\n\r\nconst App: React.FC = () => {\r\n // Clear localStorage for mobile users\r\n if (typeof localStorage.version_app === 'undefined' || localStorage.version_app !== '1.1') {\r\n localStorage.clear();\r\n localStorage.setItem('connectorId', '');\r\n localStorage.setItem('version_app', '1.1');\r\n }\r\n\r\n usePromptNetwork();\r\n\r\n return (\r\n <Providers>\r\n <NetworkVerifier />\r\n <Router>\r\n <Suspense fallback={<Loader />}>\r\n <BackgroundGlows />\r\n <Switch>\r\n <Route exact path=\"/\">\r\n <Home />\r\n </Route>\r\n <Route exact path=\"/dashboard\">\r\n <Dashboard />\r\n </Route>\r\n\r\n <Route path=\"/rebates\">\r\n <Rebates />\r\n </Route>\r\n <Route path=\"/leaderboard\">\r\n <Leaderboard />\r\n </Route>\r\n <Route path=\"/bond\">\r\n <Bond />\r\n </Route>\r\n\r\n <Route path=\"/roadmap\">\r\n <Roadmap />\r\n </Route>\r\n <Route path=\"/strategies\">\r\n <Strategies />\r\n </Route>\r\n <Route path=\"/stats\">\r\n <Stats />\r\n </Route>\r\n <Route path=\"/raffle\">\r\n <Raffle />\r\n </Route>\r\n <Route path=\"/nftraffle\">\r\n <NFTRaffle />\r\n </Route>\r\n <Route path=\"/help\">\r\n <Help />\r\n </Route>\r\n <Route path=\"/pegpool\">\r\n <Peg />\r\n </Route>\r\n <Route path=\"*\">\r\n <NoMatch />\r\n </Route>\r\n </Switch>\r\n </Suspense>\r\n </Router>\r\n </Providers>\r\n );\r\n};\r\n\r\nconst Providers: React.FC = ({children}) => {\r\n return (\r\n <TP1 theme={theme}>\r\n <TP theme={newTheme}>\r\n <UseWalletProvider\r\n chainId={config.chainId}\r\n connectors={{\r\n walletconnect: {rpcUrl: config.defaultProvider},\r\n walletlink: {\r\n url: config.defaultProvider,\r\n appName: 'grapefinance.app',\r\n appLogoUrl: '#',\r\n },\r\n }}\r\n >\r\n <Provider store={store}>\r\n <Updaters />\r\n <RefreshContextProvider>\r\n <GrapeFinanceProvider>\r\n <ModalsProvider>\r\n <BanksProvider>\r\n <>\r\n <Popups />\r\n {children}\r\n </>\r\n </BanksProvider>\r\n </ModalsProvider>\r\n </GrapeFinanceProvider>\r\n </RefreshContextProvider>\r\n </Provider>\r\n </UseWalletProvider>\r\n </TP>\r\n </TP1>\r\n );\r\n};\r\n\r\nexport default App;\r\n","C:\\Users\\CR\\Documents\\front-end\\src\\newTheme.js",[],"C:\\Users\\CR\\Documents\\front-end\\src\\views\\BackgroundGlows.js",["998","999","1000","1001"],"import React, {useEffect, useCallback, useState, useRef} from 'react';\r\nimport heroImg from '../assets/img/grape-glass-bg.png';\r\nimport backgroundImg from '../assets/img/backgroundblur.png'\r\n\r\nfunction BackgroundGlows() {\r\n return (\r\n <div className=\"\">\r\n <div\r\n style={{\r\n opacity: 0.7,\r\n position: 'fixed',\r\n top: '20%',\r\n right: '0',\r\n zIndex: '-1',\r\n }}\r\n >\r\n <img src={heroImg} alt={'GRAPE Logo'} style={{width: 'auto', height: '100%'}} />\r\n </div>\r\n <img alt=\"\" src={backgroundImg} className=\"background-blur\" />\r\n </div>\r\n );\r\n}\r\n\r\nexport default BackgroundGlows;\r\n","C:\\Users\\CR\\Documents\\front-end\\src\\config.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useNetworkPrompt.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\state\\Updaters.tsx",[],"C:\\Users\\CR\\Documents\\front-end\\src\\views\\Home\\index.js",[],"C:\\Users\\CR\\Documents\\front-end\\src\\views\\Bond\\index.js",[],"C:\\Users\\CR\\Documents\\front-end\\src\\views\\Stats\\index.js",[],"C:\\Users\\CR\\Documents\\front-end\\src\\views\\Roadmap\\index.js",[],"C:\\Users\\CR\\Documents\\front-end\\src\\views\\NFTRaffle\\index.js",[],"C:\\Users\\CR\\Documents\\front-end\\src\\views\\Dashboard\\index.js",[],"C:\\Users\\CR\\Documents\\front-end\\src\\views\\Strategies\\index.js",[],"C:\\Users\\CR\\Documents\\front-end\\src\\views\\Raffle\\index.js",[],"C:\\Users\\CR\\Documents\\front-end\\src\\views\\Help\\index.js",[],"C:\\Users\\CR\\Documents\\front-end\\src\\views\\Rebates\\index.js",[],"C:\\Users\\CR\\Documents\\front-end\\src\\components\\Loader\\index.js",[],"C:\\Users\\CR\\Documents\\front-end\\src\\state\\index.ts",["1002","1003","1004"],"import {configureStore} from '@reduxjs/toolkit';\r\nimport {save, load} from 'redux-localstorage-simple';\r\nimport transactions from './transactions/reducer';\r\nimport application from './application/reducer';\r\nimport {eventApi} from '../services/event';\r\n\r\nconst PERSISTED_KEYS: string[] = ['transactions'];\r\n\r\nexport const store = configureStore({\r\n reducer: {\r\n application,\r\n transactions,\r\n [eventApi.reducerPath]: eventApi.reducer,\r\n },\r\n middleware: (getDefaultMiddleware) => getDefaultMiddleware().concat(eventApi.middleware),\r\n \r\n});\r\n\r\nexport type AppState = ReturnType<typeof store.getState>;\r\nexport type AppDispatch = typeof store.dispatch;\r\n\r\n\r\n","C:\\Users\\CR\\Documents\\front-end\\src\\theme\\index.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\components\\NetworkVerifier\\index.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\contexts\\Banks\\index.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\contexts\\Modals\\index.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\views\\Extinction\\index.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\contexts\\GrapeFinanceProvider\\index.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\contexts\\RefreshContext\\index.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\components\\Popups\\index.tsx",[],"C:\\Users\\CR\\Documents\\front-end\\src\\views\\Leaderboard\\index.tsx",["1005"],"import React from 'react';\r\nimport {withStyles, Theme, createStyles, makeStyles} from '@material-ui/core/styles';\r\nimport Table from '@material-ui/core/Table';\r\nimport TableBody from '@material-ui/core/TableBody';\r\nimport TableCell from '@material-ui/core/TableCell';\r\nimport TableContainer from '@material-ui/core/TableContainer';\r\nimport TableHead from '@material-ui/core/TableHead';\r\nimport TableRow from '@material-ui/core/TableRow';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport Page from '../../components/Page';\r\nimport {useGetEventQuery} from '../../services/event';\r\nimport {convertTime} from '../../utils/convertTime';\r\nimport {createGlobalStyle} from 'styled-components';\r\nimport { Typography } from '@material-ui/core';\r\n\r\n\r\nconst StyledTableCell = withStyles((theme: Theme) =>\r\n createStyles({\r\n head: {\r\n backgroundColor: 'transparent',\r\n color: '#fff',\r\n fontSize: 20,\r\n fontWeight: 500,\r\n },\r\n body: {\r\n fontSize: 20,\r\n color: '#fff',\r\n },\r\n }),\r\n)(TableCell);\r\n\r\nconst StyledTableRow = withStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n '&:nth-of-type(odd)': {\r\n backgroundColor: 'rgba(0,0,0,0.5)',\r\n },\r\n },\r\n }),\r\n)(TableRow);\r\n\r\nconst useStyles = makeStyles({\r\n table: {\r\n minWidth: 700,\r\n },\r\n});\r\n\r\nconst LeaderBoard = () => {\r\n const classes = useStyles();\r\n\r\n const {data: eventResponse} = useGetEventQuery();\r\n\r\n const [leaderBoardEntire, setLeaderBoardEntire] = React.useState([]);\r\n const [leaderBoardLastWeek, setLeaderBoardLastWeek] = React.useState([]);\r\n React.useEffect(() => {\r\n if (eventResponse && eventResponse.result) {\r\n setLeaderBoardEntire(eventResponse.data.leaderBoard);\r\n setLeaderBoardLastWeek(eventResponse.data.leaderBoardLastWeek);\r\n }\r\n }, [eventResponse]);\r\n\r\n return (\r\n <Page>\r\n <Typography color=\"textPrimary\" align=\"center\" variant=\"h3\" gutterBottom>\r\n Node Leaderboard\r\n </Typography>\r\n\r\n <Typography color=\"textSecondary\" align=\"left\" variant=\"h4\">\r\n All Time\r\n </Typography>\r\n\r\n <TableContainer component={Paper}>\r\n <Table className={classes.table} aria-label=\"customized table\">\r\n <TableHead>\r\n <TableRow>\r\n <StyledTableCell>Rank</StyledTableCell>\r\n <StyledTableCell>User</StyledTableCell>\r\n <StyledTableCell>Last Node Time</StyledTableCell>\r\n <StyledTableCell>Node Count</StyledTableCell>\r\n </TableRow>\r\n </TableHead>\r\n <TableBody>\r\n {leaderBoardEntire.map((row, index) => (\r\n <StyledTableRow key={index}>\r\n <StyledTableCell component=\"th\" scope=\"row\">\r\n {index + 1}\r\n </StyledTableCell>\r\n <StyledTableCell>{row._id.substring(35)}</StyledTableCell>\r\n <StyledTableCell>{convertTime(row.timestamp)}</StyledTableCell>\r\n <StyledTableCell>{row.num}</StyledTableCell>\r\n </StyledTableRow>\r\n ))}\r\n </TableBody>\r\n </Table>\r\n </TableContainer>\r\n \r\n \r\n <Typography color=\"textSecondary\" style={{textAlign: 'left', marginTop: '15px', marginBottom: '15px'}} align=\"left\" variant=\"h4\">\r\n Last Week\r\n </Typography>\r\n \r\n <TableContainer component={Paper}>\r\n <Table className={classes.table} aria-label=\"customized table\">\r\n <TableHead>\r\n <TableRow>\r\n <StyledTableCell>Rank</StyledTableCell>\r\n <StyledTableCell>User</StyledTableCell>\r\n <StyledTableCell>Last Node Time</StyledTableCell>\r\n <StyledTableCell>Node Count</StyledTableCell>\r\n </TableRow>\r\n </TableHead>\r\n <TableBody>\r\n {leaderBoardLastWeek.map((row, index) => (\r\n <StyledTableRow key={index}>\r\n <StyledTableCell component=\"th\" scope=\"row\">\r\n {index + 1}\r\n </StyledTableCell>\r\n <StyledTableCell>{row._id.substring(35)}</StyledTableCell>\r\n <StyledTableCell>{convertTime(row.timestamp)}</StyledTableCell>\r\n <StyledTableCell>{row.num}</StyledTableCell>\r\n </StyledTableRow>\r\n ))}\r\n </TableBody>\r\n </Table>\r\n </TableContainer>\r\n </Page>\r\n );\r\n};\r\n\r\nexport default LeaderBoard;\r\n","C:\\Users\\CR\\Documents\\front-end\\src\\state\\application\\updater.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\state\\transactions\\updater.tsx",["1006"],"import {useEffect} from 'react';\r\nimport {useDispatch, useSelector} from 'react-redux';\r\nimport {useWallet} from 'use-wallet';\r\nimport {useAddPopup, useBlockNumber} from '../application/hooks';\r\nimport {AppDispatch, AppState} from '../index';\r\nimport {checkedTransaction, finalizeTransaction} from './actions';\r\nimport {getDefaultProvider} from '../../utils/provider';\r\nimport {publish} from '../txEvent';\r\n\r\nexport function shouldCheck(\r\n lastBlockNumber: number,\r\n tx: {addedTime: number; receipt?: {}; lastCheckedBlockNumber?: number},\r\n): boolean {\r\n if (tx.receipt) return false;\r\n if (!tx.lastCheckedBlockNumber) return true;\r\n const blocksSinceCheck = lastBlockNumber - tx.lastCheckedBlockNumber;\r\n if (blocksSinceCheck < 1) return false;\r\n const minutesPending = (new Date().getTime() - tx.addedTime) / 1000 / 60;\r\n if (minutesPending > 60) {\r\n // every 10 blocks if pending for longer than an hour\r\n return blocksSinceCheck > 9;\r\n } else if (minutesPending > 5) {\r\n // every 3 blocks if pending more than 5 minutes\r\n return blocksSinceCheck > 2;\r\n } else {\r\n // otherwise every block\r\n return true;\r\n }\r\n}\r\n\r\nexport default function Updater(): null {\r\n const {chainId, ethereum} = useWallet();\r\n\r\n const lastBlockNumber = useBlockNumber();\r\n\r\n const dispatch = useDispatch<AppDispatch>();\r\n const state = useSelector<AppState, AppState['transactions']>((state) => state.transactions);\r\n\r\n const transactions = chainId ? state[chainId] ?? {} : {};\r\n\r\n // show popup on confirm\r\n const addPopup = useAddPopup();\r\n\r\n useEffect(() => {\r\n if (!chainId || !ethereum || !lastBlockNumber) {\r\n return;\r\n }\r\n\r\n const provider = getDefaultProvider();\r\n Object.keys(transactions)\r\n .filter((hash) => shouldCheck(lastBlockNumber, transactions[hash]))\r\n .forEach((hash) => {\r\n provider\r\n .getTransactionReceipt(hash)\r\n .then((receipt) => {\r\n if (receipt) {\r\n dispatch(\r\n finalizeTransaction({\r\n chainId,\r\n hash,\r\n receipt: {\r\n blockHash: receipt.blockHash,\r\n blockNumber: receipt.blockNumber,\r\n contractAddress: receipt.contractAddress,\r\n from: receipt.from,\r\n status: receipt.status,\r\n to: receipt.to,\r\n transactionHash: receipt.transactionHash,\r\n transactionIndex: receipt.transactionIndex,\r\n },\r\n }),\r\n );\r\n\r\n addPopup(\r\n {\r\n txn: {\r\n hash,\r\n success: receipt.status === 1,\r\n summary: transactions[hash]?.summary,\r\n },\r\n },\r\n hash,\r\n );\r\n publish('successTx');\r\n } else {\r\n dispatch(checkedTransaction({chainId, hash, blockNumber: lastBlockNumber}));\r\n publish('successTx');\r\n }\r\n })\r\n .catch((error) => {\r\n console.error(`failed to check transaction hash: ${hash}`, error);\r\n });\r\n });\r\n }, [chainId, ethereum, transactions, lastBlockNumber, dispatch, addPopup]);\r\n\r\n return null;\r\n}\r\n","C:\\Users\\CR\\Documents\\front-end\\src\\views\\Home\\Home.js",[],"C:\\Users\\CR\\Documents\\front-end\\src\\views\\Rebates\\Cemetery.js",["1007","1008"],"import React, {useMemo, useState, useEffect} from 'react';\r\nimport {useWallet} from 'use-wallet';\r\nimport {Route, Switch, useRouteMatch} from 'react-router-dom';\r\nimport {makeStyles} from '@material-ui/core/styles';\r\nimport Web3 from 'web3';\r\n\r\nimport {Box, Card, CardContent, Button, Typography, Grid} from '@material-ui/core';\r\n\r\nimport UnlockWallet from '../../components/UnlockWallet';\r\nimport Page from '../../components/Page';\r\nimport CemeteryCard from './CemeteryCard';\r\n\r\nimport useBanks from '../../hooks/useBanks';\r\nimport useRebateTreasury from '../../hooks/useRebateTreasury';\r\nimport useTombStats from '../../hooks/useWineStats';\r\nimport serGrape from '../../assets/img/ser_grape.png';\r\nimport TokenSymbol from '../../components/TokenSymbol';\r\n\r\nconst web3 = new Web3();\r\nconst BN = (n) => new web3.utils.BN(n);\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n gridItem: {\r\n height: '100%',\r\n },\r\n}));\r\n\r\nconst Cemetery = () => {\r\n const classes = useStyles();\r\n const [banks] = useBanks();\r\n const {path} = useRouteMatch();\r\n const {account} = useWallet();\r\n const tombStats = useTombStats();\r\n const activeBanks = banks.filter((bank) => !bank.finished);\r\n\r\n const tombPriceInFTM = useMemo(() => (tombStats ? Number(tombStats.tokenInFtm).toFixed(4) : null), [tombStats]);\r\n\r\n const rebateStats = useRebateTreasury();\r\n\r\n const [claimablewine, setClaimablewine] = useState(0);\r\n const [vested, setVested] = useState(0);\r\n\r\n useEffect(() => {\r\n updateVesting();\r\n const interval = setInterval(updateVesting, 5000);\r\n return () => clearInterval(interval);\r\n }, []);\r\n\r\n async function updateVesting() {\r\n if (!window.ethereum) return;\r\n const address = (await window.ethereum.request({method: 'eth_accounts'}))[0];\r\n if (!address) return;\r\n\r\n const claimable = await rebateStats.RebateTreasury.methods.claimableWine(address).call();\r\n const vesting = await rebateStats.RebateTreasury.methods.vesting(address).call();\r\n setClaimablewine(+web3.utils.fromWei(claimable));\r\n setVested(+web3.utils.fromWei(BN(vesting.amount).sub(BN(vesting.claimed))));\r\n }\r\n\r\n async function claimTomb() {\r\n console.log('claiming the tomb');\r\n if (!window.ethereum) return;\r\n const address = (await window.ethereum.request({method: 'eth_accounts'}))[0];\r\n if (!address) return;\r\n window.ethereum.request({\r\n method: 'eth_sendTransaction',\r\n params: [\r\n {\r\n from: address,\r\n to: rebateStats.RebateTreasury._address,\r\n data: rebateStats.RebateTreasury.methods.claimRewards().encodeABI(),\r\n },\r\n ],\r\n });\r\n }\r\n\r\n return (\r\n <Switch>\r\n <Page>\r\n <Route exact path={path}>\r\n {!!account ? (\r\n <>\r\n <Typography color=\"textPrimary\" align=\"center\" variant=\"h3\" gutterBottom>\r\n 🔥Peg Health Campaign <img src={serGrape} alt=\"Ser Grape\" width={50} height={50} />\r\n </Typography>\r\n <Typography color=\"textPrimary\" align=\"center\" variant=\"h6\" gutterBottom style={{marginBottom: '40px'}}>\r\n Bond GRAPE, GRAPE-MIM LP or MIM and receive discounted WINE vested linearly over 3 days. <br />\r\n All GRAPE will be burnt, MIM will be used to buy and burn GRAPE.\r\n </Typography>\r\n\r\n <Box mt={2}>\r\n <Grid container justify=\"center\" spacing={3}>\r\n <Grid item xs={12} md={6} lg={6} className={classes.gridItem}>\r\n <Card className={classes.gridItem}>\r\n <CardContent align=\"center\">\r\n <TokenSymbol symbol={'WINE'} />\r\n <Typography variant=\"h6\">WINE Available to Buy</Typography>\r\n <Typography variant=\"h3\" style={{marginTop: '5px'}}>\r\n {rebateStats ? Number(rebateStats.tombAvailable).toFixed(3) : '--'}\r\n </Typography>\r\n </CardContent>\r\n </Card>\r\n </Grid>\r\n <Grid item xs={12} md={6} lg={6} className={classes.gridItem}>\r\n <Card className={classes.gridItem}>\r\n <CardContent align=\"center\">\r\n <Typography variant=\"h5\">Your WINE Vesting (over 3 days)</Typography>\r\n <Grid style={{marginTop: '20px'}} container justifyContent=\"space-between\">\r\n <Grid item>\r\n <Typography variant=\"h6\">Total Vested</Typography>\r\n </Grid>\r\n <Grid item>\r\n <Typography variant=\"h6\">{vested.toFixed(4)}</Typography>\r\n </Grid>\r\n </Grid>\r\n\r\n <Grid container justifyContent=\"space-between\">\r\n <Grid item>\r\n <Typography variant=\"h6\">Claimable</Typography>\r\n </Grid>\r\n <Grid item>\r\n <Typography variant=\"h6\">{claimablewine.toFixed(4)}</Typography>\r\n </Grid>\r\n </Grid>\r\n\r\n <Button\r\n color=\"primary\"\r\n className=\"shinyButton\"\r\n variant=\"contained\"\r\n onClick={claimTomb}\r\n style={{marginTop: '8px', width: '100%'}}\r\n >\r\n CLAIM\r\n </Button>\r\n </CardContent>\r\n </Card>\r\n </Grid>\r\n </Grid>\r\n </Box>\r\n <div\r\n style={{marginTop: '10px'}}\r\n hidden={activeBanks.filter((bank) => bank.sectionInUI === 4).length === 0}\r\n >\r\n <Grid container spacing={3}>\r\n {activeBanks\r\n .filter((bank) => bank.sectionInUI === 4)\r\n .map((bank) => (\r\n <React.Fragment key={bank.name}>\r\n <CemeteryCard bank={bank} />\r\n </React.Fragment>\r\n ))}\r\n </Grid>\r\n </div>\r\n </>\r\n ) : (\r\n <UnlockWallet />\r\n )}\r\n </Route>\r\n </Page>\r\n </Switch>\r\n );\r\n};\r\n\r\nexport default Cemetery;\r\n","C:\\Users\\CR\\Documents\\front-end\\src\\components\\Loader\\Loader.js",["1009"],"import React from 'react';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport grapeImg from '../../assets/img/grape.png';\r\nimport wineImg from '../../assets/img/gshare.png';\r\nimport {SyncLoader} from 'react-spinners';\r\n\r\nconst Loader = () => {\r\n return (\r\n <div\r\n style={{\r\n position: 'absolute',\r\n left: '50%',\r\n textAlign: 'center',\r\n top: '50%',\r\n transform: 'translate(-50%, -50%)',\r\n color: 'white',\r\n }}\r\n >\r\n <Typography variant=\"h3\">\r\n Collecting Grapes <SyncLoader color=\"white\" size={20} />\r\n </Typography>\r\n <img alt=\"grape logo\" src={grapeImg} width=\"50px\" />\r\n </div>\r\n );\r\n};\r\n\r\nexport default Loader;\r\n","C:\\Users\\CR\\Documents\\front-end\\src\\state\\transactions\\reducer.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\state\\application\\reducer.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\theme\\colors.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\services\\event.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\views\\Bond\\Bond.tsx",["1010","1011","1012","1013"],"import React, {useCallback, useMemo, useState} from 'react';\r\nimport Page from '../../components/Page';\r\nimport {createGlobalStyle} from 'styled-components';\r\nimport {Route, Switch, useRouteMatch} from 'react-router-dom';\r\nimport {useWallet} from 'use-wallet';\r\nimport UnlockWallet from '../../components/UnlockWallet';\r\nimport ExchangeCard from './components/ExchangeCard';\r\nimport styled from 'styled-components';\r\nimport Spacer from '../../components/Spacer';\r\nimport useBondStats from '../../hooks/useBondStats';\r\nimport useGrapeFinance from '../../hooks/useGrapeFinance';\r\nimport useCashPriceInLastTWAP from '../../hooks/useCashPriceInLastTWAP';\r\nimport {useTransactionAdder} from '../../state/transactions/hooks';\r\nimport ExchangeStat from './components/ExchangeStat';\r\nimport useTokenBalance from '../../hooks/useTokenBalance';\r\nimport useBondsPurchasable from '../../hooks/useBondsPurchasable';\r\nimport {getDisplayBalance} from '../../utils/formatBalance';\r\nimport {BOND_REDEEM_PRICE, BOND_REDEEM_PRICE_BN} from '../../grape-finance/constants';\r\nimport {Alert} from '@material-ui/lab';\r\nimport {roundAndFormatNumber} from '../../0x';\r\nimport BondEstimatorModal from './BondEstimatorModal';\r\nimport SwapVerticalCircleIcon from '@material-ui/icons/SwapVerticalCircle';\r\n\r\nimport HomeImage from '../../assets/img/background.jpg';\r\nimport {Grid, Typography, Box} from '@material-ui/core';\r\nimport {Box as MetarialBox} from '@mui/material';\r\n\r\nconst Bond: React.FC = () => {\r\n const {account} = useWallet();\r\n const grapeFinance = useGrapeFinance();\r\n const addTransaction = useTransactionAdder();\r\n const bondStat = useBondStats();\r\n const cashPrice = useCashPriceInLastTWAP();\r\n\r\n const bondsPurchasable = useBondsPurchasable();\r\n\r\n const bondBalance = useTokenBalance(grapeFinance?.GBOND);\r\n const memoizedBondBalance = useMemo(() => {\r\n return bondBalance != null && Number(bondBalance) > 0 ? bondBalance : null;\r\n }, [bondBalance]);\r\n\r\n const handleBuyBonds = useCallback(\r\n async (amount: string) => {\r\n const tx = await grapeFinance.buyBonds(amount);\r\n addTransaction(tx, {\r\n summary: `Buy ${Number(amount).toFixed(2)} GBOND with ${amount} GRAPE`,\r\n });\r\n },\r\n [grapeFinance, addTransaction],\r\n );\r\n\r\n const handleRedeemBonds = useCallback(\r\n async (amount: string) => {\r\n const tx = await grapeFinance.redeemBonds(amount);\r\n addTransaction(tx, {summary: `Redeem ${amount} GBOND`});\r\n },\r\n [grapeFinance, addTransaction],\r\n );\r\n\r\n const isBondRedeemable = useMemo(() => cashPrice.gt(BOND_REDEEM_PRICE_BN), [cashPrice]);\r\n const isBondPurchasable = useMemo(() => Number(bondStat?.tokenInFtm) < 1.01, [bondStat]);\r\n const grapeReserves = useMemo(() => (Number(bondStat?.treasuryGrapes) / 1e18).toFixed(0), [bondStat]);\r\n const bondSupply = useMemo(() => bondStat?.circulatingSupply, [bondStat]);\r\n const bondScale = (Number(cashPrice) / 1e18).toFixed(2);\r\n\r\n const [modalOpen, setModalOpen] = useState(false);\r\n\r\n const handleCloseModal = () => {\r\n setModalOpen(false);\r\n };\r\n\r\n const handleOpenModal = () => {\r\n setModalOpen(true);\r\n };\r\n\r\n return (\r\n <Switch>\r\n <Page>\r\n {!!account ? (\r\n <>\r\n {memoizedBondBalance && (\r\n <BondEstimatorModal\r\n open={modalOpen}\r\n walletBondAmount={Number(memoizedBondBalance) / Math.pow(10, 18)}\r\n handleClose={handleCloseModal}\r\n />\r\n )}\r\n <Typography color=\"textPrimary\" align=\"center\" variant=\"h3\" gutterBottom>\r\n Buy & Redeem Bonds\r\n </Typography>\r\n <Typography color=\"textPrimary\" align=\"center\" variant=\"h6\" gutterBottom style={{marginBottom: '40px'}}>\r\n Exchange Grapes for Bonds and burns Grape supply\r\n <br />\r\n Exchange Bonds for Grapes and earn premiums upon redemption\r\n </Typography>\r\n <Box mt={2}>\r\n <Grid item xs={12} sm={12} justify=\"center\" style={{margin: '18px', display: 'flex'}}>\r\n <Alert variant=\"filled\" severity=\"error\">\r\n <b>Bonds are emitted & premiums redeemable based on last epoch TWAP prices not the current TWAP!</b>\r\n </Alert>\r\n </Grid>\r\n </Box>\r\n <MetarialBox\r\n onClick={handleOpenModal}\r\n sx={{\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'flex-end',\r\n gap: '2px',\r\n cursor: 'pointer',\r\n }}\r\n >\r\n <Typography style={{fontSize: '15px', color: 'white'}}>\r\n <u>Estimate your GBonds redeem bonus</u>\r\n </Typography>\r\n <SwapVerticalCircleIcon style={{color: 'white'}} />\r\n </MetarialBox>\r\n <StyledBond>\r\n <StyledCardWrapper>\r\n <ExchangeCard\r\n action=\"Purchase\"\r\n fromToken={grapeFinance.GRAPE}\r\n fromTokenName=\"GRAPE\"\r\n toToken={grapeFinance.GBOND}\r\n toTokenName=\"GBOND\"\r\n priceDesc={\r\n !isBondPurchasable\r\n ? 'GRAPE is over peg'\r\n : getDisplayBalance(bondsPurchasable, 18, 4) + ' GBOND available for purchase'\r\n }\r\n onExchange={handleBuyBonds}\r\n />\r\n </StyledCardWrapper>\r\n <StyledStatsWrapper>\r\n <ExchangeStat\r\n tokenName=\"1 GRAPE\"\r\n description=\"Last-Hour TWAP Price\"\r\n //price={Number(grapeStat?.tokenInFtm).toFixed(4) || '-'}\r\n price={bondScale + ' GBOND' || '-'}\r\n />\r\n <Spacer size=\"md\" />\r\n <ExchangeStat\r\n tokenName=\"1 GBOND\"\r\n description=\"Bond Price\"\r\n price={Number(bondStat?.tokenInFtm).toFixed(2) + ' GRAPE' || '-'}\r\n />\r\n\r\n <Box mt={3}>\r\n <Grid item xs={12} sm={12} justify=\"center\" style={{display: 'flex'}}>\r\n <Alert variant=\"filled\" severity=\"error\">\r\n <b>Grape Reserves:</b>{' '}\r\n {bondStat?.treasuryGrapes ? roundAndFormatNumber(Number(grapeReserves), 0) : '-'}\r\n <br></br>\r\n <b>Bond supply:</b>{' '}\r\n {bondStat?.circulatingSupply ? roundAndFormatNumber(Number(bondSupply), 0) : '-'} <br></br>\r\n <b>When reserves are {'>'} bond supply debt phase has finished</b>\r\n </Alert>\r\n </Grid>\r\n </Box>\r\n </StyledStatsWrapper>\r\n <StyledCardWrapper>\r\n <ExchangeCard\r\n action=\"Redeem\"\r\n fromToken={grapeFinance.GBOND}\r\n fromTokenName=\"GBOND\"\r\n toToken={grapeFinance.GRAPE}\r\n toTokenName=\"GRAPE\"\r\n priceDesc={`${getDisplayBalance(bondBalance)} GBOND Available in wallet`}\r\n onExchange={handleRedeemBonds}\r\n disabledDescription={!isBondRedeemable ? `Enabled when 1 GRAPE > $${BOND_REDEEM_PRICE}` : null}\r\n />\r\n </StyledCardWrapper>\r\n </StyledBond>\r\n </>\r\n ) : (\r\n <UnlockWallet />\r\n )}\r\n </Page>\r\n </Switch>\r\n );\r\n};\r\n\r\nconst StyledBond = styled.div`\r\n display: flex;\r\n @media (max-width: 768px) {\r\n width: 100%;\r\n flex-flow: column nowrap;\r\n align-items: center;\r\n }\r\n`;\r\n\r\nconst StyledCardWrapper = styled.div`\r\n display: flex;\r\n flex: 1;\r\n flex-direction: column;\r\n @media (max-width: 768px) {\r\n width: 80%;\r\n }\r\n`;\r\n\r\nconst StyledStatsWrapper = styled.div`\r\n display: flex;\r\n flex: 0.8;\r\n margin: 0 20px;\r\n flex-direction: column;\r\n\r\n @media (max-width: 768px) {\r\n width: 80%;\r\n margin: 16px 0;\r\n }\r\n`;\r\n\r\nexport default Bond;\r\n","C:\\Users\\CR\\Documents\\front-end\\src\\views\\Roadmap\\Roadmap.tsx",[],"C:\\Users\\CR\\Documents\\front-end\\src\\views\\NFTRaffle\\NFTRaffle.tsx",["1014","1015"],"import React, {useCallback, useMemo} from 'react';\r\nimport Page from '../../components/Page';\r\nimport {createGlobalStyle} from 'styled-components';\r\nimport { Switch} from 'react-router-dom';\r\nimport {useWallet} from 'use-wallet';\r\nimport UnlockWallet from '../../components/UnlockWallet';\r\nimport ExchangeCard from './components/ExchangeCard';\r\nimport styled from 'styled-components';\r\nimport useRaffleStats from '../../hooks/useRaffleBalance';\r\nimport useGrapeFinance from '../../hooks/useGrapeFinance';\r\nimport {useTransactionAdder} from '../../state/transactions/hooks';\r\nimport HomeImage from '../../assets/img/background.jpg';\r\nimport Collage from '../../assets/img/collage.jpg';\r\nimport { Card, Grid } from '@material-ui/core';\r\nimport LaunchCountdown from '../../components/LaunchCountdown';\r\n\r\n\r\nconst NFTRaffle: React.FC = () => {\r\n\r\n // compatible format for most browser + metamask browser. Needs to be YYYY-MM-ddTHH:mm:ssZ\r\n const startDate = new Date('2022-04-30T3:00:00Z');\r\n const endDate = new Date('2022-05-03T4:00:00Z');\r\n const raffleAddress = '0x37219231a957e09F6e674B218043FdF1C5145F68';\r\n\r\n const {account} = useWallet();\r\n const grapeFinance = useGrapeFinance();\r\n const addTransaction = useTransactionAdder();\r\n const raffleStats = useRaffleStats(account, raffleAddress);\r\n\r\n\r\n const startTime = Number(startDate); \r\n const endTime = Number(endDate); \r\n \r\n const raffleBals = useMemo(\r\n () => (raffleStats ? Number(raffleStats.totalSupply).toFixed(0) : null),\r\n [raffleStats],\r\n );\r\n\r\n const userBals = useMemo(\r\n () => (raffleStats ? Number(raffleStats.priceInDollars).toFixed(0) : null),\r\n [raffleStats],\r\n );\r\n\r\n const handleBuyBonds = useCallback( \r\n async (amount: string) => { \r\n const tx = await grapeFinance.sendGrape(amount, raffleAddress);\r\n addTransaction(tx, {\r\n summary: `Send ${Number(amount).toFixed(2)} MIM to the raffle ${amount} `,\r\n });\r\n \r\n },\r\n [grapeFinance, addTransaction],\r\n );\r\n\r\n return ( \r\n<Switch>\r\n<Page>\r\n {!!account ? (\r\n <>\r\n \r\n <Grid item xs={12} md={12} lg={12} > \r\n <h2 style={{ fontSize: '80px', textAlign:'center' }}>Partner NFT Raffle</h2> \r\n <p style={{ fontSize: '20px', textAlign:'center', color: '#fff' }}>This isn't just your average raffle, this raffle gives you the chance to win NFTs from our awesome partners! Each with utility that goes into a reward pool for 3 winners to choose from! To enter simply click the enter raffle button below to send 5 MIM to the raffle address or manually send MIM to the raffle address shown below. </p> \r\n <p style={{fontSize: '20px', textAlign:'center', color: '#fff' }}>Raffle address: {raffleAddress}</p>\r\n <h2 style={{ fontSize: '40px', textAlign:'center' }}>Raffle Details</h2>\r\n <p style={{ fontSize: '20px', textAlign:'center', color: '#fff' }}>5 MIM Per Entry, Unlimited Entries Per Wallet!<br></br>\r\n 3 Winners will be selected!<br></br>\r\n 1st- Picks 3 NFTs from reward pool <br></br>\r\n 2nd- Picks 2 NFTs from reward pool <br></br>\r\n 3rd- Picks 1 NFT from reward pool </p> \r\n \r\n <Grid container justify=\"center\" spacing={3} style={{marginTop: '10px', marginBottom: '20px'}}><img alt='NFT Collage' style={{width: '450px'}} src={Collage}/></Grid>\r\n\r\n <p style={{ fontSize: '20px', textAlign:'center', color: '#fff' }}>Many thanks to our awesome partners for donating NFTs!<br></br>\r\n <a target={'_blank'} rel=\"noopener noreferrer\" href={'https://www.eltacofinance.com/'}>El Taco Finance</a><br></br>\r\n <a target={'_blank'} rel=\"noopener noreferrer\" href={'https://magik.finance/'}>Magik Finance</a><br></br>\r\n <a target={'_blank'} rel=\"noopener noreferrer\" href={'https://app.mvfinance.club/'}>Miniverse Finance</a><br></br>\r\n </p>\r\n \r\n </Grid>\r\n {Date.now() > endTime ? <h2 style={{ fontSize: '40px', textAlign:'center' }}>Raffle Closed</h2> : <h2 style={{ fontSize: '60px', textAlign:'center' }}>Raffle Open</h2>}\r\n {Date.now() < startTime ? <LaunchCountdown deadline={startDate} description={'Raffle Starts In'} descriptionLink={''}></LaunchCountdown> : <LaunchCountdown deadline={endDate} description={'Raffle Closes In'} descriptionLink={''}></LaunchCountdown>}\r\n \r\n <Grid container justify=\"center\" spacing={3} style={{marginTop: '10px'}}>\r\n <Grid item xs={12} sm={12} lg={6}> \r\n <Card>\r\n <h2 style={{textAlign:'center', marginTop: '10px' }}>Raffle Stats</h2> \r\n <p style={{textAlign:'center'}}>Total MIM entered: {raffleBals}</p> \r\n <p style={{textAlign:'center'}}>Your MIM entered: {userBals}</p>\r\n <p style={{textAlign:'center'}}>Your Raffle entries: {Number(userBals)/5}</p>\r\n <p style={{textAlign:'center'}}>Your account: {account}</p>\r\n </Card>\r\n </Grid>\r\n <Grid item xs={12} sm={12} lg={6}> \r\n <StyledBond>\r\n <StyledCardWrapper>\r\n <ExchangeCard\r\n action=\"Enter Raffle\"\r\n fromToken={grapeFinance.MIM}\r\n fromTokenName=\"MIM\"\r\n toToken={grapeFinance.GBOND}\r\n toTokenName=\"GBOND\"\r\n priceDesc={\r\n Date.now() < endTime && Date.now() > startTime\r\n ? 'Raffle is open! 5 MIM = 1 Entry'\r\n : 'Raffle is currently closed'\r\n }\r\n disabled={Date.now() < endTime && Date.now() > startTime ? false : true}\r\n onExchange={handleBuyBonds}\r\n />\r\n </StyledCardWrapper>\r\n </StyledBond>\r\n </Grid>\r\n </Grid>\r\n\r\n </>\r\n ) : (\r\n <UnlockWallet />\r\n )}\r\n</Page>\r\n</Switch>\r\n );\r\n};\r\n\r\nconst StyledBond = styled.div`\r\n display: flex;\r\n @media (max-width: 768px) {\r\n width: 100%;\r\n flex-flow: column nowrap;\r\n align-items: center;\r\n }\r\n`;\r\n\r\nconst StyledCardWrapper = styled.div`\r\n display: flex;\r\n flex: 1;\r\n flex-direction: column;\r\n @media (max-width: 768px) {\r\n width: 80%;\r\n }\r\n`;\r\n\r\n\r\nexport default NFTRaffle;\r\n","C:\\Users\\CR\\Documents\\front-end\\src\\views\\Stats\\Stats.tsx",[],"C:\\Users\\CR\\Documents\\front-end\\src\\views\\Dashboard\\Dashboard.tsx",[],"C:\\Users\\CR\\Documents\\front-end\\src\\views\\Strategies\\Strategies.tsx",[],"C:\\Users\\CR\\Documents\\front-end\\src\\views\\Help\\Help.tsx",["1016","1017"],"import React from 'react';\r\nimport Page from '../../components/Page';\r\nimport {createGlobalStyle} from 'styled-components';\r\nimport { Switch} from 'react-router-dom';\r\n\r\nimport HomeImage from '../../assets/img/background.jpg';\r\nimport { Grid , Container } from '@material-ui/core';\r\n\r\nconst Help: React.FC = () => {\r\n\r\n return (\r\n <Switch>\r\n <Page>\r\n <Container> \r\n <Grid item xs={12} md={12} lg={12} > \r\n <h1 style={{ fontSize: '80px', textAlign:'center' }}>Grape Guides</h1> \r\n\r\n <h1 style={{textAlign:'center', marginTop: '60px' }}>How to earn MAX YIELD and PROTECT THE PEG</h1><br></br>\r\n <iframe width=\"100%\" height=\"550px\" src=\"https://www.youtube.com/embed/L9oo4yj-HIM\" title=\"Grape Finance Videos\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" ></iframe>\r\n\r\n <h1 style={{textAlign:'center', marginTop: '60px' }}>Beginner tutorial on Grape staking & adding to LPs</h1><br></br>\r\n <iframe width=\"100%\" height=\"550px\" src=\"https://www.youtube.com/embed/JBWCOadvqbw\" title=\"Grape Finance Videos\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" ></iframe>\r\n\r\n <h1 style={{textAlign:'center', marginTop: '60px' }}>Zone 1 - Introductions & what to do when Grape is above $2</h1><br></br>\r\n <iframe width=\"100%\" height=\"550px\" src=\"https://www.youtube.com/embed/videoseries?list=PL_Nr1FoFNB03Ep-LDgn0_nHdFGuYcO030\" title=\"Grape Finance Videos\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" ></iframe>\r\n\r\n <h1 style={{textAlign:'center', marginTop: '60px'}}>Grape Finance Pool Priorities</h1><br></br>\r\n <iframe width=\"100%\" height=\"550px\" src=\"https://www.youtube.com/embed/videoseries?list=PL_Nr1FoFNB0004BPaACfcqYMZKcunv6Cq\" title=\"Grape Finance Videos\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" ></iframe>\r\n\r\n <h1 style={{textAlign:'center', marginTop: '60px' }}>The Basics of Seigniorage Protocols</h1><br></br>\r\n <iframe width=\"100%\" height=\"550px\" src=\"https://www.youtube.com/embed/videoseries?list=PL_Nr1FoFNB02T0LSnRbFMFJoLTU4yszqJ\" title=\"Grape Finance Videos\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" ></iframe>\r\n\r\n <h1 style={{textAlign:'center', marginTop: '60px'}}>How to stake LP tokens & Wine at Grape Finance</h1><br></br>\r\n <iframe width=\"100%\" height=\"550px\" src=\"https://www.youtube.com/embed/xHVqLK_Segw?rel=0\" title=\"Grape Finance Videos\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" ></iframe>\r\n \r\n </Grid>\r\n </Container>\r\n </Page>\r\n </Switch>\r\n );\r\n};\r\n\r\n\r\nexport default Help;\r\n","C:\\Users\\CR\\Documents\\front-end\\src\\views\\Raffle\\Raffle.tsx",[],"C:\\Users\\CR\\Documents\\front-end\\src\\contexts\\Banks\\context.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\state\\application\\hooks.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\components\\NetworkVerifier\\NetworkVerifier.tsx",[],"C:\\Users\\CR\\Documents\\front-end\\src\\contexts\\Banks\\Banks.tsx",[],"C:\\Users\\CR\\Documents\\front-end\\src\\views\\Extinction\\Extinction.tsx",["1018","1019"],"import React from 'react';\r\nimport {useWallet} from 'use-wallet';\r\nimport {Route, Switch, useRouteMatch} from 'react-router-dom';\r\nimport {Box, Container, Typography, Grid, Card, CardContent, CircularProgress} from '@material-ui/core';\r\nimport UnlockWallet from '../../components/UnlockWallet';\r\nimport Page from '../../components/Page';\r\n\r\nimport PegPoolInfo from './components/PegPoolInfo';\r\nimport usePegPool from '../../hooks/usePegPool';\r\nimport usePegPoolRewards from '../../hooks/usePegPoolRewards';\r\nimport TokenSymbol from '../../components/TokenSymbol';\r\nimport CountUp from 'react-countup';\r\nimport Alert from '@mui/material/Alert';\r\n\r\nconst Extinction: React.FC = () => {\r\n const {account} = useWallet();\r\n const {path} = useRouteMatch();\r\n const {pegPool} = usePegPool();\r\n const {rewardTokens, totalRewardValue, apr} = usePegPoolRewards(pegPool);\r\n\r\n return (\r\n <Switch>\r\n <Page>\r\n <Route exact path={path}>\r\n <Grid container spacing={3}>\r\n <Grid item xs={12} sm={12} md={6}>\r\n <Card style={{textAlign: 'center'}}>\r\n <CardContent>\r\n <Typography color=\"textSecondary\" variant=\"h3\" gutterBottom>\r\n 🔥Peg Campaign🔥\r\n </Typography>\r\n <Grid container direction=\"column\">\r\n <Grid item>\r\n <Typography variant=\"h6\" gutterBottom>\r\n Deposit MIM, Get WINE and MIM rewards\r\n </Typography>\r\n </Grid>\r\n <Grid item>\r\n <Grid container justifyContent=\"center\" spacing={2}>\r\n <Grid item>\r\n <TokenSymbol symbol={'WINE'} />\r\n </Grid>\r\n <Grid item>\r\n <TokenSymbol symbol={'MIM'} />\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n </CardContent>\r\n </Card>\r\n </Grid>\r\n <Grid item xs={12} sm={12} md={6}>\r\n <Card style={{textAlign: 'center', minHeight: '212px'}}>\r\n <CardContent>\r\n <Typography variant=\"h3\">TOTAL VALUE LOCKED</Typography>\r\n {pegPool != null ? (\r\n <CountUp className=\"tvl\" end={Number(pegPool.totalDesposits)} separator=\",\" prefix=\"$\" />\r\n ) : (\r\n <CircularProgress style={{marginTop: '20px'}} size={38} color=\"inherit\" />\r\n )}\r\n </CardContent>\r\n </Card>\r\n </Grid>\r\n </Grid>\r\n\r\n {!!account ? (\r\n pegPool &&\r\n rewardTokens && (\r\n <>\r\n <Alert style={{marginTop: '20px'}} variant=\"outlined\" severity=\"info\">\r\n There is a scaling withdrawal fee based on TWAP. The further away from 1.05 TWAP, the larger the\r\n withdrawal fee.\r\n </Alert>\r\n <PegPoolInfo\r\n pegPool={pegPool}\r\n rewardTokens={rewardTokens}\r\n totalRewardValue={totalRewardValue}\r\n apr={apr}\r\n />\r\n </>\r\n )\r\n ) : (\r\n <UnlockWallet />\r\n )}\r\n </Route>\r\n </Page>\r\n </Switch>\r\n );\r\n};\r\n\r\nexport default Extinction;\r\n","C:\\Users\\CR\\Documents\\front-end\\src\\contexts\\RefreshContext\\RefreshContextProvider.tsx",[],"C:\\Users\\CR\\Documents\\front-end\\src\\contexts\\Modals\\Modals.tsx",[],"C:\\Users\\CR\\Documents\\front-end\\src\\contexts\\GrapeFinanceProvider\\GrapeFinanceProvider.tsx",[],"C:\\Users\\CR\\Documents\\front-end\\src\\state\\txEvent.js",[],"C:\\Users\\CR\\Documents\\front-end\\src\\utils\\convertTime.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\utils\\provider.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\components\\Popups\\PopupItem.tsx",[],"C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useRebateTreasury.js",[],"C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useWineStats.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\state\\transactions\\actions.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\state\\application\\actions.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useLpStats.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useGrapeFinance.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useRaffleBalance.ts",["1020"],"import {useEffect, useState} from 'react';\r\nimport useGrapeFinance from './useGrapeFinance';\r\nimport {TokenStat} from '../grape-finance/types';\r\nimport useRefresh from './useRefresh';\r\n\r\nconst useRaffleStats = (account: string, raffleAddress: string) => {\r\n const [stat, setStat] = useState<TokenStat>();\r\n const {fastRefresh} = useRefresh();\r\n const grapeFinance = useGrapeFinance();\r\n \r\n useEffect(() => {\r\n async function fetchGrapePrice() {\r\n \r\n try {\r\n setStat(await grapeFinance.getRaffleStat(account, raffleAddress));\r\n } catch (err) {\r\n console.error(err);\r\n }\r\n }\r\n fetchGrapePrice();\r\n }, [setStat, grapeFinance, fastRefresh]);\r\n\r\n return stat;\r\n};\r\n\r\nexport default useRaffleStats;\r\n","C:\\Users\\CR\\Documents\\front-end\\src\\state\\transactions\\hooks.tsx",[],"C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\usePegPoolRewards.ts",["1021","1022","1023","1024"],"import { ethers } from 'ethers';\r\nimport { formatEther } from 'ethers/lib/utils';\r\nimport { useEffect, useState } from 'react';\r\nimport { PegPool, PegPoolToken } from '../grape-finance/types';\r\nimport { getDexPriceFromPair } from '../utils/dexscreener';\r\nimport { getDisplayBalance } from '../utils/formatBalance';\r\nimport useBombFinance from './useGrapeFinance';\r\n\r\nconst usePegPoolRewards = (pegPool: PegPool) => {\r\n const bombFinance = useBombFinance();\r\n const isUnlocked = bombFinance?.isUnlocked;\r\n const [rewardTokens, setRewardTokens] = useState<PegPoolToken[]>([]);\r\n const [totalRewardValue, setTotalRewardValue] = useState<string>(null);\r\n const [compoundValue, setCompoundValue] = useState(null);\r\n\r\n const [apr, setApr] = useState<{\r\n daily: string;\r\n yearly: string;\r\n }>({\r\n daily: '0',\r\n yearly: '0',\r\n });\r\n\r\n const BSC_BLOCK_A_DAY = 28800;\r\n\r\n useEffect(() => {\r\n const getAPR = (tokens: PegPoolToken[]) => {\r\n let totalDollarValuePerDay = 0;\r\n let totalDollarValuePerYear = 0;\r\n\r\n tokens.forEach((tk) => {\r\n const rpb = tk.rewardPerBlock;\r\n const dollarValuePerBlock = rpb * tk.currentPriceNum;\r\n const amountPerDay = dollarValuePerBlock * BSC_BLOCK_A_DAY;\r\n totalDollarValuePerDay += amountPerDay;\r\n const amountPerYear = amountPerDay * 365;\r\n totalDollarValuePerYear += amountPerYear;\r\n });\r\n\r\n const daily = (totalDollarValuePerDay / Number(pegPool.totalDesposits)) * 100;\r\n const yearly = (totalDollarValuePerYear / Number(pegPool.totalDesposits)) * 100;\r\n\r\n setApr({\r\n daily: ethers.utils.commify(Number.isFinite(daily) ? daily.toFixed(2) : '0'),\r\n yearly: ethers.utils.commify(Number.isFinite(yearly) ? yearly.toFixed(2) : '0'),\r\n });\r\n };\r\n\r\n const getTokens = async () => {\r\n const [tokens] = await Promise.all([bombFinance.getPegPoolPendingRewards()]);\r\n\r\n let totalValue = 0;\r\n for (const token of tokens) {\r\n const priceInfo = await getDexPriceFromPair('avalanche', token.pairAddress);\r\n console.log(priceInfo)\r\n token.currentPrice = priceInfo.priceUI;\r\n token.currentPriceNum = priceInfo.priceNum;\r\n const pendingValue = priceInfo.priceNum * Number(token.amount);\r\n token.pendingValue = pendingValue.toFixed(2);\r\n totalValue += pendingValue;\r\n }\r\n\r\n getAPR(tokens);\r\n setTotalRewardValue(totalValue.toFixed(2));\r\n setRewardTokens(tokens);\r\n };\r\n\r\n const loadData = async () => {\r\n await Promise.all([getTokens()]);\r\n };\r\n\r\n if (isUnlocked && pegPool) {\r\n loadData();\r\n const timer = setInterval(() => {\r\n loadData();\r\n }, 1000 * 15000);\r\n\r\n return () => clearInterval(timer);\r\n }\r\n }, [isUnlocked, pegPool]);\r\n\r\n return { rewardTokens, totalRewardValue, apr, compoundValue };\r\n};\r\n\r\nexport default usePegPoolRewards;\r\n","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\usePegPool.ts",["1025"],"import { useCallback, useEffect, useState } from 'react';\r\nimport { PegPool } from '../grape-finance/types';\r\nimport useBombFinance from './useGrapeFinance';\r\nimport useRefresh from './useRefresh';\r\n\r\nconst usePegPool = () => {\r\n const bombFinance = useBombFinance();\r\n const isUnlocked = bombFinance?.isUnlocked;\r\n const [pegPool, setPegPool] = useState<PegPool>(null);\r\n const { slowRefresh } = useRefresh();\r\n\r\n const fetchPool = useCallback(async () => {\r\n setPegPool(await bombFinance.getPegPool());\r\n }, [bombFinance]);\r\n\r\n const refreshPool = async () => {\r\n setPegPool(await bombFinance.getPegPool());\r\n };\r\n\r\n useEffect(() => {\r\n if (isUnlocked) {\r\n refreshPool().catch((err) => console.error(`Failed to fetch peg pool: ${err.stack}`));\r\n }\r\n }, [bombFinance, fetchPool, isUnlocked, slowRefresh]);\r\n\r\n return { pegPool, refreshPool };\r\n};\r\n\r\nexport default usePegPool;\r\n","C:\\Users\\CR\\Documents\\front-end\\src\\components\\Page\\index.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\views\\Raffle\\components\\ExchangeCard.tsx",[],"C:\\Users\\CR\\Documents\\front-end\\src\\grape-finance\\ether-utils.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useCashPriceInLastTWAP.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\utils\\constants.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\views\\Extinction\\components\\PegPoolInfo.tsx",["1026","1027","1028"],"import React, {useMemo} from 'react';\r\nimport {Box, Button, Grid, Card, CardContent, Typography} from '@material-ui/core';\r\nimport useModal from '../../../hooks/useModal';\r\nimport DepositModal from '../../Bank/components/DepositModal';\r\nimport useTokenBalance from '../../../hooks/useTokenBalance';\r\nimport usePegPoolDeposit from '../../../hooks/usePegPoolDeposit';\r\nimport {PegPool, PegPoolToken} from '../../../grape-finance/types';\r\n//import { ApprovalState } from '../../../hooks/useApprove';\r\nimport PegPoolRewards from './PegPoolRewards';\r\nimport usePegPoolApprove from '../../../hooks/usePegPoolApproval';\r\nimport TokenSymbol from '../../../components/TokenSymbol';\r\nimport usePegPoolWithdrawFee from '../../../hooks/usePegPoolWithdrawFee';\r\nimport {Skeleton} from '@material-ui/lab';\r\nimport usePegPoolWithdraw from '../../../hooks/usePegPoolWithdraw';\r\nimport WithdrawModal from '../../Bank/components/WithdrawModal';\r\nimport useApprove, {ApprovalState} from '../../../hooks/useApprove';\r\nimport useCashPriceInEstimatedTWAP from '../../../hooks/useCashPriceInEstimatedTWAP';\r\n\r\nconst PegPoolInfo: React.FC<{\r\n pegPool: PegPool;\r\n rewardTokens: PegPoolToken[];\r\n totalRewardValue: string;\r\n apr: {daily: string; yearly: string};\r\n}> = ({pegPool, rewardTokens, totalRewardValue, apr}) => {\r\n const tokenBalance = useTokenBalance(pegPool.depositToken);\r\n const {onDeposit} = usePegPoolDeposit(pegPool);\r\n const {onWithdraw} = usePegPoolWithdraw(pegPool);\r\n const {approveStatus, approve} = useApprove(pegPool.depositToken, '0x6Cc4D2653aaaCD005E076300796d4981339C5fAF');\r\n const {withdrawFeePercent} = usePegPoolWithdrawFee();\r\n const cashStat = useCashPriceInEstimatedTWAP();\r\n const twap = useMemo(() => (cashStat ? Number(cashStat.priceInDollars).toFixed(4) : null), [cashStat]);\r\n \r\n const [onPresentDeposit, onDismissDeposit] = useModal(\r\n <DepositModal\r\n max={tokenBalance}\r\n decimals={pegPool.depositToken.decimal}\r\n onConfirm={(amount) => {\r\n if (Number(amount) <= 0 || isNaN(Number(amount))) return;\r\n onDeposit(amount);\r\n onDismissDeposit();\r\n }}\r\n tokenName={pegPool.depositTokenName}\r\n />,\r\n );\r\n\r\n const [onPresentWithdraw, onDismissWithdraw] = useModal(\r\n <WithdrawModal\r\n max={pegPool.userInfo.amountDepositedBN}\r\n decimals={pegPool.depositToken.decimal}\r\n onConfirm={(amount) => {\r\n if (Number(amount) <= 0 || isNaN(Number(amount))) return;\r\n onWithdraw(amount);\r\n onDismissWithdraw();\r\n }}\r\n tokenName={pegPool.depositTokenName}\r\n />,\r\n );\r\n\r\n return (\r\n <Grid container spacing={3} style={{marginTop: '10px'}}>\r\n <Grid item xs={12} sm={12} md={6}>\r\n <Card variant=\"outlined\">\r\n <CardContent>\r\n <div style={{textAlign: 'center'}}>\r\n <TokenSymbol symbol={'MIM'} width={50} height={50} />\r\n </div>\r\n <Grid container style={{marginTop: '20px'}} alignItems=\"baseline\" justifyContent=\"space-between\">\r\n <Grid item>\r\n <Typography variant=\"h6\">Your Deposits</Typography>\r\n </Grid>\r\n <Grid item>\r\n <Typography align=\"right\"></Typography>\r\n <Typography variant=\"h6\">{pegPool.userInfo?.amountDeposited} MIM</Typography>\r\n </Grid>\r\n </Grid>\r\n <Grid container alignItems=\"baseline\" justifyContent=\"space-between\">\r\n <Grid item>\r\n <Typography variant=\"h6\">CURRENT TWAP / TARGET</Typography>\r\n </Grid>\r\n <Grid item>\r\n <Typography align=\"right\"></Typography>\r\n <Typography variant=\"h6\">{twap ? twap : '--'} / 1.05</Typography>\r\n </Grid>\r\n </Grid>\r\n <Grid container justifyContent=\"center\" alignItems=\"center\" style={{marginTop: '20px'}}>\r\n {approveStatus !== ApprovalState.APPROVED ? (\r\n <Button className=\"shinyButton\" disabled={!pegPool.depositsEnabled} onClick={approve} fullWidth={true}>\r\n Approve\r\n </Button>\r\n ) : (\r\n <Button\r\n className=\"shinyButtonSecondary\"\r\n disabled={!pegPool.depositsEnabled}\r\n onClick={onPresentDeposit}\r\n fullWidth={true}\r\n >\r\n {pegPool.depositsEnabled ? 'Deposit' : 'Above Peg'}\r\n </Button>\r\n )}\r\n </Grid>\r\n\r\n <Grid container justifyContent=\"center\" style={{marginTop: '20px'}}>\r\n <Typography>\r\n Current TWAP withdrawal fee ={' '}\r\n {withdrawFeePercent || withdrawFeePercent == 0 ? withdrawFeePercent : <Skeleton />}%\r\n </Typography>\r\n\r\n <Button\r\n className={pegPool.userInfo?.isDeposited ? 'shinyButtonSecondary' : 'shinyButtonDisabled'}\r\n fullWidth={true}\r\n disabled={!pegPool.userInfo?.isDeposited}\r\n onClick={onPresentWithdraw}\r\n >\r\n Withdraw\r\n </Button>\r\n <Typography>You will receive GRAPE-MIM LP tokens when you withdraw</Typography>\r\n </Grid>\r\n </CardContent>\r\n </Card>\r\n </Grid>\r\n\r\n <Grid item xs={12} sm={12} md={6}>\r\n {rewardTokens && <PegPoolRewards rewardTokens={rewardTokens} totalRewardValue={totalRewardValue} apr={apr} />}\r\n </Grid>\r\n </Grid>\r\n );\r\n};\r\n\r\nexport default PegPoolInfo;\r\n","C:\\Users\\CR\\Documents\\front-end\\src\\components\\Popups\\ErrorPopup.tsx",["1029","1030"],"import React, {useCallback} from 'react';\r\nimport {AlertCircle} from 'react-feather';\r\nimport styled from 'styled-components';\r\n\r\nconst RowNoFlex = styled.div`\r\n flex-wrap: nowrap;\r\n`;\r\n\r\nexport default function ErrorPopup({message, stack}: {message: string; stack: string}) {\r\n const copyErrorDetails = useCallback(async () => {\r\n await navigator.clipboard.writeText(`${message}\\n${stack}`);\r\n }, [message, stack]);\r\n\r\n return (\r\n <RowNoFlex>\r\n <div>\r\n <AlertCircle color=\"#FF6871\" size={24} /> <StyledPopupDesc>{message}</StyledPopupDesc>\r\n </div>\r\n </RowNoFlex>\r\n );\r\n}\r\n\r\nconst StyledPopupDesc = styled.span`\r\n font-weight: 500;\r\n color: ${(props) => props.theme.color.grey[300]};\r\n`;\r\n\r\nconst StyledLink = styled.a`\r\n color: ${(props) => props.theme.color.grey[500]};\r\n`;\r\n","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useGrapeMimSWTotalNode.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\components\\Popups\\TransactionPopup.tsx",[],"C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useWineTotalNodes.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useGrapeTotalNodes.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useNodesRewardBalance.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useWalletNodesAndNFTs.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useSVintagePrice.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\views\\Dashboard\\DashboardNFTBox.tsx",[],"C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useVintagePrice.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\views\\Dashboard\\DashboardTokenBox.tsx",[],"C:\\Users\\CR\\Documents\\front-end\\src\\views\\Dashboard\\Nodes.tsx",[],"C:\\Users\\CR\\Documents\\front-end\\src\\views\\Dashboard\\Presses.tsx",[],"C:\\Users\\CR\\Documents\\front-end\\src\\views\\Dashboard\\BoardroomCard.tsx",["1031"],"import moment from 'moment';\r\nimport React, {useEffect, useMemo, useState} from 'react';\r\nimport {Box, Grid, Accordion, AccordionDetails, AccordionSummary, useMediaQuery} from '@material-ui/core';\r\nimport useApprove, {ApprovalState} from '../../hooks/useApprove';\r\nimport ProgressCountdown from '../Winery/components/ProgressCountdown';\r\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore';\r\nimport useRedeemOnBoardroom from '../../hooks/useRedeemOnBoardroom';\r\nimport useStakedBalanceOnBoardroom from '../../hooks/useStakedBalanceOnBoardroom';\r\nimport useCurrentEpoch from '../../hooks/useCurrentEpoch';\r\nimport useGetBoardroomPrintRate from '../../hooks/useGetBoardroomPrintRate';\r\nimport useCashPriceInEstimatedTWAP from '../../hooks/useCashPriceInEstimatedTWAP';\r\nimport useTotalStakedOnBoardroom from '../../hooks/useTotalStakedOnBoardroom';\r\nimport useFetchBoardroomAPR from '../../hooks/useFetchBoardroomAPR';\r\nimport useClaimRewardCheck from '../../hooks/boardroom/useClaimRewardCheck';\r\nimport useWithdrawCheck from '../../hooks/boardroom/useWithdrawCheck';\r\nimport usebShareStats from '../../hooks/useWineStats';\r\nimport useTreasuryAllocationTimes from '../../hooks/useTreasuryAllocationTimes';\r\nimport useBondStats from '../../hooks/useBondStats';\r\nimport useStakedTokenPriceInDollars from '../../hooks/useStakedTokenPriceInDollars';\r\nimport useGrapeFinance from '../../hooks/useGrapeFinance';\r\nimport {getDisplayBalance} from '../../utils/formatBalance';\r\nimport useTokenBalance from '../../hooks/useTokenBalance';\r\nimport useUnstakeTimerBoardroom from '../../hooks/boardroom/useUnstakeTimerBoardroom';\r\nimport TokenSymbol from '../../components/TokenSymbol';\r\nimport useStakeToBoardroom from '../../hooks/useStakeToBoardroom';\r\nimport useWithdrawFromBoardroom from '../../hooks/useWithdrawFromBoardroom';\r\nimport useHarvestFromBoardroom from '../../hooks/useHarvestFromBoardroom';\r\nimport useEarningsOnBoardroom from '../../hooks/useEarningsOnBoardroom';\r\nimport useGrapeStats from '../../hooks/useGrapeStats';\r\nimport useClaimRewardTimerBoardroom from '../../hooks/boardroom/useClaimRewardTimerBoardroom';\r\nimport {subscribe, unsubscribe} from '../../state/txEvent';\r\nimport {SyncLoader} from 'react-spinners';\r\n\r\nconst BoardroomCard = () => {\r\n useEffect(() => {\r\n subscribe('failedTx', () => {\r\n setClaimLoading(false);\r\n setWithdrawLoading(false);\r\n setRedeemLoading(false);\r\n setDepositingLoading(false);\r\n setApproveLoading(false);\r\n });\r\n\r\n subscribe('successTx', () => {\r\n setWithdrawLoading(false);\r\n setClaimLoading(false);\r\n setRedeemLoading(false);\r\n setDepositingLoading(false);\r\n setApproveLoading(false);\r\n });\r\n\r\n return () => {\r\n unsubscribe('failedTx');\r\n unsubscribe('successTx');\r\n };\r\n }, []);\r\n\r\n const widthUnder600 = useMediaQuery('(max-width:600px)');\r\n const widthUnder960 = useMediaQuery('(max-width:960px)');\r\n const [inputValue, setInputValue] = useState<string>('');\r\n\r\n const [loading, setLoading] = useState(true);\r\n const [claimLoading, setClaimLoading] = useState(false);\r\n const [depositingLoading, setDepositingLoading] = useState(false);\r\n const [approveLoading, setApproveLoading] = useState(false);\r\n const [redeemLoading, setRedeemLoading] = useState(false);\r\n const [withdrawLoading, setWithdrawLoading] = useState(false);\r\n\r\n const [activeDetailsBoxTab, setActiveDetailsBoxTab] = useState('Deposit');\r\n const [expanded, setExpanded] = useState(false);\r\n const expand = () => {\r\n setExpanded(!expanded);\r\n };\r\n\r\n const grapeFinance = useGrapeFinance();\r\n const stakedBalance = useStakedBalanceOnBoardroom();\r\n const totalStaked = useTotalStakedOnBoardroom();\r\n const currentEpoch = useCurrentEpoch();\r\n const printRate = useGetBoardroomPrintRate();\r\n const cashStat = useCashPriceInEstimatedTWAP();\r\n const boardroomAPR = useFetchBoardroomAPR();\r\n const canWithdraw = useWithdrawCheck();\r\n const bShareStats = usebShareStats();\r\n const nextEpoch = useTreasuryAllocationTimes();\r\n const stakedTokenPriceInDollars = useStakedTokenPriceInDollars('WINE', grapeFinance.WINE);\r\n const wineBalance = useTokenBalance(grapeFinance.WINE);\r\n const earnings = useEarningsOnBoardroom();\r\n const grapeStats = useGrapeStats();\r\n const canClaim = useClaimRewardCheck();\r\n const claimRewardTimer = useClaimRewardTimerBoardroom();\r\n const withdrawTimer = useUnstakeTimerBoardroom();\r\n\r\n const parsedStakedBalance = useMemo(() => (stakedBalance ? Number(stakedBalance) / 1e18 : null), [stakedBalance]);\r\n const parsedTotalStaked = useMemo(() => (totalStaked ? Number(totalStaked) / 1e18 : null), [totalStaked]);\r\n const scalingFactor = useMemo(() => (cashStat ? Number(cashStat.priceInDollars).toFixed(3) : null), [cashStat]);\r\n const bShareCirculatingSupply = useMemo(() => (bShareStats ? bShareStats.circulatingSupply : null), [bShareStats]);\r\n const parsedWineBalance = useMemo(() => (wineBalance ? Number(wineBalance) / 1e18 : null), [wineBalance]);\r\n const tokenPriceInDollars = useMemo(\r\n () =>\r\n stakedTokenPriceInDollars\r\n ? (Number(stakedTokenPriceInDollars) * parsedStakedBalance).toFixed(2).toString()\r\n : null,\r\n [stakedTokenPriceInDollars, parsedStakedBalance],\r\n );\r\n const parsedEarnings = useMemo(() => (earnings ? Number(earnings) / 1e18 : null), [earnings]);\r\n const grapePriceInDollars = useMemo(\r\n () => (grapeStats ? Number(grapeStats.priceInDollars).toFixed(2) : null),\r\n [grapeStats],\r\n );\r\n\r\n const rewards = (boardroomAPR / 365 / 100) * Number(tokenPriceInDollars);\r\n const percentageStaked =\r\n parsedTotalStaked && bShareCirculatingSupply\r\n ? ((parsedTotalStaked * 100) / Number(bShareCirculatingSupply)).toFixed(2)\r\n : null;\r\n const tvl = parsedTotalStaked * Number(stakedTokenPriceInDollars);\r\n const earnedInDollars =\r\n parsedEarnings && grapePriceInDollars ? (Number(grapePriceInDollars) * parsedEarnings).toFixed(2) : null;\r\n\r\n const {approveStatus, approve} = useApprove(grapeFinance.WINE, grapeFinance.contracts.Boardroom.address);\r\n const {onRedeem} = useRedeemOnBoardroom();\r\n const {onStake} = useStakeToBoardroom();\r\n const {onWithdraw} = useWithdrawFromBoardroom();\r\n const {onReward} = useHarvestFromBoardroom();\r\n\r\n const maxClicked = () => {\r\n if (activeDetailsBoxTab === 'Deposit') {\r\n setInputValue(parsedWineBalance.toString());\r\n } else if (activeDetailsBoxTab === 'Withdraw') {\r\n setInputValue(parsedStakedBalance.toString());\r\n }\r\n };\r\n\r\n const stake = () => {\r\n if (Number(inputValue) > 0) {\r\n setDepositingLoading(true);\r\n onStake(inputValue.toString());\r\n }\r\n };\r\n\r\n const withdraw = () => {\r\n if (Number(inputValue) > 0) {\r\n setWithdrawLoading(true);\r\n onWithdraw(inputValue.toString());\r\n }\r\n };\r\n\r\n const updateInput = (event: any) => {\r\n setInputValue(event.target.value);\r\n };\r\n\r\n useEffect(() => {\r\n if (stakedBalance != null && parsedEarnings != null && tvl) {\r\n setLoading(false);\r\n }\r\n }, [stakedBalance, parsedEarnings, tvl]);\r\n\r\n return (\r\n <Accordion expanded={expanded} onChange={expand} className=\"accordion\">\r\n <AccordionSummary\r\n expandIcon={loading ? <SyncLoader color=\"white\" size={4} /> : <ExpandMoreIcon style={{color: 'white'}} />}\r\n aria-controls=\"panel1bh-content\"\r\n id=\"panel1bh-header\"\r\n >\r\n <Grid container justifyContent=\"space-between\" className=\"lineItemInner\" spacing={1}>\r\n <Grid item className=\"lineName\" xs={12} sm={12} md={4}>\r\n <Grid container justifyContent=\"flex-start\" alignItems=\"center\" spacing={2}>\r\n <Grid item>\r\n <TokenSymbol symbol={'WINE'} height={30} width={30} />\r\n </Grid>\r\n <Grid item>\r\n <div>Winery (earn GRAPE)</div>\r\n\r\n {Number(scalingFactor) >= 1.01 ? (\r\n <div className=\"lineLabel printing\">Status: Printing</div>\r\n ) : (\r\n <div className=\"lineLabel not-printing\">Status: Not Printing</div>\r\n )}\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n <Grid item xs={12} sm={6} md={2}>\r\n <Grid container direction={widthUnder600 ? 'row' : 'column'} justifyContent=\"space-between\">\r\n <Grid item>\r\n <div className=\"lineLabel\">Deposited</div>\r\n </Grid>\r\n <Grid item>\r\n <div className=\"lineValueDeposited\">\r\n <span style={{color: '#fcfcfc'}}>\r\n {stakedBalance ? getDisplayBalance(stakedBalance, 18, 2) : '0'}\r\n </span>\r\n <span style={{marginLeft: '5px', fontSize: '14px'}}>(${tokenPriceInDollars})</span>\r\n </div>{' '}\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n <Grid item xs={12} sm={6} md={2}>\r\n <Grid container direction={widthUnder600 ? 'row' : 'column'} justifyContent=\"space-between\">\r\n <Grid item>\r\n <div className=\"lineLabel\">Rewards</div>\r\n </Grid>\r\n <Grid item>\r\n <div className=\"lineValueDeposited\">\r\n <span style={{color: '#fcfcfc'}}>{parsedEarnings ? parsedEarnings : '0'}</span>\r\n <span style={{marginLeft: '5px', fontSize: '14px'}}>\r\n (${earnedInDollars ? earnedInDollars : '0'})\r\n </span>\r\n </div>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n <Grid\r\n item\r\n xs={12}\r\n sm={6}\r\n md={2}\r\n style={{marginTop: widthUnder960 ? '15px' : '0', textAlign: widthUnder960 ? 'center' : 'left'}}\r\n >\r\n <Grid container direction={widthUnder600 ? 'row' : 'column'} justifyContent=\"space-between\">\r\n <Grid item>\r\n <div className=\"lineLabel\">APR Yearly | Daily</div>\r\n </Grid>\r\n <Grid item>\r\n <div className=\"lineValue\">\r\n {boardroomAPR.toFixed(0)}% | {(boardroomAPR / 365).toFixed(2)}%\r\n </div>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n <Grid\r\n item\r\n xs={12}\r\n sm={6}\r\n md={2}\r\n style={{marginTop: widthUnder960 ? '15px' : '0', textAlign: widthUnder960 ? 'center' : 'left'}}\r\n >\r\n <Grid container direction={widthUnder600 ? 'row' : 'column'} justifyContent=\"space-between\">\r\n <Grid item>\r\n <div className=\"lineLabel\">TVL</div>\r\n </Grid>\r\n <Grid item>\r\n <div className=\"lineValue\">\r\n ${tvl ? Number(Number(tvl).toFixed(0)).toLocaleString('en-US') : '-.--'}\r\n </div>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n </AccordionSummary>\r\n <AccordionDetails style={{overflow: 'hidden'}}>\r\n <Grid container direction=\"column\" spacing={2}>\r\n <Grid item>\r\n <Grid container spacing={2} justifyContent=\"space-between\" alignItems=\"center\">\r\n <Grid item xs={6} md={3}>\r\n <div className=\"statBox\">\r\n <div className=\"statBoxInner\">\r\n <div className=\"lineLabel\">Est Reward /day</div>\r\n <div className=\"lineValueDeposited\">\r\n {Number(scalingFactor) >= 1.01 ? (\r\n <span>~${rewards ? Number(rewards).toLocaleString('en-US') : '0.00'}</span>\r\n ) : (\r\n <span className=\"lineLabel not-printing\">Not Printing</span>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n </Grid>\r\n <Grid item xs={6} md={3}>\r\n <div className=\"statBox\">\r\n <div className=\"statBoxInner\">\r\n <div className=\"lineLabel\">TWAP</div>\r\n <div className=\"lineValue\">{scalingFactor ? scalingFactor : '-.--'}</div>\r\n </div>\r\n </div>\r\n </Grid>\r\n <Grid item xs={6} md={3}>\r\n <div className=\"statBox\">\r\n <div className=\"statBoxInner\">\r\n <div className=\"lineLabel\">WINE Staked</div>\r\n <div className=\"lineValue\">{getDisplayBalance(totalStaked, 18, 2)}</div>\r\n </div>\r\n </div>\r\n </Grid>\r\n <Grid item xs={6} md={3}>\r\n <div className=\"statBox\">\r\n <div className=\"statBoxInner\">\r\n <div className=\"lineLabel\">% WINE Staked</div>\r\n <div className=\"lineValue\">{percentageStaked}%</div>\r\n </div>\r\n </div>\r\n </Grid>\r\n <Grid item xs={6} md={3}>\r\n <div className=\"statBox\">\r\n <div className=\"statBoxInner\">\r\n <div className=\"lineLabel\">Your Share of Pool</div>\r\n <div className=\"lineValue\">\r\n {((parsedStakedBalance * 100) / (Number(totalStaked) / 1e18)).toFixed(2)}%\r\n </div>\r\n </div>\r\n </div>\r\n </Grid>\r\n <Grid item xs={6} md={3}>\r\n <div className=\"statBox\">\r\n <div className=\"statBoxInner\">\r\n <div className=\"lineLabel\">Epochs Above Peg</div>\r\n <div className=\"lineValue\">{printRate.toFixed(2)}%</div>\r\n </div>\r\n </div>\r\n </Grid>\r\n\r\n <Grid item xs={6} md={3}>\r\n <div className=\"statBox\">\r\n <div className=\"statBoxInner\">\r\n <div className=\"lineLabel\">Next Epoch</div>\r\n <div className=\"lineValue\">\r\n {' '}\r\n <ProgressCountdown\r\n base={moment().toDate()}\r\n hideBar={true}\r\n deadline={nextEpoch?.to}\r\n description=\"Next Epoch\"\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n </Grid>\r\n <Grid item xs={6} md={3}>\r\n <div className=\"statBox\">\r\n <div className=\"statBoxInner\">\r\n <div className=\"lineLabel\">Current Epoch</div>\r\n <div className=\"lineValue\">{Number(currentEpoch)}</div>\r\n </div>\r\n </div>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n <Grid item>\r\n <Grid container spacing={5}>\r\n <Grid item xs={12} sm={12} md={6}>\r\n <Box className=\"lineDetailsBox\">\r\n <div className=\"line-details-inner\">\r\n <Grid container justifyContent=\"space-evenly\" spacing={2}>\r\n <Grid\r\n item\r\n className={activeDetailsBoxTab === 'Deposit' ? 'tabDetailsItemActive' : 'tabDetailsItem'}\r\n onClick={() => setActiveDetailsBoxTab('Deposit')}\r\n >\r\n DEPOSIT\r\n </Grid>\r\n <Grid\r\n item\r\n className={activeDetailsBoxTab === 'Withdraw' ? 'tabDetailsItemActive' : 'tabDetailsItem'}\r\n onClick={() => setActiveDetailsBoxTab('Withdraw')}\r\n >\r\n WITHDRAW\r\n </Grid>\r\n </Grid>\r\n\r\n <div className=\"inputDetailsBox\">\r\n <Box className=\"box-price-of-one color-secondary\">\r\n 1 WINE = ${stakedTokenPriceInDollars ? Number(stakedTokenPriceInDollars).toFixed(3) : '0.000'}\r\n </Box>\r\n <div className=\"inputDetailsBoxInner\">\r\n {' '}\r\n <Grid container justifyContent=\"space-between\" alignItems=\"center\" wrap=\"nowrap\">\r\n <Grid item xs={10} md={11}>\r\n <input\r\n placeholder=\"Enter amount\"\r\n className=\"amount-input\"\r\n value={inputValue}\r\n onChange={updateInput}\r\n />\r\n </Grid>\r\n <Grid item xs={2} md={1} className=\"color-secondary\">\r\n <div onClick={maxClicked} className=\"max-button\">\r\n MAX\r\n </div>\r\n </Grid>\r\n </Grid>\r\n <div className=\"balance\">\r\n {activeDetailsBoxTab === 'Deposit' && <span>Wallet: {parsedWineBalance} WINE</span>}\r\n {activeDetailsBoxTab === 'Withdraw' && <span>Staked: {parsedStakedBalance} WINE</span>}\r\n </div>\r\n </div>\r\n {!canWithdraw && withdrawTimer && withdrawTimer.from && withdrawTimer.to && (\r\n <Box mt={2}>\r\n <div className=\"pending-rewards\">\r\n Withdraw possible in{' '}\r\n <span className=\"withdraw-time-left\">\r\n <ProgressCountdown\r\n hideBar={true}\r\n base={withdrawTimer.from}\r\n deadline={withdrawTimer.to}\r\n description=\"Withdraw available in\"\r\n />\r\n </span>\r\n </div>\r\n </Box>\r\n )}\r\n </div>\r\n </div>\r\n <Box>\r\n <Grid container justifyContent=\"center\">\r\n {activeDetailsBoxTab === 'Deposit' && (\r\n <>\r\n {approveStatus !== ApprovalState.APPROVED ? (\r\n <>\r\n <Grid item xs={12}>\r\n <button\r\n onClick={() => {\r\n setApproveLoading(true);\r\n approve();\r\n }}\r\n style={{\r\n borderTopLeftRadius: '0',\r\n borderTopRightRadius: '0',\r\n }}\r\n className=\"primary-button\"\r\n title=\"Approve\"\r\n >\r\n {approveLoading ? (\r\n <span>\r\n <SyncLoader color=\"white\" size={4} style={{marginRight: '10px'}} />\r\n APPROVING\r\n </span>\r\n ) : (\r\n <span>APPROVE</span>\r\n )}\r\n </button>\r\n </Grid>\r\n </>\r\n ) : (\r\n <>\r\n <Grid item xs={12}>\r\n <button\r\n disabled={Number(inputValue) === 0 || inputValue === ''}\r\n onClick={stake}\r\n className=\"primary-button\"\r\n style={{\r\n borderTopLeftRadius: '0',\r\n borderTopRightRadius: '0',\r\n }}\r\n title=\"Deposit\"\r\n >\r\n {depositingLoading ? (\r\n <span>\r\n <SyncLoader color=\"white\" size={4} style={{marginRight: '10px'}} />\r\n DEPOSITING\r\n </span>\r\n ) : (\r\n <span>DEPOSIT</span>\r\n )}\r\n </button>\r\n </Grid>\r\n </>\r\n )}\r\n </>\r\n )}\r\n {activeDetailsBoxTab === 'Withdraw' && (\r\n <>\r\n <Grid item xs={12}>\r\n {activeDetailsBoxTab === 'Withdraw' && (\r\n <button\r\n disabled={Number(inputValue) <= 0 || !canWithdraw}\r\n onClick={withdraw}\r\n style={{\r\n borderTopLeftRadius: '0',\r\n borderTopRightRadius: '0',\r\n }}\r\n className=\"secondary-button\"\r\n title=\"Withdraw\"\r\n >\r\n {withdrawLoading ? (\r\n <span>\r\n <SyncLoader color=\"white\" size={4} style={{marginRight: '10px'}} />\r\n WITHDRAWING\r\n </span>\r\n ) : (\r\n <span>WITHDRAW</span>\r\n )}\r\n </button>\r\n )}\r\n </Grid>\r\n </>\r\n )}\r\n </Grid>\r\n </Box>\r\n </Box>\r\n </Grid>\r\n\r\n <Grid item xs={12} sm={12} md={6}>\r\n <Box className=\"lineDetailsBox\">\r\n <div className=\"line-details-inner\">\r\n <Box>\r\n <div className=\"pending-rewards\">PENDING REWARDS</div>\r\n </Box>\r\n\r\n <Box style={{textAlign: 'center'}} mt={2}>\r\n <TokenSymbol symbol=\"GRAPE\" width={60} height={60} />\r\n </Box>\r\n <Box mt={2}>\r\n <Grid\r\n container\r\n direction=\"column\"\r\n spacing={0}\r\n justifyContent=\"center\"\r\n alignContent=\"center\"\r\n alignItems=\"center\"\r\n >\r\n <Grid item className=\"rewardTokenAmount\">\r\n {parsedEarnings} GRAPE\r\n </Grid>\r\n <Grid item className=\"rewardTokenValue\">\r\n <span className=\"lineValueDeposited\">${earnedInDollars ? earnedInDollars : '0.00'}</span>\r\n </Grid>\r\n </Grid>\r\n </Box>\r\n\r\n {!canClaim && claimRewardTimer && claimRewardTimer.from && claimRewardTimer.to && (\r\n <Box mt={2}>\r\n <div className=\"pending-rewards\">\r\n Claim possible in\r\n <span className=\"time-left\">\r\n <ProgressCountdown\r\n hideBar={true}\r\n base={claimRewardTimer.from}\r\n deadline={claimRewardTimer.to}\r\n description=\"Withdraw available in\"\r\n />\r\n </span>\r\n </div>\r\n </Box>\r\n )}\r\n </div>\r\n <Box>\r\n <Grid container justifyContent=\"space-between\">\r\n <Grid item xs={6}>\r\n <button\r\n disabled={earnings.eq(0) || (!canClaim && !canWithdraw)}\r\n style={{borderTopLeftRadius: '0', borderTopRightRadius: '0', borderBottomRightRadius: '0'}}\r\n className=\"secondary-button\"\r\n title=\"Claim & Withdraw\"\r\n onClick={() => {\r\n setRedeemLoading(true);\r\n onRedeem();\r\n }}\r\n >\r\n {redeemLoading ? (\r\n <span>\r\n <SyncLoader color=\"white\" size={4} style={{marginRight: '10px'}} />\r\n CLAIMING & WITHDRAWING\r\n </span>\r\n ) : (\r\n <span>CLAIM & WITHDRAW</span>\r\n )}\r\n </button>\r\n </Grid>\r\n <Grid item xs={6}>\r\n <button\r\n style={{borderTopLeftRadius: '0', borderTopRightRadius: '0', borderBottomLeftRadius: '0'}}\r\n disabled={earnings.eq(0) || !canClaim}\r\n className=\"primary-button\"\r\n title=\"Claim\"\r\n onClick={() => {\r\n setClaimLoading(true);\r\n onReward();\r\n }}\r\n >\r\n {claimLoading ? (\r\n <span>\r\n <SyncLoader color=\"white\" size={4} style={{marginRight: '10px'}} />\r\n CLAIMING\r\n </span>\r\n ) : (\r\n <span>CLAIM</span>\r\n )}\r\n </button>\r\n </Grid>\r\n </Grid>\r\n </Box>\r\n </Box>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n </AccordionDetails>\r\n </Accordion>\r\n );\r\n};\r\n\r\nexport default BoardroomCard;\r\n","C:\\Users\\CR\\Documents\\front-end\\src\\views\\Dashboard\\Farms.tsx",[],"C:\\Users\\CR\\Documents\\front-end\\src\\components\\TokenSymbol\\index.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useRefresh.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\components\\LaunchCountdown\\index.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\grape-finance\\index.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\components\\UnlockWallet\\index.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\utils\\dexscreener.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useTokenBalance.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useModal.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\grape-finance\\config.ts",["1032"],"import {Deployments} from './deployments';\r\nimport {ChainId} from '@traderjoe-xyz/sdk';\r\n\r\nexport type Configuration = {\r\n chainId: 43114;\r\n networkName: string;\r\n ftmscanUrl: string;\r\n defaultProvider: string;\r\n deployments: Deployments;\r\n externalTokens: {[contractName: string]: [string, number, [string, string]?]};\r\n config?: EthereumConfig;\r\n\r\n baseLaunchDate: Date;\r\n bondLaunchesAt: Date;\r\n boardroomLaunchesAt: Date;\r\n\r\n refreshInterval: number;\r\n};\r\n\r\nexport type EthereumConfig = {\r\n testing: boolean;\r\n autoGasMultiplier: number;\r\n defaultConfirmations: number;\r\n defaultGas: string;\r\n defaultGasPrice: string;\r\n ethereumNodeTimeout: number;\r\n};\r\n\r\nexport const defaultEthereumConfig = {\r\n testing: false,\r\n autoGasMultiplier: 1.5,\r\n defaultConfirmations: 3,\r\n defaultGas: '6000000',\r\n defaultGasPrice: '7000000000000',\r\n ethereumNodeTimeout: 10000,\r\n};\r\n","C:\\Users\\CR\\Documents\\front-end\\src\\views\\Raffle\\components\\ExchangeModal.tsx",[],"C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useCashPriceInEstimatedTWAP.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useApprove.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\usePegPoolWithdraw.ts",["1033"],"import { useCallback } from 'react';\r\nimport useBombFinance from './useGrapeFinance';\r\nimport useHandleTransactionReceipt from './useHandleTransactionReceipt';\r\nimport { parseUnits } from 'ethers/lib/utils';\r\nimport { PegPool } from '../grape-finance/types';\r\nimport usePegPool from './usePegPool';\r\n\r\nconst usePegPoolWithdraw = (pool: PegPool) => {\r\n const bombFinance = useBombFinance();\r\n const handleTransactionReceipt = useHandleTransactionReceipt();\r\n const { refreshPool } = usePegPool();\r\n\r\n const handleWithdraw = useCallback(\r\n async (amount: string) => {\r\n const amountBn = parseUnits(amount);\r\n handleTransactionReceipt(\r\n bombFinance.withdrawPegPool(amountBn).then(async (tx) => {\r\n await refreshPool();\r\n return tx;\r\n }),\r\n `Withdraw ${amount} ${pool.depositTokenName} to pool`,\r\n );\r\n },\r\n [pool, bombFinance, handleTransactionReceipt],\r\n );\r\n\r\n return { onWithdraw: handleWithdraw };\r\n};\r\n\r\nexport default usePegPoolWithdraw;\r\n","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\usePegPoolWithdrawFee.ts",["1034"],"import { BigNumber } from 'ethers';\r\nimport { formatEther } from 'ethers/lib/utils';\r\nimport { useEffect, useState } from 'react';\r\nimport useBombFinance from './useGrapeFinance';\r\n\r\nconst usePegPoolWithdrawFee = () => {\r\n const bombFinance = useBombFinance();\r\n const isUnlocked = bombFinance?.isUnlocked;\r\n const [withdrawFeePercent, setWithdrawFeePercent] = useState<number>(null);\r\n\r\n useEffect(() => {\r\n const updateFee = async () => {\r\n const twap: BigNumber = await bombFinance.contracts.PegPool.getUpdatedTWAP();\r\n const twapNum = Number(formatEther(twap));\r\n\r\n if (twapNum >= 1) {\r\n setWithdrawFeePercent(0);\r\n return;\r\n }\r\n\r\n const brackets = [0.9, 0.8, 0.7, 0.6, 0.5, 0.4, 0.3, 0.2, 0.1];\r\n for (let i = 0; i < brackets.length; i++) {\r\n if (twapNum >= brackets[i]) {\r\n setWithdrawFeePercent(Number(((1 - brackets[i]) * 100).toFixed(2)));\r\n return;\r\n }\r\n }\r\n };\r\n\r\n if (isUnlocked) {\r\n updateFee();\r\n const timer = setInterval(() => {\r\n updateFee();\r\n }, 1000 * 30);\r\n\r\n return () => clearInterval(timer);\r\n }\r\n }, [isUnlocked]);\r\n\r\n return { withdrawFeePercent };\r\n};\r\n\r\nexport default usePegPoolWithdrawFee;\r\n","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\usePegPoolDeposit.ts",["1035","1036"],"import { useCallback } from 'react';\r\nimport useBombFinance from './useGrapeFinance';\r\nimport useHandleTransactionReceipt from './useHandleTransactionReceipt';\r\nimport { formatEther, parseUnits } from 'ethers/lib/utils';\r\nimport { PegPool } from '../grape-finance/types';\r\nimport usePegPool from './usePegPool';\r\n\r\nconst usePegPoolDeposit = (pool: PegPool) => {\r\n const bombFinance = useBombFinance();\r\n const handleTransactionReceipt = useHandleTransactionReceipt();\r\n const { refreshPool } = usePegPool();\r\n\r\n const handleDeposit = useCallback(\r\n async (amount: string) => {\r\n const amountBn = parseUnits(amount);\r\n handleTransactionReceipt(\r\n bombFinance.depositPegPool(amountBn).then((tx) => {\r\n refreshPool();\r\n return tx;\r\n }),\r\n `Deposit ${Number(amount).toFixed(2)} ${pool.depositTokenName} to pool`,\r\n );\r\n },\r\n [pool, bombFinance, handleTransactionReceipt],\r\n );\r\n\r\n return { onDeposit: handleDeposit };\r\n};\r\n\r\nexport default usePegPoolDeposit;\r\n","C:\\Users\\CR\\Documents\\front-end\\src\\components\\Page\\Page.tsx",[],"C:\\Users\\CR\\Documents\\front-end\\src\\views\\Extinction\\components\\PegPoolRewards.tsx",["1037","1038"],"import {Box, Button, Card, CardContent, Typography, Grid} from '@material-ui/core';\r\nimport ReactTooltip from 'react-tooltip';\r\nimport React, {useEffect, useState} from 'react';\r\nimport {PegPoolToken} from '../../../grape-finance/types';\r\nimport TokenSymbol from '../../../components/TokenSymbol';\r\nimport usePegPoolCompound from '../../../hooks/usePegPoolCompound';\r\nimport usePegPoolRewardsClaim from '../../../hooks/usePegPoolRewardsClaim';\r\nimport usePegPoolWithdrawFee from '../../../hooks/usePegPoolWithdrawFee';\r\n\r\nconst PegPoolRewards: React.FC<{\r\n rewardTokens: PegPoolToken[];\r\n totalRewardValue: string;\r\n apr: {daily: string; yearly: string};\r\n}> = ({rewardTokens, totalRewardValue, apr}) => {\r\n const [hasRewards, setHasRewards] = useState(false);\r\n const {doClaim} = usePegPoolRewardsClaim();\r\n const {onCompound} = usePegPoolCompound();\r\n const {withdrawFeePercent} = usePegPoolWithdrawFee();\r\n\r\n const checkRewards = () => {\r\n let hasClaim = false;\r\n rewardTokens.forEach((rw) => (hasClaim = rw.pendingValueBN?.gt(0)));\r\n setHasRewards(hasClaim);\r\n };\r\n\r\n const handleClaim = () => {\r\n if (hasRewards) {\r\n doClaim();\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n if (rewardTokens?.length) {\r\n checkRewards();\r\n }\r\n }, [rewardTokens]);\r\n\r\n return (\r\n <Card variant=\"outlined\">\r\n <CardContent>\r\n <div style={{textAlign: 'center'}}>\r\n <Grid container justifyContent=\"center\" spacing={2}>\r\n <Grid item>\r\n <TokenSymbol symbol={'WINE'} width={50} height={50} />\r\n </Grid>\r\n <Grid item>\r\n <TokenSymbol symbol={'MIM'} width={50} height={50} />\r\n </Grid>\r\n </Grid>\r\n </div>\r\n <Grid container direction=\"column\">\r\n <Grid item>\r\n <Grid container style={{marginTop: '20px'}} alignItems=\"baseline\" justifyContent=\"space-between\">\r\n <Grid item>\r\n <Typography variant=\"h5\">Your Total Rewards</Typography>\r\n </Grid>\r\n <Grid item>\r\n <Typography align=\"right\"></Typography>\r\n <Typography variant=\"h5\">${totalRewardValue}</Typography>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n <Grid item>\r\n <Grid container alignItems=\"baseline\" justifyContent=\"space-between\">\r\n <Grid item>\r\n <Typography variant=\"h6\">DAILY APR</Typography>\r\n </Grid>\r\n <Grid item>\r\n <Typography align=\"right\"></Typography>\r\n <Typography variant=\"h6\">{withdrawFeePercent === 0 ? 0 : apr.daily}%</Typography>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n <Grid item>\r\n <Grid container alignItems=\"baseline\" justifyContent=\"space-between\">\r\n <Grid item>\r\n <Typography variant=\"h6\">YEARLY APR</Typography>\r\n </Grid>\r\n <Grid item>\r\n <Typography align=\"right\"></Typography>\r\n <Typography variant=\"h6\">{withdrawFeePercent === 0 ? 0 : apr.yearly}%</Typography>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n\r\n <Grid container justifyContent=\"center\" alignItems=\"center\">\r\n {rewardTokens?.map((token, i) => {\r\n return (\r\n <Grid container justifyContent=\"space-between\" alignItems=\"center\" key={i} style={{marginTop: '35px'}}>\r\n <Grid item xs={1}>\r\n <TokenSymbol symbol={token.name} width={40} height={40}/>\r\n </Grid>\r\n <Grid item xs={1}>\r\n <Typography\r\n style={{\r\n fontWeight: 700,\r\n paddingTop: '5px',\r\n display: 'block',\r\n }}\r\n >\r\n {' '}\r\n {token.name}\r\n </Typography>\r\n <Typography\r\n style={{\r\n fontSize: '14px',\r\n color: 'rgb(200, 200, 200)',\r\n }}\r\n >\r\n {token.currentPrice}\r\n </Typography>\r\n </Grid>\r\n <Grid item xs={9}>\r\n <Typography align=\"right\">{token.amount} {token.name}</Typography>\r\n <Typography align=\"right\">${token.pendingValue}</Typography>\r\n </Grid>\r\n {token.canCompound && (\r\n <Grid container justifyContent=\"flex-end\" style={{marginTop: '5px'}}>\r\n <Grid item>\r\n <span\r\n style={{\r\n color: 'white',\r\n display: 'inline-block',\r\n margin: '8px',\r\n borderRadius: '50%',\r\n width: '20px',\r\n background: '#e647e6',\r\n textAlign: 'center',\r\n fontSize: '14px',\r\n cursor: 'pointer',\r\n }}\r\n data-tip=\"*Compound deposit result subject to DEX fees/slippage\"\r\n >\r\n !\r\n </span>\r\n\r\n <ReactTooltip />\r\n </Grid>\r\n <Grid item>\r\n <Button\r\n disabled={!hasRewards}\r\n className={hasRewards ? 'shinyButton' : 'shinyButtonDisabled'}\r\n onClick={onCompound}\r\n >\r\n Compound\r\n </Button>\r\n </Grid>\r\n </Grid>\r\n )}\r\n </Grid>\r\n );\r\n })}\r\n <Grid container style={{marginTop: '30px'}}>\r\n <Button\r\n className={hasRewards ? 'shinyButton' : 'shinyButtonDisabled'}\r\n fullWidth={true}\r\n disabled={!hasRewards}\r\n onClick={handleClaim}\r\n >\r\n Claim All\r\n </Button>\r\n </Grid>\r\n </Grid>\r\n </CardContent>\r\n </Card>\r\n );\r\n};\r\n\r\nexport default PegPoolRewards;\r\n","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useGrapeStats.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useEarningsOnBoardroom.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useHarvestFromBoardroom.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\boardroom\\useClaimRewardTimerBoardroom.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\views\\Bank\\components\\WithdrawModal.tsx",[],"C:\\Users\\CR\\Documents\\front-end\\src\\views\\Bank\\components\\DepositModal.tsx",[],"C:\\Users\\CR\\Documents\\front-end\\src\\views\\Dashboard\\NodeCard.tsx",["1039","1040","1041","1042","1043"],"import React, {useEffect, useMemo, useState} from 'react';\r\nimport {Box, Grid, Accordion, AccordionDetails, AccordionSummary, useMediaQuery} from '@material-ui/core';\r\nimport useEarnings from '../../hooks/useEarnings';\r\nimport useHarvest from '../../hooks/useHarvest';\r\nimport {getDisplayBalance, getFullDisplayBalance} from '../../utils/formatBalance';\r\nimport useTokenBalance from '../../hooks/useTokenBalance';\r\nimport useStake from '../../hooks/useStake';\r\nimport useWithdraw from '../../hooks/useWithdraw';\r\nimport {Bank} from '../../grape-finance';\r\nimport useStatsForPool from '../../hooks/useStatsForPool';\r\nimport TokenSymbol from '../../components/TokenSymbol';\r\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore';\r\nimport useGrapeStats from '../../hooks/useGrapeStats';\r\nimport useApprove, {ApprovalState} from '../../hooks/useApprove';\r\nimport useDailyDrip from '../../hooks/useDailyDrip';\r\nimport useNodes from '../../hooks/useNodes';\r\nimport useWallet from 'use-wallet';\r\nimport useUserDetails from '../../hooks/useUserDetails';\r\nimport useMaxPayout from '../../hooks/useMaxPayout';\r\nimport useTotalNodes from '../../hooks/useTotalNodes';\r\nimport {useGetMultiplierForNode} from '../../utils/constants';\r\nimport useLpStatsBTC from '../../hooks/useLpStatsBTC';\r\nimport useNodePrice from '../../hooks/useNodePrice';\r\nimport useCompound from '../../hooks/useCompound';\r\nimport useGrapeNodeClaimFee from '../../hooks/useGrapeNodeClaimFee';\r\nimport {subscribe, unsubscribe} from '../../state/txEvent';\r\nimport {SyncLoader} from 'react-spinners';\r\nimport Tooltip, {TooltipProps, tooltipClasses} from '@mui/material/Tooltip';\r\nimport {styled} from '@mui/material/styles';\r\nimport InfoIcon from '@mui/icons-material/Info';\r\nimport useModal from '../../hooks/useModal';\r\nimport ClaimModal from '../GrapeNode/components/ClaimModal';\r\nimport { TokenStat } from '../../grape-finance/types';\r\n\r\ninterface FarmCardProps {\r\n bank: Bank;\r\n grapeStats: TokenStat;\r\n account: string;\r\n activesOnly: boolean;\r\n}\r\n\r\nconst LightTooltip = styled(({className, ...props}: TooltipProps) => (\r\n <Tooltip {...props} classes={{popper: className}} />\r\n))(({theme}) => ({\r\n [`& .${tooltipClasses.tooltip}`]: {\r\n boxShadow: theme.shadows[1],\r\n fontSize: 11,\r\n },\r\n}));\r\n\r\nconst NodeCard: React.FC<FarmCardProps> = ({bank, grapeStats, account, activesOnly}) => {\r\n useEffect(() => {\r\n subscribe('failedTx', () => {\r\n setClaimLoading(false);\r\n setCompoundLoading(false);\r\n setDepositingLoading(false);\r\n setApproveLoading(false);\r\n });\r\n\r\n subscribe('successTx', () => {\r\n setCompoundLoading(false);\r\n setClaimLoading(false);\r\n setDepositingLoading(false);\r\n setApproveLoading(false);\r\n });\r\n\r\n return () => {\r\n unsubscribe('failedTx');\r\n unsubscribe('successTx');\r\n };\r\n }, []);\r\n\r\n const widthUnder600 = useMediaQuery('(max-width:600px)');\r\n const poolStats = useStatsForPool(bank);\r\n\r\n const [loading, setLoading] = useState(true);\r\n const [expanded, setExpanded] = useState(false);\r\n const [inputValue, setInputValue] = useState<string>('');\r\n const [claimLoading, setClaimLoading] = useState(false);\r\n const [depositingLoading, setDepositingLoading] = useState(false);\r\n const [approveLoading, setApproveLoading] = useState(false);\r\n const [compoundLoading, setCompoundLoading] = useState(false);\r\n\r\n const dailyRewards = useDailyDrip(bank.contract, bank.sectionInUI, account);\r\n const nodes = useNodes(bank.contract, bank.sectionInUI, account);\r\n const userDetails = useUserDetails(bank.contract, bank.sectionInUI, account);\r\n const maxPayout = useMaxPayout(bank?.contract, bank?.sectionInUI, account);\r\n const total = useTotalNodes(bank?.contract, bank?.sectionInUI);\r\n const tokenBalance = useTokenBalance(bank.depositToken);\r\n const earnings = useEarnings(bank.contract, bank.earnTokenName, bank.poolId);\r\n const lpTokenStats = useLpStatsBTC(bank.depositTokenName);\r\n const nodePrice = useNodePrice(bank.contract, bank.poolId, bank.sectionInUI);\r\n const claimFee = useGrapeNodeClaimFee();\r\n\r\n const {approveStatus, approve} = useApprove(bank.depositToken, bank.address);\r\n\r\n const ticketRewards = useGetMultiplierForNode(bank.earnTokenName);\r\n\r\n const parsedDailyRewards = useMemo(() => (dailyRewards ? Number(dailyRewards) / 1e18 : null), [dailyRewards]);\r\n const parsedTotalClaimed = useMemo(\r\n () => (userDetails ? (userDetails as any).total_claims / 1e18 : null),\r\n [userDetails],\r\n );\r\n const parsedMaxPayout = useMemo(() => (maxPayout ? Number(maxPayout) / 1e18 : null), [maxPayout]);\r\n\r\n const parsedNodePrice = useMemo(() => (nodePrice ? Number(nodePrice) / 1e18 : null), [nodePrice]);\r\n const computedUserNode = useMemo(() => {\r\n if (nodes.length > 0) {\r\n return Number(nodes[0]);\r\n } else {\r\n return Number(nodes);\r\n }\r\n }, [nodes]);\r\n\r\n const dailyAPR = useMemo(() => {\r\n if (\r\n bank.contract === 'GrapeNodeV2' &&\r\n dailyRewards != null &&\r\n userDetails != null &&\r\n userDetails.length > 0 &&\r\n computedUserNode != null\r\n ) {\r\n if (computedUserNode > 0) {\r\n return ((Number(dailyRewards) / (Number(userDetails[0]) - Number(userDetails[4]) * 50e18)) * 100).toFixed(2);\r\n }\r\n return poolStats?.dailyAPR;\r\n } else if (bank.contract !== 'GrapeNodeV2' && poolStats) {\r\n return poolStats.dailyAPR;\r\n }\r\n return null;\r\n }, [poolStats, dailyRewards, computedUserNode]);\r\n\r\n const parsedTotalNodes = useMemo(() => {\r\n if (total) {\r\n let nodeTotal;\r\n try {\r\n nodeTotal = Number(total[0]);\r\n } catch (e) {}\r\n if (!nodeTotal) {\r\n nodeTotal = Number(total);\r\n }\r\n return nodeTotal;\r\n }\r\n }, [total]);\r\n\r\n const parsedRewardTokenPriceInDollars = useMemo(\r\n () =>\r\n bank.earnTokenName === 'GRAPE-MIM-SW' || bank.earnTokenName === 'GRAPE-WLRS-LP'\r\n ? Number(lpTokenStats?.priceOfOne).toFixed(2)\r\n : Number(grapeStats?.priceInDollars).toFixed(2),\r\n [lpTokenStats, grapeStats],\r\n );\r\n\r\n // Used in UI\r\n const earnedInToken = Number(getDisplayBalance(earnings));\r\n const earnedInDollars = useMemo(() => {\r\n return parsedRewardTokenPriceInDollars && earnedInToken\r\n ? (Number(parsedRewardTokenPriceInDollars) * earnedInToken).toFixed(2)\r\n : null;\r\n }, [parsedRewardTokenPriceInDollars, earnedInToken]);\r\n const nodeCost = (Number(parsedRewardTokenPriceInDollars) * parsedNodePrice).toFixed(2);\r\n\r\n useEffect(() => {\r\n if (computedUserNode != null && earnedInToken != null && poolStats) {\r\n setLoading(false);\r\n }\r\n }, [computedUserNode, earnedInToken, poolStats]);\r\n\r\n // Custom Hooks functinos\r\n const {onReward} = useHarvest(bank);\r\n const {onStake} = useStake(bank);\r\n const {onCompound} = useCompound(bank);\r\n\r\n // Custom functions\r\n const expand = () => {\r\n setExpanded(!expanded);\r\n };\r\n\r\n const stake = () => {\r\n if (Number(inputValue) > 0) {\r\n setDepositingLoading(true);\r\n onStake(inputValue.toString());\r\n }\r\n };\r\n\r\n const maxClicked = () => {\r\n const nodeNumber = Number(tokenBalance) / 1e18 / (Number(nodePrice) / 1e18);\r\n setInputValue(Math.floor(nodeNumber).toString());\r\n };\r\n\r\n const updateInput = (event: any) => {\r\n setInputValue(event.target.value);\r\n };\r\n\r\n const getLiquidityLink = () => {\r\n if (bank.depositTokenName === 'GRAPE-MIM-SW') {\r\n return 'https://www.swapsicle.io/add/0x130966628846BFd36ff31a822705796e8cb8C18D/0x5541D83EFaD1f281571B343977648B75d95cdAC2';\r\n } else if (bank.depositTokenName === 'GRAPE-WLRS-LP') {\r\n return 'https://traderjoexyz.com/pool/0x395908aeb53d33a9b8ac35e148e9805d34a555d3/0x5541d83efad1f281571b343977648b75d95cdac2#/';\r\n }\r\n };\r\n\r\n const claimCallback = (action: string) => {\r\n if (action === 'Cancel') {\r\n onDismissClaim();\r\n }\r\n if (action === 'Claim') {\r\n setClaimLoading(true);\r\n onReward();\r\n onDismissClaim();\r\n }\r\n };\r\n\r\n const [onPresentClaim, onDismissClaim] = useModal(\r\n <ClaimModal bank={bank} tokenName={bank.earnTokenName} callback={claimCallback} />,\r\n );\r\n\r\n const claim = () => {\r\n if (bank.contract === 'GrapeNodeV2' && claimFee != null && claimFee > 0) {\r\n onPresentClaim();\r\n } else {\r\n setClaimLoading(true);\r\n onReward();\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n {(activesOnly === false || (activesOnly === true && computedUserNode > 0)) && (\r\n <Accordion expanded={expanded} onChange={expand} className=\"accordion\">\r\n <AccordionSummary\r\n expandIcon={loading ? <SyncLoader color=\"white\" size={4} /> : <ExpandMoreIcon style={{color: 'white'}} />}\r\n aria-controls=\"panel1bh-content\"\r\n id=\"panel1bh-header\"\r\n >\r\n <Grid container justifyContent={'space-between'} alignItems=\"center\" className=\"lineItemInner\" spacing={1}>\r\n <Grid item className=\"lineName\" xs={12} sm={12} md={4}>\r\n <Grid container justifyContent=\"flex-start\" alignItems=\"center\" spacing={2} wrap=\"nowrap\">\r\n <Grid item>\r\n <TokenSymbol symbol={bank.depositTokenName} height={30} width={30} />\r\n </Grid>\r\n <Grid item>\r\n <div>{bank.depositTokenName}</div>\r\n <div className=\"lineDescription\">\r\n Lock {bank.depositTokenName} to earn {bank.earnTokenName}\r\n </div>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n <Grid item xs={12} sm={6} md={2}>\r\n <Grid container direction={widthUnder600 ? 'row' : 'column'} justifyContent=\"space-between\">\r\n <Grid item>\r\n <div className=\"lineLabel\">Your Nodes</div>\r\n </Grid>\r\n <Grid item>\r\n <div className=\"lineValueDeposited\">\r\n <span style={{color: '#fcfcfc'}}>{computedUserNode}</span>\r\n </div>{' '}\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n\r\n <Grid item xs={12} sm={6} md={2}>\r\n <Grid container direction={widthUnder600 ? 'row' : 'column'} justifyContent=\"space-between\">\r\n <Grid item>\r\n <div className=\"lineLabel\">Rewards</div>\r\n </Grid>\r\n <Grid item>\r\n <div className=\"lineValueDeposited\">\r\n <span style={{color: '#fcfcfc'}}>{earnedInToken}</span>\r\n <span style={{marginLeft: '5px', fontSize: '14px'}}>\r\n (${earnedInDollars ? earnedInDollars : '0.00'})\r\n </span>\r\n </div>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n\r\n <Grid item xs={12} sm={6} md={2}>\r\n <Grid container direction={widthUnder600 ? 'row' : 'column'} justifyContent=\"space-between\">\r\n <Grid item>\r\n <div className=\"lineLabel\">\r\n APR Yearly | Daily\r\n {bank.contract === 'GrapeNodeV2' && (\r\n <LightTooltip\r\n arrow\r\n placement=\"top\"\r\n enterDelay={0}\r\n title=\"APR is dynamic in this Node. Deposits, compounds, claims impact your daily APR\"\r\n >\r\n <InfoIcon style={{marginLeft: '3px', verticalAlign: 'text-bottom', fontSize: '17px'}} />\r\n </LightTooltip>\r\n )}\r\n </div>\r\n </Grid>\r\n <Grid item>\r\n <div className=\"lineValue\">\r\n {dailyAPR ? (Number(dailyAPR) * 365).toFixed(0) : '---'}% | {dailyAPR ? dailyAPR : '-.--'}%\r\n </div>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n\r\n <Grid item xs={12} sm={6} md={2}>\r\n <Grid container direction={widthUnder600 ? 'row' : 'column'} justifyContent=\"space-between\">\r\n <Grid item>\r\n <div className=\"lineLabel\">TVL</div>\r\n </Grid>\r\n <Grid item>${poolStats?.TVL ? Number(poolStats?.TVL).toLocaleString('en-US') : '--.--'}</Grid>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n </AccordionSummary>\r\n <AccordionDetails style={{overflow: 'hidden'}}>\r\n <Grid container direction=\"column\" spacing={2}>\r\n <Grid item>\r\n <Grid container spacing={2} justifyContent=\"space-between\" alignItems=\"center\">\r\n <Grid item xs={6} md={4}>\r\n <div className=\"statBox\">\r\n <div className=\"statBoxInner\">\r\n <div className=\"lineLabel\">Est. $ /day</div>\r\n <div className=\"lineValue wallet-token-value\">\r\n ${(parsedDailyRewards * Number(parsedRewardTokenPriceInDollars)).toFixed(2)}\r\n </div>\r\n </div>\r\n </div>\r\n </Grid>\r\n <Grid item xs={6} md={4}>\r\n <div className=\"statBox\">\r\n <div className=\"statBoxInner\">\r\n <div className=\"lineLabel\">Est. Reward /day</div>\r\n <div className=\"lineValue\">\r\n {parsedDailyRewards.toFixed(2)} {bank.depositTokenName}{' '}\r\n </div>\r\n </div>\r\n </div>\r\n </Grid>{' '}\r\n <Grid item xs={6} md={4}>\r\n <div className=\"statBox\">\r\n <div className=\"statBoxInner\">\r\n <div className=\"lineLabel\">Airdrop Tickets</div>\r\n <div className=\"lineValue\">\r\n {ticketRewards === 0 ? 'No tickets for this pool' : Number(computedUserNode) * ticketRewards}\r\n </div>\r\n </div>\r\n </div>\r\n </Grid>\r\n <Grid item xs={6} md={4}>\r\n <div className=\"statBox\">\r\n <div className=\"statBoxInner\">\r\n <div className=\"lineLabel\">You Claimed</div>\r\n <div className=\"lineValue\">{parsedTotalClaimed.toFixed(2)}</div>\r\n </div>\r\n </div>\r\n </Grid>\r\n <Grid item xs={6} md={4}>\r\n <div className=\"statBox\">\r\n <div className=\"statBoxInner\">\r\n <div className=\"lineLabel\">\r\n {bank.contract === 'GrapeNodeV2' ? 'Remaining' : 'Max Possible Pay'}\r\n </div>\r\n <div className=\"lineValue\">{parsedMaxPayout.toFixed(2)}</div>\r\n </div>\r\n </div>\r\n </Grid>\r\n <Grid item xs={6} md={4}>\r\n <div className=\"statBox\">\r\n <div className=\"statBoxInner\">\r\n <div className=\"lineLabel\">Total Nodes</div>\r\n <div className=\"lineValue\">{parsedTotalNodes}</div>\r\n </div>\r\n </div>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n <Grid item>\r\n <Grid container spacing={5}>\r\n <Grid item xs={12} sm={12} md={6}>\r\n <Box className=\"lineDetailsBox\">\r\n <div className=\"node-line-details-inner\">\r\n <Box>\r\n <div className=\"pending-rewards\">{bank.depositTokenName} NODE</div>\r\n </Box>\r\n <div className=\"node-inputDetailsBox\">\r\n <Box>\r\n <div className=\"box-price-of-one color-secondary\">\r\n 1 Node Costs {parsedNodePrice} \r\n {bank.depositTokenName}, ${nodeCost}\r\n </div>\r\n </Box>\r\n\r\n <div className=\"inputDetailsBoxInner\">\r\n <Grid container justifyContent=\"space-between\" alignItems=\"center\" wrap=\"nowrap\">\r\n <Grid item xs={10} md={11}>\r\n <input\r\n type=\"number\"\r\n placeholder=\"Enter amount\"\r\n className=\"amount-input\"\r\n value={inputValue}\r\n onChange={updateInput}\r\n />\r\n </Grid>\r\n <Grid item xs={2} md={1} className=\"color-secondary\">\r\n <div onClick={maxClicked} className=\"max-button\">\r\n MAX\r\n </div>\r\n </Grid>\r\n </Grid>\r\n <div className=\"balance\">\r\n <span>\r\n Wallet: {getFullDisplayBalance(tokenBalance, 18)} {bank.depositTokenName}\r\n </span>\r\n </div>\r\n </div>\r\n <Box mt={2}>\r\n {bank.contract === 'GrapeNodeV2' && earnedInToken ? (\r\n <div style={{fontSize: '12px'}}>\r\n Creating new nodes will claim/tax your pending rewards. It is recommended to compound\r\n before creating new Grape Nodes.\r\n </div>\r\n ) : null}\r\n </Box>\r\n </div>\r\n <Box mt={2}>\r\n {getLiquidityLink() != null && (\r\n <a\r\n style={{textDecoration: 'none'}}\r\n rel=\"noopener noreferrer\"\r\n target=\"_blank\"\r\n href={getLiquidityLink()}\r\n >\r\n <div className=\"addRemoveLiquidity color-secondary\">Add / Remove Liquidity</div>\r\n </a>\r\n )}\r\n </Box>\r\n </div>\r\n <Box mt={2}>\r\n <Grid container justifyContent=\"center\">\r\n <Grid item xs={12}>\r\n {approveStatus !== ApprovalState.APPROVED ? (\r\n <button\r\n onClick={() => {\r\n setApproveLoading(true);\r\n approve();\r\n }}\r\n className=\"primary-button\"\r\n title=\"Approve\"\r\n style={{borderTopLeftRadius: '0', borderTopRightRadius: '0'}}\r\n >\r\n {approveLoading ? (\r\n <span>\r\n <SyncLoader color=\"white\" size={4} style={{marginRight: '10px'}} />\r\n APPROVING\r\n </span>\r\n ) : (\r\n <span>APPROVE</span>\r\n )}\r\n </button>\r\n ) : (\r\n <button\r\n disabled={Number(inputValue) === 0 || inputValue === ''}\r\n onClick={stake}\r\n className=\"primary-button\"\r\n title=\"Create Nodes\"\r\n style={{borderTopLeftRadius: '0', borderTopRightRadius: '0'}}\r\n >\r\n {depositingLoading ? (\r\n <span>\r\n <SyncLoader color=\"white\" size={4} style={{marginRight: '10px'}} />\r\n CREATING NODES\r\n </span>\r\n ) : (\r\n <span>CREATE NODES</span>\r\n )}\r\n </button>\r\n )}\r\n </Grid>\r\n </Grid>\r\n </Box>\r\n </Box>\r\n </Grid>\r\n <Grid item xs={12} sm={12} md={6}>\r\n <Box className=\"lineDetailsBox\">\r\n <div className=\"node-line-details-inner\">\r\n <Box>\r\n <div className=\"pending-rewards\">PENDING {bank.earnTokenName} REWARDS</div>\r\n </Box>\r\n <Box style={{textAlign: 'center'}} mt={2}>\r\n <TokenSymbol symbol={bank.earnTokenName} width={59} height={59} />\r\n </Box>\r\n <Box mt={2}>\r\n <Grid\r\n container\r\n direction=\"column\"\r\n spacing={0}\r\n justifyContent=\"center\"\r\n alignContent=\"center\"\r\n alignItems=\"center\"\r\n >\r\n <Grid item className=\"rewardTokenAmount\">\r\n {earnedInToken} {bank.earnTokenName}\r\n </Grid>\r\n <Grid item className=\"rewardTokenValue\">\r\n ${earnedInDollars ? earnedInDollars : '0.00'}\r\n </Grid>\r\n </Grid>\r\n </Box>\r\n </div>\r\n <Box mt={2}>\r\n <Grid container justifyContent=\"center\">\r\n <Grid item xs={6}>\r\n <button\r\n className=\"primary-button\"\r\n title=\"Compound\"\r\n onClick={() => {\r\n setCompoundLoading(true);\r\n onCompound();\r\n }}\r\n disabled={Number(earnings) < Number(nodePrice)}\r\n style={{\r\n borderTopLeftRadius: '0',\r\n borderTopRightRadius: '0',\r\n borderBottomRightRadius: '0',\r\n }}\r\n >\r\n {compoundLoading ? (\r\n <span>\r\n <SyncLoader color=\"white\" size={4} style={{marginRight: '10px'}} />\r\n COMPOUNDING\r\n </span>\r\n ) : (\r\n <span>COMPOUND {(Number(earnings) / Number(nodePrice)) | 0} Nodes</span>\r\n )}\r\n </button>\r\n </Grid>\r\n <Grid item xs={6}>\r\n <button\r\n style={{borderTopLeftRadius: '0', borderTopRightRadius: '0', borderBottomLeftRadius: '0'}}\r\n className=\"secondary-button\"\r\n title=\"Claim\"\r\n onClick={() => {\r\n claim();\r\n }}\r\n disabled={earnings.eq(0)}\r\n >\r\n {claimLoading ? (\r\n <span>\r\n <SyncLoader color=\"white\" size={4} style={{marginRight: '10px'}} />\r\n CLAIMING\r\n </span>\r\n ) : (\r\n <span>\r\n {' '}\r\n CLAIM{' '}\r\n {bank.contract === 'GrapeNodeV2' && claimFee && (\r\n <span style={{marginLeft: '5px'}}>({claimFee}% fee)</span>\r\n )}\r\n </span>\r\n )}\r\n </button>\r\n </Grid>\r\n </Grid>\r\n </Box>\r\n </Box>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n </AccordionDetails>\r\n </Accordion>\r\n )}\r\n </>\r\n );\r\n};\r\n\r\nexport default NodeCard;\r\n","C:\\Users\\CR\\Documents\\front-end\\src\\views\\Dashboard\\SolerapressCard.tsx",["1044"],"import React, {useMemo, useState, useEffect} from 'react';\r\nimport {Box, Grid, Accordion, AccordionDetails, AccordionSummary, useMediaQuery} from '@material-ui/core';\r\nimport InfoIcon from '@mui/icons-material/Info';\r\n\r\nimport {Bank} from '../../grape-finance';\r\nimport TokenSymbol from '../../components/TokenSymbol';\r\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore';\r\nimport ProgressCountdown from './ProgressCountdown';\r\nimport moment from 'moment';\r\nimport {getFullDisplayBalance} from '../../utils/formatBalance';\r\nimport useClaimPress from '../../hooks/useClaimPress';\r\nimport useCompoundPress from '../../hooks/useCompoundPress';\r\nimport useStakePress from '../../hooks/useStakePress';\r\nimport FormControl from '@material-ui/core/FormControl';\r\nimport RadioGroup from '@material-ui/core/RadioGroup';\r\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\r\nimport Radio from '@material-ui/core/Radio';\r\nimport useApprove, {ApprovalState} from '../../hooks/useApprove';\r\nimport usePressLottoInfo from '../../hooks/usePressLottoInfo';\r\nimport useGrapeFinance from '../../hooks/useGrapeFinance';\r\nimport useTokenBalance from '../../hooks/useTokenBalance';\r\nimport useZapStakePress from '../../hooks/useZapStakePress';\r\nimport usePoolBalance from '../../hooks/usePoolBalance';\r\nimport {styled} from '@mui/material/styles';\r\nimport Tooltip, {TooltipProps, tooltipClasses} from '@mui/material/Tooltip';\r\nimport useGetPressUsersNearAssassination from '../../hooks/useGetPressUsersNearAssassination';\r\nimport useAssassinatePress from '../../hooks/useAssassinatePress';\r\nimport useSodapressUserInfo from '../../hooks/useSodapressUserInfo';\r\nimport useSolerapressUserInfo from '../../hooks/useSolerapressUserInfo';\r\nimport {subscribe, unsubscribe} from '../../state/txEvent';\r\nimport {SyncLoader} from 'react-spinners';\r\nimport useBurnGrapePress from '../../hooks/useBurnGrapePress';\r\n\r\nconst GRAPE_PER_BATCH = 10;\r\n\r\ninterface SolerapressCardProps {\r\n displayName: string;\r\n bank: Bank;\r\n activesOnly: boolean;\r\n}\r\n\r\nconst LightTooltip = styled(({className, ...props}: TooltipProps) => (\r\n <Tooltip {...props} classes={{popper: className}} />\r\n))(({theme}) => ({\r\n [`& .${tooltipClasses.tooltip}`]: {\r\n boxShadow: theme.shadows[1],\r\n fontSize: 11,\r\n },\r\n}));\r\n\r\nconst SolerapressCard: React.FC<SolerapressCardProps> = ({displayName, bank, activesOnly}) => {\r\n const widthUnder600 = useMediaQuery('(max-width:600px)');\r\n\r\n const [loading, setLoading] = useState(true);\r\n\r\n const grapeFinance = useGrapeFinance();\r\n const pressUserInfo = useSolerapressUserInfo();\r\n const pressLottoInfo = usePressLottoInfo(bank.name);\r\n const usersNearAssassination = useGetPressUsersNearAssassination(bank.name);\r\n\r\n const depositTokenBalance = useTokenBalance(bank.depositToken);\r\n const mimTokenBalance = useTokenBalance(grapeFinance.MIM);\r\n const grapeTokenBalance = useTokenBalance(grapeFinance.GRAPE);\r\n\r\n const pressBalance = usePoolBalance(grapeFinance.externalTokens[bank.depositTokenName], bank.address);\r\n\r\n const depositTokenApprove = useApprove(bank.depositToken, bank.address);\r\n const mimTokenApprove = useApprove(grapeFinance.MIM, bank.address);\r\n const grapeTokenApprove = useApprove(grapeFinance.GRAPE, grapeFinance.contracts[bank.name + 'Lotto'].address);\r\n\r\n useEffect(() => {\r\n subscribe('failedTx', () => {\r\n setClaimLoading(false);\r\n setDepositingLoading(false);\r\n setApproveLoading(false);\r\n });\r\n\r\n subscribe('successTx', () => {\r\n console.log('SUCCESS TX');\r\n setClaimLoading(false);\r\n setDepositingLoading(false);\r\n setApproveLoading(false);\r\n });\r\n\r\n return () => {\r\n unsubscribe('failedTx');\r\n unsubscribe('successTx');\r\n };\r\n }, []);\r\n const {onClaim} = useClaimPress(bank);\r\n const {onCompound} = useCompoundPress(bank);\r\n const {onStake} = useStakePress(bank);\r\n const {onZapAndStake} = useZapStakePress(bank);\r\n const {onAssassinate} = useAssassinatePress(bank);\r\n const {onBurnGrape} = useBurnGrapePress(bank);\r\n\r\n const [expanded, setExpanded] = useState(false);\r\n const [inputValue, setInputValue] = useState<string>('');\r\n const [payWith, setPayWith] = useState(bank.depositTokenName);\r\n const [batchAmount, setBatchAmount] = useState('');\r\n const [claimLoading, setClaimLoading] = useState(false);\r\n const [depositingLoading, setDepositingLoading] = useState(false);\r\n const [approveLoading, setApproveLoading] = useState(false);\r\n const [compoundLoading, setCompoundLoading] = useState(false);\r\n\r\n const displayDailyAPR = useMemo(\r\n () => (pressUserInfo ? (Number(pressUserInfo.rewardsPerDay) * 100) / pressUserInfo.totalDeposited : null),\r\n [pressUserInfo],\r\n );\r\n\r\n const displayRemainingTime = useMemo(() => {\r\n if (pressLottoInfo) {\r\n const dateTo = new Date();\r\n dateTo.setSeconds(dateTo.getSeconds() + Number(pressLottoInfo.timeLeftUntilNewDay));\r\n return dateTo;\r\n }\r\n return null;\r\n }, [pressLottoInfo]);\r\n\r\n const numGrapeToBurn = useMemo(() => {\r\n if (!batchAmount) return '';\r\n return Number(batchAmount) * GRAPE_PER_BATCH;\r\n }, [batchAmount]);\r\n\r\n useEffect(() => {\r\n if (pressUserInfo != null && displayDailyAPR != null) {\r\n setLoading(false);\r\n }\r\n }, [pressUserInfo, displayDailyAPR]);\r\n\r\n // Custom functions\r\n const expand = () => {\r\n setExpanded(!expanded);\r\n };\r\n\r\n const stake = () => {\r\n if (Number(inputValue) > 0) {\r\n if (payWith === bank.depositTokenName) {\r\n onStake(inputValue);\r\n } else {\r\n onZapAndStake(inputValue, payWith);\r\n }\r\n }\r\n };\r\n\r\n const burn = () => {\r\n if (Number(batchAmount) > 0) {\r\n onBurnGrape(Number(batchAmount));\r\n }\r\n };\r\n\r\n const handleBatchAmountChanged = (e: any) => {\r\n if (isNaN(Number(e.target.value))) return;\r\n setBatchAmount(e.target.value);\r\n };\r\n\r\n const maxClicked = () => {\r\n setInputValue(getFullDisplayBalance(payWith === 'MIM' ? mimTokenBalance : depositTokenBalance, 18));\r\n };\r\n\r\n const maxBatchClicked = () => {\r\n const batches = Math.floor(Number(grapeTokenBalance) / 1e18 / 10);\r\n setBatchAmount(batches.toFixed(0));\r\n };\r\n\r\n const updateInput = (event: any) => {\r\n setInputValue(event.target.value);\r\n };\r\n\r\n const handlePayWithChange = (event: React.ChangeEvent<HTMLInputElement>) => {\r\n setPayWith(event.target.value);\r\n };\r\n\r\n const approve = () => {\r\n if (payWith === 'MIM') {\r\n mimTokenApprove.approve();\r\n return;\r\n }\r\n depositTokenApprove.approve();\r\n };\r\n\r\n const showApprove = () => {\r\n return (\r\n (payWith === 'MIM' && mimTokenApprove.approveStatus !== ApprovalState.APPROVED) ||\r\n (payWith === bank.depositTokenName && depositTokenApprove.approveStatus !== ApprovalState.APPROVED)\r\n );\r\n };\r\n\r\n const shortenAddress = (addr: string) => {\r\n if (!addr) return '';\r\n return addr.slice(0, 6) + '...' + addr.slice(addr.length - 4, addr.length);\r\n };\r\n\r\n const assassinate = (user: string) => {\r\n onAssassinate(user);\r\n };\r\n\r\n return (\r\n <>\r\n {(activesOnly === false || (activesOnly === true && pressUserInfo && pressUserInfo.totalTracked > 0)) && (\r\n <Accordion expanded={expanded} onChange={expand} className=\"accordion\">\r\n <AccordionSummary\r\n expandIcon={loading ? <SyncLoader color=\"white\" size={4} /> : <ExpandMoreIcon style={{color: 'white'}} />}\r\n aria-controls=\"panel1bh-content\"\r\n id=\"panel1bh-header\"\r\n >\r\n <Grid container justifyContent={'space-between'} alignItems=\"center\" className=\"lineItemInner\" spacing={1}>\r\n <Grid item className=\"lineName\" xs={12} sm={12} md={4}>\r\n <Grid container justifyContent=\"flex-start\" alignItems=\"center\" spacing={2} wrap=\"nowrap\">\r\n <Grid item>\r\n <TokenSymbol symbol={bank.depositTokenName} height={30} width={30} />\r\n </Grid>\r\n <Grid item>\r\n <div>{displayName}</div>\r\n <div className=\"lineDescription\">\r\n Lock {bank.depositTokenName} and earn up to 350% back in {bank.depositTokenName}\r\n </div>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n <Grid item xs={12} sm={6} md={2}>\r\n <Grid container direction={widthUnder600 ? 'row' : 'column'} justifyContent=\"space-between\">\r\n <Grid item>\r\n <div className=\"lineLabel\">\r\n {' '}\r\n Total Tracked{' '}\r\n <LightTooltip arrow placement=\"top\" enterDelay={0} title=\"Token Deposited + Compounded\">\r\n <InfoIcon style={{verticalAlign: 'text-bottom', fontSize: '17px'}} />\r\n </LightTooltip>\r\n </div>\r\n </Grid>\r\n <Grid item>\r\n {' '}\r\n <div className=\"lineValueDeposited\">\r\n <span style={{color: '#fcfcfc'}}>\r\n {pressUserInfo ? pressUserInfo.totalTracked.toFixed(2) : '0.00'} LP\r\n </span>\r\n <span style={{marginLeft: '5px', fontSize: '14px'}}>\r\n ($\r\n {pressUserInfo\r\n ? (pressUserInfo.totalTracked * Number(pressUserInfo.depositTokenPrice)).toFixed(2)\r\n : '0.00'}\r\n )\r\n </span>\r\n </div>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n\r\n <Grid item xs={12} sm={6} md={2}>\r\n <Grid container direction={widthUnder600 ? 'row' : 'column'} justifyContent=\"space-between\">\r\n <Grid item>\r\n <div className=\"lineLabel\">Rewards</div>\r\n </Grid>\r\n <Grid item>\r\n <div className=\"lineValueDeposited\">\r\n <span style={{color: '#fcfcfc'}}>\r\n {pressUserInfo ? pressUserInfo.totalClaimable.toFixed(2) : '0.00'} LP\r\n </span>\r\n <span style={{marginLeft: '5px', fontSize: '14px'}}>\r\n ($\r\n {pressUserInfo\r\n ? (pressUserInfo.totalClaimable * Number(pressUserInfo.depositTokenPrice)).toFixed(2)\r\n : '0.00'}\r\n )\r\n </span>\r\n </div>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n\r\n <Grid item xs={12} sm={6} md={2}>\r\n <Grid container direction={widthUnder600 ? 'row' : 'column'} justifyContent=\"space-between\">\r\n <Grid item>\r\n <div className=\"lineLabel\">\r\n APR Yearly | Daily{' '}\r\n <LightTooltip\r\n arrow\r\n placement=\"top\"\r\n enterDelay={0}\r\n title=\"Base APR is 1.25%, then changes based on your deposits, compounds and claims\"\r\n >\r\n <InfoIcon style={{verticalAlign: 'text-bottom', fontSize: '17px'}} />\r\n </LightTooltip>\r\n </div>{' '}\r\n </Grid>\r\n <Grid item>\r\n <div className=\"lineValue\">\r\n {displayDailyAPR ? (displayDailyAPR * 365).toFixed(0) : '456'}% |{' '}\r\n {displayDailyAPR ? displayDailyAPR.toFixed(2) : '1.25'}%\r\n </div>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n\r\n <Grid item xs={12} sm={6} md={2}>\r\n <Grid container direction={widthUnder600 ? 'row' : 'column'} justifyContent=\"space-between\">\r\n <Grid item>\r\n <div className=\"lineLabel\">Total Deposited</div>\r\n </Grid>\r\n <Grid item>\r\n ${pressUserInfo ? pressUserInfo.tvl.toLocaleString('en-US', {maximumFractionDigits: 2}) : '0.00'}\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n </AccordionSummary>\r\n <AccordionDetails style={{overflow: 'hidden'}}>\r\n <Grid container direction=\"column\" spacing={2}>\r\n <Grid item>\r\n <Grid container spacing={2} justifyContent=\"space-between\" alignItems=\"center\">\r\n <Grid item xs={6} md={3}>\r\n <div className=\"statBox\">\r\n <div className=\"statBoxInner\">\r\n <div className=\"lineLabel\">Est. Reward /day</div>\r\n <div className=\"lineValue\">\r\n {pressUserInfo ? pressUserInfo.rewardsPerDay.toFixed(2) : '0.00'} LP\r\n <span className=\"wallet-token-value\">\r\n {' '}\r\n ($\r\n {pressUserInfo\r\n ? (pressUserInfo.rewardsPerDay * Number(pressUserInfo.depositTokenPrice)).toFixed(2)\r\n : '0.00'}\r\n )\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </Grid>\r\n <Grid item xs={6} md={3}>\r\n <div className=\"statBox\">\r\n <div className=\"statBoxInner\">\r\n <div className=\"lineLabel\">\r\n Your Deposits{' '}\r\n <LightTooltip\r\n arrow\r\n placement=\"top\"\r\n enterDelay={0}\r\n title=\"Shows 90% of the sum of all your deposits\"\r\n >\r\n <InfoIcon style={{verticalAlign: 'text-bottom', fontSize: '17px'}} />\r\n </LightTooltip>\r\n </div>\r\n <div className=\"lineValue\">\r\n {pressUserInfo ? pressUserInfo.totalDeposited.toFixed(2) : '0.00'} LP{' '}\r\n <span className=\"wallet-token-value\">\r\n ($\r\n {pressUserInfo\r\n ? (pressUserInfo.totalDeposited * Number(pressUserInfo.depositTokenPrice)).toFixed(2)\r\n : '0.00'}\r\n )\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </Grid>\r\n <Grid item xs={6} md={3}>\r\n <div className=\"statBox\">\r\n <div className=\"statBoxInner\">\r\n <div className=\"lineLabel\">\r\n Your Compounds{' '}\r\n <LightTooltip arrow placement=\"top\" enterDelay={0} title=\"Sum of all your compounds\">\r\n <InfoIcon style={{verticalAlign: 'text-bottom', fontSize: '17px'}} />\r\n </LightTooltip>\r\n </div>\r\n <div className=\"lineValue\">\r\n {pressUserInfo\r\n ? (pressUserInfo.totalTracked - pressUserInfo.totalDeposited).toFixed(2)\r\n : '0.00'}{' '}\r\n LP\r\n <span className=\"wallet-token-value\">\r\n {' '}\r\n ($\r\n {pressUserInfo\r\n ? (\r\n (pressUserInfo.totalTracked - pressUserInfo.totalDeposited) *\r\n Number(pressUserInfo.depositTokenPrice)\r\n ).toFixed(2)\r\n : '0.00'}\r\n )\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </Grid>\r\n <Grid item xs={6} md={3}>\r\n <div className=\"statBox\">\r\n <div className=\"statBoxInner\">\r\n <div className=\"lineLabel\">\r\n Assassination Tracker{' '}\r\n <LightTooltip\r\n arrow\r\n placement=\"top\"\r\n enterDelay={0}\r\n title=\"You don't want to reach 3.5... ((tracked share in token - tracked token balance) / tracked token balance)\"\r\n >\r\n <InfoIcon style={{verticalAlign: 'text-bottom', fontSize: '17px'}} />\r\n </LightTooltip>\r\n </div>\r\n <div className=\"lineValue\">\r\n {pressUserInfo ? pressUserInfo.profitRatio.toFixed(2) : '0.00'} / 3.5\r\n </div>\r\n </div>\r\n </div>\r\n </Grid>\r\n\r\n <Grid item xs={6} md={3}>\r\n <div className=\"statBox\">\r\n <div className=\"statBoxInner\">\r\n <div className=\"lineLabel\">\r\n Contract Balance{' '}\r\n <LightTooltip\r\n arrow\r\n placement=\"top\"\r\n enterDelay={0}\r\n title=\"Amount of Token left in the Contract\"\r\n >\r\n <InfoIcon style={{verticalAlign: 'text-bottom', fontSize: '17px'}} />\r\n </LightTooltip>\r\n </div>\r\n <div className=\"lineValue\">\r\n {pressBalance\r\n ? (Number(pressBalance) / 1e18).toLocaleString('en-US', {maximumFractionDigits: 2})\r\n : '0.00'}{' '}\r\n <span className=\"wallet-token-value\">\r\n {' '}\r\n ($\r\n {pressBalance && pressUserInfo\r\n ? (\r\n (Number(pressBalance) / 1e18) *\r\n Number(pressUserInfo.depositTokenPrice)\r\n ).toLocaleString('en-US', {maximumFractionDigits: 2})\r\n : '0.00'}\r\n )\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </Grid>\r\n <Grid item xs={6} md={3}>\r\n <div className=\"statBox\">\r\n <div className=\"statBoxInner\">\r\n <div className=\"lineLabel\">\r\n Remaining Shares | Tokens{' '}\r\n <LightTooltip\r\n arrow\r\n placement=\"top\"\r\n enterDelay={0}\r\n title=\"Your Remaining shares in the pool. Reaching 0 kicks you out of the Press\"\r\n >\r\n <InfoIcon style={{verticalAlign: 'text-bottom', fontSize: '17px'}} />\r\n </LightTooltip>\r\n </div>\r\n <div className=\"lineValue\">\r\n {pressUserInfo\r\n ? `${pressUserInfo.currentShares.toFixed(2)} | ${pressUserInfo.currentSharesInToken.toFixed(\r\n 2,\r\n )} LP`\r\n : '0.00'}{' '}\r\n <span className=\"wallet-token-value\">\r\n {' '}\r\n ($\r\n {pressUserInfo\r\n ? (\r\n Number(pressUserInfo.currentSharesInToken) * Number(pressUserInfo.depositTokenPrice)\r\n ).toLocaleString('en-US', {maximumFractionDigits: 2})\r\n : '0.00'}\r\n )\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </Grid>\r\n <Grid item xs={6} md={3}>\r\n <div className=\"statBox\">\r\n <div className=\"statBoxInner\">\r\n <div className=\"lineLabel\">\r\n Pending Shares | Tokens{' '}\r\n <LightTooltip\r\n arrow\r\n placement=\"top\"\r\n enterDelay={0}\r\n title=\"Compounding allows you to have a greater return than your initial.\"\r\n >\r\n <InfoIcon style={{verticalAlign: 'text-bottom', fontSize: '17px'}} />\r\n </LightTooltip>\r\n </div>\r\n <div className=\"lineValue\">\r\n {pressUserInfo\r\n ? `${pressUserInfo.pendingShares.toFixed(2)} | ${pressUserInfo.pendingSharesInToken.toFixed(\r\n 2,\r\n )} LP`\r\n : '0.00'}{' '}\r\n <span className=\"wallet-token-value\">\r\n {' '}\r\n ($\r\n {pressUserInfo\r\n ? (\r\n Number(pressUserInfo.pendingSharesInToken) * Number(pressUserInfo.depositTokenPrice)\r\n ).toLocaleString('en-US', {maximumFractionDigits: 2})\r\n : '0.00'}\r\n )\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </Grid>\r\n <Grid item xs={6} md={3}>\r\n <div className=\"statBox\">\r\n <div className=\"statBoxInner\">\r\n <div className=\"lineLabel\">\r\n Claimed Shares{' '}\r\n <LightTooltip\r\n arrow\r\n placement=\"top\"\r\n enterDelay={0}\r\n title=\"Total Shares claimed so far. (Total Share Balance - Current Share Balance)\"\r\n >\r\n <InfoIcon style={{verticalAlign: 'text-bottom', fontSize: '17px'}} />\r\n </LightTooltip>\r\n </div>\r\n <div className=\"lineValue\">\r\n {pressUserInfo ? pressUserInfo.claimedInShares.toFixed(2) : '0.00'}\r\n </div>\r\n </div>\r\n </div>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n <Grid item>\r\n <Grid container spacing={5}>\r\n <Grid item xs={12} sm={12} md={6}>\r\n <Box className=\"lineDetailsBox\">\r\n <div className=\"press-line-details-inner\">\r\n <Box>\r\n <div className=\"pending-rewards\">DEPOSIT IN {bank.name}</div>\r\n </Box>\r\n <Box mt={2}>\r\n <FormControl>\r\n <RadioGroup\r\n row\r\n aria-labelledby=\"row-radio-buttons-group-label\"\r\n name=\"row-radio-buttons-group\"\r\n value={payWith}\r\n onChange={handlePayWithChange}\r\n >\r\n <FormControlLabel\r\n value={bank.depositTokenName}\r\n control={<Radio />}\r\n label={bank.depositTokenName}\r\n />\r\n\r\n <FormControlLabel value=\"MIM\" control={<Radio />} label=\"MIM\" />\r\n </RadioGroup>\r\n </FormControl>\r\n </Box>\r\n <div className=\"node-inputDetailsBox\">\r\n <Box className=\"box-price-of-one color-secondary\">\r\n 1 share = {pressUserInfo ? pressUserInfo.priceOfOneShare.toFixed(2) : '0.00'}{' '}\r\n {bank.depositTokenName} = $\r\n {pressUserInfo\r\n ? (pressUserInfo.priceOfOneShare * pressUserInfo.depositTokenPrice).toFixed(3)\r\n : '0.000'}\r\n </Box>\r\n <div className=\"inputDetailsBoxInner\">\r\n <Grid container justifyContent=\"space-between\" alignItems=\"center\" wrap=\"nowrap\">\r\n <Grid item xs={10} md={11}>\r\n <input\r\n type=\"number\"\r\n placeholder=\"Enter amount\"\r\n className=\"amount-input\"\r\n value={inputValue}\r\n onChange={updateInput}\r\n />\r\n </Grid>\r\n <Grid item xs={2} md={1} className=\"color-secondary\">\r\n <div onClick={maxClicked} className=\"max-button\">\r\n MAX\r\n </div>\r\n </Grid>\r\n </Grid>\r\n <div className=\"balance\">\r\n <span>\r\n Wallet:{' '}\r\n {getFullDisplayBalance(payWith === 'MIM' ? mimTokenBalance : depositTokenBalance, 18)}{' '}\r\n {payWith}\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n <Box mt={2}>\r\n <a\r\n style={{textDecoration: 'none'}}\r\n rel=\"noopener noreferrer\"\r\n target=\"_blank\"\r\n href=\"https://winemaker.grapefinance.app/\"\r\n >\r\n <div className=\"addRemoveLiquidity color-secondary\">Farm Vintage for sVintage</div>\r\n </a>\r\n </Box>\r\n </div>\r\n <Box mt={2}>\r\n <Grid container justifyContent=\"center\">\r\n <Grid item xs={12}>\r\n {showApprove() ? (\r\n <button\r\n onClick={() => {\r\n setApproveLoading(true);\r\n approve();\r\n }}\r\n className=\"primary-button\"\r\n title=\"Approve\"\r\n style={{borderTopLeftRadius: '0', borderTopRightRadius: '0'}}\r\n >\r\n {approveLoading ? (\r\n <span>\r\n <SyncLoader color=\"white\" size={4} style={{marginRight: '10px'}} />\r\n APPROVING\r\n </span>\r\n ) : (\r\n <span>APPROVE</span>\r\n )}\r\n </button>\r\n ) : (\r\n <button\r\n disabled={Number(inputValue) === 0}\r\n onClick={stake}\r\n className=\"primary-button\"\r\n title=\"Create Nodes\"\r\n style={{borderTopLeftRadius: '0', borderTopRightRadius: '0'}}\r\n >\r\n {depositingLoading ? (\r\n <span>\r\n <SyncLoader color=\"white\" size={4} style={{marginRight: '10px'}} />\r\n DEPOSITING\r\n </span>\r\n ) : (\r\n <span>DEPOSIT</span>\r\n )}\r\n </button>\r\n )}\r\n </Grid>\r\n </Grid>\r\n </Box>\r\n </Box>\r\n </Grid>\r\n <Grid item xs={12} sm={12} md={6}>\r\n <Box className=\"lineDetailsBox\">\r\n <div className=\"press-line-details-inner\">\r\n <Box>\r\n <div className=\"pending-rewards\">PENDING {bank.earnTokenName} REWARDS</div>\r\n </Box>\r\n <Box style={{textAlign: 'center'}} mt={2}>\r\n <TokenSymbol symbol={bank.earnTokenName} width={59} height={59} />\r\n </Box>\r\n <Box mt={2}>\r\n <Grid\r\n container\r\n direction=\"column\"\r\n spacing={0}\r\n justifyContent=\"center\"\r\n alignContent=\"center\"\r\n alignItems=\"center\"\r\n >\r\n <Grid item className=\"rewardTokenAmount\">\r\n {pressUserInfo ? pressUserInfo.totalClaimable.toFixed(2) : '0.00'} {bank.earnTokenName}\r\n </Grid>\r\n <Grid item className=\"rewardTokenValue\">\r\n $\r\n {pressUserInfo\r\n ? (pressUserInfo.totalClaimable * Number(pressUserInfo.depositTokenPrice)).toFixed(2)\r\n : '0.00'}\r\n </Grid>\r\n </Grid>\r\n </Box>\r\n </div>\r\n <Box mt={2}>\r\n <Grid container justifyContent=\"center\">\r\n <Grid item xs={6}>\r\n <button\r\n className=\"primary-button\"\r\n title=\"Compound\"\r\n onClick={() => {\r\n setCompoundLoading(true);\r\n onCompound();\r\n }}\r\n disabled={!pressUserInfo || (pressUserInfo && pressUserInfo.totalClaimable <= 0)}\r\n style={{\r\n borderTopLeftRadius: '0',\r\n borderTopRightRadius: '0',\r\n borderBottomRightRadius: '0',\r\n }}\r\n >\r\n {compoundLoading ? (\r\n <span>\r\n <SyncLoader color=\"white\" size={4} style={{marginRight: '10px'}} />\r\n COMPOUNDING\r\n </span>\r\n ) : (\r\n <span>COMPOUND</span>\r\n )}\r\n </button>\r\n </Grid>\r\n <Grid item xs={6}>\r\n <button\r\n style={{borderTopLeftRadius: '0', borderTopRightRadius: '0', borderBottomLeftRadius: '0'}}\r\n className=\"secondary-button\"\r\n title=\"Claim\"\r\n onClick={() => {\r\n setClaimLoading(true);\r\n onClaim();\r\n }}\r\n disabled={!pressUserInfo || (pressUserInfo && pressUserInfo.totalClaimable <= 0)}\r\n >\r\n {claimLoading ? (\r\n <span>\r\n <SyncLoader color=\"white\" size={4} style={{marginRight: '10px'}} />\r\n CLAIMING\r\n </span>\r\n ) : (\r\n <span>CLAIM</span>\r\n )}\r\n </button>\r\n </Grid>\r\n </Grid>\r\n </Box>\r\n </Box>\r\n </Grid>\r\n <Grid item xs={12} md={6}>\r\n <Box className=\"lineDetailsBox\">\r\n <div className=\"press-line-details-inner\">\r\n <Box>\r\n <div className=\"pending-rewards\">{bank.name} LOTTERY</div>\r\n </Box>\r\n <Box mt={2}>\r\n <Grid container direction=\"column\" spacing={1}>\r\n <Grid item xs={12}>\r\n <Grid container justifyContent=\"space-between\">\r\n <Grid item>Daily Top Deposit</Grid>\r\n <Grid item>\r\n {pressLottoInfo ? pressLottoInfo.largestDaily.toFixed(2) : '0.00'} sVintage\r\n <span className=\"wallet-token-value\">\r\n {' '}\r\n $\r\n {pressLottoInfo && pressUserInfo\r\n ? (pressLottoInfo.largestDaily * Number(pressUserInfo.depositTokenPrice)).toFixed(\r\n 2,\r\n )\r\n : '0.00'}\r\n </span>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n <Grid item xs={12}>\r\n <Grid container justifyContent=\"space-between\">\r\n <Grid item>Daily Deposit Pot</Grid>\r\n <Grid item>\r\n {pressLottoInfo ? pressLottoInfo.dailyDepositPot.toFixed(2) : '0.00'} sVintage\r\n <span className=\"wallet-token-value\">\r\n {' '}\r\n $\r\n {pressLottoInfo && pressUserInfo\r\n ? (\r\n pressLottoInfo.dailyDepositPot * Number(pressUserInfo.depositTokenPrice)\r\n ).toFixed(2)\r\n : '0.00'}\r\n </span>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n <Grid item xs={12}>\r\n <Grid container justifyContent=\"space-between\">\r\n <Grid item>Largest Deposit Pot</Grid>\r\n <Grid item>\r\n {pressLottoInfo ? pressLottoInfo.largestDailyPot.toFixed(2) : '0.00'} sVintage\r\n <span className=\"wallet-token-value\">\r\n {' '}\r\n $\r\n {pressLottoInfo && pressUserInfo\r\n ? (\r\n pressLottoInfo.largestDailyPot * Number(pressUserInfo.depositTokenPrice)\r\n ).toFixed(2)\r\n : '0.00'}\r\n </span>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n <Grid item xs={12}>\r\n <Grid container justifyContent=\"space-between\">\r\n <Grid item>Next Winner Drawing</Grid>\r\n <Grid item>\r\n {displayRemainingTime && (\r\n <ProgressCountdown\r\n description=\"Next Drawing\"\r\n base={moment().toDate()}\r\n hideBar={true}\r\n deadline={displayRemainingTime}\r\n />\r\n )}\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n <Grid item xs={12}>\r\n <Grid container justifyContent=\"space-between\">\r\n <Grid item>Lotto Tickets</Grid>\r\n <Grid item>\r\n {pressLottoInfo\r\n ? `${pressLottoInfo.lottoTickets} / ${pressLottoInfo.totalLottoTickets}`\r\n : '0 / 0'}{' '}\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n <Grid item xs={12}>\r\n <Grid container justifyContent=\"space-between\">\r\n <Grid item>\r\n <div>Your Lotto Winnings</div>\r\n <div className=\"color-secondary\" style={{fontSize: '12px'}}>\r\n Your winnings are sent to you automatically\r\n </div>\r\n </Grid>\r\n <Grid item>{pressLottoInfo ? pressLottoInfo.lottoWinnings : '0'} LP</Grid>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n </Box>\r\n </div>\r\n <Box mt={2}>\r\n <Grid container justifyContent=\"center\">\r\n <Grid item xs={12}>\r\n {grapeTokenApprove.approveStatus !== ApprovalState.APPROVED ? (\r\n <>\r\n <span style={{paddingLeft: '35px', paddingRight: '35px'}}>\r\n {' '}\r\n Burn Grape for Tickets (1 Grape each)\r\n </span>\r\n <button\r\n className=\"primary-button\"\r\n title=\"Approve\"\r\n onClick={grapeTokenApprove.approve}\r\n style={{\r\n marginTop: '15px',\r\n borderTopLeftRadius: '0',\r\n borderTopRightRadius: '0',\r\n }}\r\n >\r\n Approve\r\n </button>\r\n </>\r\n ) : (\r\n <>\r\n <Grid container style={{paddingLeft: '35px', paddingRight: '35px'}}>\r\n <Grid item xs={12}>\r\n Burn batches of {GRAPE_PER_BATCH} Grape in exchange for 10 Lotto tickets\r\n </Grid>\r\n <Grid item xs={12}>\r\n <div className=\"inputDetailsBoxInner\">\r\n <Grid container justifyContent=\"space-between\" alignItems=\"center\" wrap=\"nowrap\">\r\n <Grid item xs={10} md={11}>\r\n <input\r\n type=\"number\"\r\n placeholder=\"Number of batches\"\r\n className=\"amount-input\"\r\n value={batchAmount}\r\n onChange={handleBatchAmountChanged}\r\n />\r\n </Grid>\r\n <Grid item xs={2} md={1} className=\"color-secondary\">\r\n <div onClick={maxBatchClicked} className=\"max-button\">\r\n MAX\r\n </div>\r\n </Grid>\r\n </Grid>{' '}\r\n <div className=\"balance\">\r\n <span>Wallet: {getFullDisplayBalance(grapeTokenBalance, 18)} GRAPE</span>\r\n </div>\r\n </div>\r\n </Grid>\r\n </Grid>\r\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-2 mt-2\">\r\n <button\r\n className=\"primary-button\"\r\n title=\"Buy \"\r\n onClick={burn}\r\n disabled={\r\n Number(batchAmount) <= 0 ||\r\n Number(batchAmount) > Number(grapeTokenBalance) / 1e18 / 10\r\n }\r\n style={{\r\n marginTop: '15px',\r\n borderTopLeftRadius: '0',\r\n borderTopRightRadius: '0',\r\n }}\r\n >\r\n Burn {numGrapeToBurn} GRAPE\r\n </button>\r\n </div>\r\n </>\r\n )}\r\n </Grid>\r\n </Grid>\r\n </Box>\r\n </Box>\r\n </Grid>\r\n <Grid item xs={12} sm={12} md={6}>\r\n <Box className=\"lineDetailsBox\">\r\n <div className=\"press-line-details-inner\">\r\n <Box>\r\n <div className=\"pending-rewards\">{bank.earnTokenName} ASSASSINATION</div>\r\n </Box>\r\n\r\n <Box mt={2}>\r\n <Grid container justifyContent=\"space-between\">\r\n <Grid item>Your Assassination Profits</Grid>\r\n <Grid item>\r\n {pressUserInfo ? pressUserInfo.profitsAssassinated.toFixed(2) : '0.00'}{' '}\r\n {bank.depositTokenName}\r\n <span className=\"wallet-token-value\">\r\n {' '}\r\n $\r\n {pressUserInfo\r\n ? (\r\n pressUserInfo.profitsAssassinated * Number(pressUserInfo.depositTokenPrice)\r\n ).toFixed(2)\r\n : '0.00'}\r\n </span>\r\n </Grid>\r\n </Grid>\r\n </Box>\r\n\r\n <Box mt={3}>\r\n <div className=\"pending-rewards\">USERS NEAR ASSASSINATION (95%)</div>\r\n {usersNearAssassination && usersNearAssassination.length > 0 ? (\r\n <Grid\r\n container\r\n direction=\"column\"\r\n spacing={1}\r\n style={{marginTop: '20px', paddingBottom: '20px'}}\r\n >\r\n {usersNearAssassination.map((user) => (\r\n <Grid item xs={12}>\r\n <Grid container justifyContent=\"space-between\" alignItems=\"center\">\r\n <Grid item>{shortenAddress(user)}</Grid>\r\n <Grid item>\r\n <button\r\n onClick={() => assassinate(user)}\r\n className=\"primary-button\"\r\n style={{height: '35px'}}\r\n >\r\n Assassinate\r\n </button>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n ))}\r\n </Grid>\r\n ) : (\r\n <div className=\"color-secondary\" style={{marginTop: '20px'}}>\r\n No users near assassination\r\n </div>\r\n )}\r\n </Box>\r\n </div>\r\n </Box>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n </AccordionDetails>\r\n </Accordion>\r\n )}\r\n </>\r\n );\r\n};\r\n\r\nexport default SolerapressCard;\r\n","C:\\Users\\CR\\Documents\\front-end\\src\\views\\Dashboard\\FarmCard.tsx",[],"C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useWithdrawFromBoardroom.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\boardroom\\useUnstakeTimerBoardroom.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useStakeToBoardroom.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\components\\TokenSymbol\\TokenSymbol.tsx",[],"C:\\Users\\CR\\Documents\\front-end\\src\\grape-finance\\GrapeFinance.ts",["1045","1046","1047","1048","1049","1050","1051","1052","1053","1054","1055"],"C:\\Users\\CR\\Documents\\front-end\\src\\components\\LaunchCountdown\\LaunchCountdown.tsx",[],"C:\\Users\\CR\\Documents\\front-end\\src\\components\\UnlockWallet\\UnlockWallet.tsx",[],"C:\\Users\\CR\\Documents\\front-end\\src\\components\\Label\\index.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\components\\CardContent\\index.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useAllowance.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useHandleTransactionReceipt.ts",["1056"],"import {useCallback} from 'react';\r\nimport {JsonRpcProvider, TransactionResponse} from '@ethersproject/providers';\r\nimport {useTransactionAdder} from '../state/transactions/hooks';\r\nimport {useAddPopup} from '../state/application/hooks';\r\nimport {publish} from '../state/txEvent';\r\n\r\nfunction useHandleTransactionReceipt(): (promise: Promise<TransactionResponse>, summary: string) => void {\r\n const addTransaction = useTransactionAdder();\r\n const addPopup = useAddPopup();\r\n\r\n return useCallback(\r\n (promise: Promise<TransactionResponse>, summary: string) => {\r\n promise\r\n .then((tx) => {\r\n addTransaction(tx, {summary});\r\n })\r\n .catch((err) => {\r\n if (err.message.includes('User denied')) {\r\n const message = `User Denied`;\r\n addPopup({error: {message, stack: err.message || err.stack}});\r\n publish('failedTx');\r\n return;\r\n }\r\n const message = `Unable to ${summary[0].toLowerCase()}${summary.slice(1)}`;\r\n console.error(`${message}: ${err.message || err.stack}`);\r\n addPopup({error: {message, stack: err.message || err.stack}});\r\n publish('failedTx');\r\n });\r\n },\r\n [addPopup, addTransaction],\r\n );\r\n}\r\n\r\nexport default useHandleTransactionReceipt;\r\n","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useGetBurntGrape.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\usePegPoolRewardsClaim.ts",["1057"],"import { useCallback } from 'react';\r\nimport useBombFinance from './useGrapeFinance';\r\nimport useHandleTransactionReceipt from './useHandleTransactionReceipt';\r\nimport usePegPool from './usePegPool';\r\n\r\nconst usePegPoolRewardsClaim = () => {\r\n const bombFinance = useBombFinance();\r\n const handleTransactionReceipt = useHandleTransactionReceipt();\r\n const { refreshPool } = usePegPool();\r\n\r\n const handleReward = useCallback(() => {\r\n handleTransactionReceipt(\r\n bombFinance.claimPegPool().then(async (tx) => {\r\n await refreshPool();\r\n return tx;\r\n }),\r\n ` Claim rewards from Peg Pool `,\r\n );\r\n }, [bombFinance, handleTransactionReceipt]);\r\n\r\n return { doClaim: handleReward };\r\n};\r\n\r\nexport default usePegPoolRewardsClaim;\r\n","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\usePegPoolCompound.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useSolerapressUserInfo.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useBurnGrapePress.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useAssassinatePress.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useStatsForPool.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useWithdraw.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useZap.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useStakedTokenPriceInDollars.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useStake.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\utils\\formatBalance.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useStakedBalance.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useEarnings.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useHarvest.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useGetPressUsersNearAssassination.ts",["1058","1059"],"import {useEffect, useState} from 'react';\r\nimport useGrapeFinance from './useGrapeFinance';\r\nimport {PressUserInfo} from '../grape-finance/types';\r\nimport useRefresh from './useRefresh';\r\n\r\nconst useGetPressUsersNearAssassination = (press: string) => {\r\n const [users, setUsers] = useState<string[]>();\r\n const {slowRefresh} = useRefresh();\r\n const grapeFinance = useGrapeFinance();\r\n\r\n useEffect(() => {\r\n async function fetchUsers() {\r\n try {\r\n if (grapeFinance.myAccount) {\r\n setUsers(await grapeFinance.getAllUsersNearAssassination(press));\r\n }\r\n } catch (err) {\r\n console.error(err);\r\n }\r\n }\r\n fetchUsers();\r\n }, [setUsers, grapeFinance, slowRefresh, grapeFinance.myAccount]);\r\n\r\n return users;\r\n};\r\n\r\nexport default useGetPressUsersNearAssassination;\r\n","C:\\Users\\CR\\Documents\\front-end\\src\\views\\Bank\\components\\ZapModal.tsx",["1060","1061","1062","1063","1064","1065","1066","1067","1068","1069","1070","1071","1072","1073","1074"],"import React, {useState, useMemo} from 'react';\r\n\r\nimport {Button, Select, MenuItem, InputLabel, withStyles} from '@material-ui/core';\r\n// import Button from '../../../components/Button'\r\nimport Modal, {ModalProps} from '../../../components/Modal';\r\nimport ModalActions from '../../../components/ModalActions';\r\nimport ModalTitle from '../../../components/ModalTitle';\r\nimport TokenInput from '../../../components/TokenInput';\r\nimport styled from 'styled-components';\r\n\r\nimport {getDisplayBalance} from '../../../utils/formatBalance';\r\nimport Label from '../../../components/Label';\r\nimport useLpStats from '../../../hooks/useLpStats';\r\nimport useTokenBalance from '../../../hooks/useTokenBalance';\r\nimport useGrapeFinance from '../../../hooks/useGrapeFinance';\r\nimport useApproveZapper, {ApprovalState} from '../../../hooks/useApproveZapper';\r\nimport {GRAPE_TICKER, WINE_TICKER, MIM_TICKER} from '../../../utils/constants';\r\nimport {Alert} from '@material-ui/lab';\r\n\r\ninterface ZapProps extends ModalProps {\r\n onConfirm: (zapAsset: string, lpName: string, amount: string) => void;\r\n LPtokenName?: string;\r\n decimals?: number;\r\n}\r\n\r\nconst ZapModal: React.FC<ZapProps> = ({onConfirm, onDismiss, LPtokenName = '', decimals = 18}) => {\r\n const grapeFinance = useGrapeFinance();\r\n //const {balance} = useWallet();\r\n\r\n const grapeBalance = useTokenBalance(grapeFinance.GRAPE);\r\n const wineBalance = useTokenBalance(grapeFinance.WINE);\r\n const mimBalance = useTokenBalance(grapeFinance.MIM);\r\n\r\n let [showZapData, setShowZapData] = useState(false);\r\n //const avaxDisplayBalance = (Number(balance) / 1e18).toFixed(4).toString();\r\n\r\n const [val, setVal] = useState('');\r\n // The token to be swapped from.\r\n const [zappingToken, setZappingToken] = useState(MIM_TICKER);\r\n const [zappingTokenBalance, setZappingTokenBalance] = useState(getDisplayBalance(mimBalance, decimals));\r\n const [estimate, setEstimate] = useState({token0: '0', token1: '0'});\r\n const [approveZapperStatus, approveZapper] = useApproveZapper(zappingToken);\r\n const grapemimLpStats = useLpStats('GRAPE-MIM-LP');\r\n const wineSharemimLpStats = useLpStats('WINE-MIM-LP');\r\n const grapeLPStats = useMemo(() => (grapemimLpStats ? grapemimLpStats : null), [grapemimLpStats]);\r\n const wineLPStats = useMemo(() => (wineSharemimLpStats ? wineSharemimLpStats : null), [wineSharemimLpStats]);\r\n const mimAmountPerLP = LPtokenName.startsWith(GRAPE_TICKER) ? grapeLPStats?.mimAmount : wineLPStats?.mimAmount;\r\n /**\r\n * Checks if a value is a valid number or not\r\n * @param n is the value to be evaluated for a number\r\n * @returns\r\n */\r\n function isNumeric(n: any) {\r\n return !isNaN(parseFloat(n)) && isFinite(n);\r\n }\r\n const handleChangeAsset = (event: any) => {\r\n const value = event.target.value;\r\n if (value == 'NONE') {\r\n setShowZapData(false);\r\n } else {\r\n setVal('0');\r\n setEstimate({token0: '0', token1: '0'});\r\n setZappingToken(value);\r\n setZappingTokenBalance(getDisplayBalance(mimBalance, decimals));\r\n if (event.target.value === WINE_TICKER) {\r\n setZappingTokenBalance(getDisplayBalance(wineBalance, decimals));\r\n }\r\n if (event.target.value === GRAPE_TICKER) {\r\n setZappingTokenBalance(getDisplayBalance(grapeBalance, decimals));\r\n }\r\n if (event.target.value === MIM_TICKER) {\r\n setZappingTokenBalance(getDisplayBalance(mimBalance, decimals));\r\n }\r\n setShowZapData(true);\r\n }\r\n };\r\n\r\n const handleChange = async (e: any) => {\r\n // the - is to stop negatives\r\n if (!isNumeric(e.currentTarget.value) || e.currentTarget.value.includes('-')) return;\r\n if (e.currentTarget.value === '' || Number(e.currentTarget.value) == 0) {\r\n setVal(e.currentTarget.value);\r\n setEstimate({token0: '0', token1: '0'});\r\n } else {\r\n setVal(e.currentTarget.value);\r\n const estimateZap = await grapeFinance.estimateZapIn(\r\n zappingToken,\r\n LPtokenName,\r\n String(e.currentTarget.value).trim(),\r\n );\r\n\r\n setEstimate({token0: estimateZap.amounts[0], token1: estimateZap.amounts[1]});\r\n }\r\n };\r\n\r\n const handleSelectMax = async () => {\r\n setVal(zappingTokenBalance);\r\n const estimateZap = await grapeFinance.estimateZapIn(zappingToken, LPtokenName, String(zappingTokenBalance));\r\n setEstimate({token0: estimateZap.amounts[0].toString(), token1: estimateZap.amounts[1].toString()});\r\n };\r\n\r\n function getOrderLPName(lpName: string): string[] {\r\n if (lpName.includes('GRAPE-MIM-LP')) return [GRAPE_TICKER, MIM_TICKER];\r\n if (lpName.includes('WINE-MIM-LP')) return [WINE_TICKER, MIM_TICKER];\r\n if (lpName.includes('GRAPE-WINE-LP')) return [GRAPE_TICKER, WINE_TICKER];\r\n return;\r\n }\r\n\r\n function getOrderLPBalanceThing(token0: string, token1: string): string[] {\r\n if (token0 == WINE_TICKER) return [token0, token1];\r\n if (token0 == GRAPE_TICKER) return [token0, token1];\r\n if (token0 == MIM_TICKER) return [token1, token0];\r\n return;\r\n }\r\n\r\n function normalizeOrder(token0: string, tokenAmount0: string, tokenAmount1: string) {\r\n if (token0 == WINE_TICKER) return [tokenAmount0, tokenAmount1];\r\n if (token0 == GRAPE_TICKER) return [tokenAmount0, tokenAmount1];\r\n if (token0 == MIM_TICKER) return [tokenAmount1, tokenAmount0];\r\n return;\r\n }\r\n\r\n let [token0Name, token1Name] = getOrderLPName(LPtokenName);\r\n let [tokenA, tokenB] = getOrderLPBalanceThing(token0Name, token1Name);\r\n return (\r\n <Modal>\r\n <ModalTitle text={`Zap in ${LPtokenName}`} />\r\n\r\n <StyledActionSpacer />\r\n <InputLabel style={{color: '#fff'}} id=\"label\">\r\n Select asset to zap with\r\n </InputLabel>\r\n <Select\r\n onChange={handleChangeAsset}\r\n style={{color: '#fff'}}\r\n labelId=\"label\"\r\n id=\"select\"\r\n value={showZapData ? zappingToken : 'NONE'}\r\n >\r\n <StyledMenuItem value=\"NONE\">Choose asset</StyledMenuItem>\r\n {LPtokenName.includes(MIM_TICKER) && <StyledMenuItem value={MIM_TICKER}>MIM</StyledMenuItem>}\r\n {LPtokenName.includes(WINE_TICKER) && <StyledMenuItem value={WINE_TICKER}>WINE</StyledMenuItem>}\r\n {/*LPtokenName.includes(GRAPE_TICKER) && <StyledMenuItem value={GRAPE_TICKER}>GRAPE</StyledMenuItem>*/}\r\n </Select>\r\n {showZapData && (\r\n <>\r\n <TokenInput\r\n onSelectMax={handleSelectMax}\r\n onChange={handleChange}\r\n value={val}\r\n max={zappingTokenBalance}\r\n symbol={zappingToken}\r\n />\r\n {/*<Label text=\"Zap Estimations\" />\r\n <StyledDescriptionText>\r\n {' '}\r\n {LPtokenName} tokens: {Number(estimate.token0) / Number(mimAmountPerLP)}\r\n </StyledDescriptionText>*/}\r\n {/*<StyledDescriptionText>\r\n (\r\n {Number(normalizeOrder(zappingToken, estimate.token0, estimate.token1)[0])} {tokenA} /{' '}\r\n {Number(normalizeOrder(zappingToken, estimate.token0, estimate.token1)[1])} {tokenB}){' '}\r\n </StyledDescriptionText>*/}\r\n <ModalActions>\r\n <Button\r\n color=\"primary\"\r\n variant=\"contained\"\r\n onClick={() =>\r\n approveZapperStatus !== ApprovalState.APPROVED\r\n ? approveZapper()\r\n : onConfirm(zappingToken, LPtokenName, val)\r\n }\r\n >\r\n {approveZapperStatus !== ApprovalState.APPROVED ? 'Approve' : 'Zap'}\r\n </Button>\r\n </ModalActions>\r\n </>\r\n )}\r\n\r\n <StyledActionSpacer />\r\n <Alert variant=\"filled\" severity=\"info\">\r\n You need to manually stake the LP tokens after zapping. Maximum slippage is 1%.{' '}\r\n </Alert>\r\n </Modal>\r\n );\r\n};\r\n\r\nconst StyledActionSpacer = styled.div`\r\n height: ${(props) => props.theme.spacing[4]}px;\r\n width: ${(props) => props.theme.spacing[4]}px;\r\n`;\r\n\r\nconst StyledDescriptionText = styled.div`\r\n align-items: center;\r\n color: ${(props) => props.theme.color.grey[400]};\r\n display: flex;\r\n font-size: 14px;\r\n font-weight: 700;\r\n height: 22px;\r\n justify-content: flex-start;\r\n`;\r\nconst StyledMenuItem = withStyles({\r\n root: {\r\n backgroundColor: 'white',\r\n color: '#2c2560',\r\n '&:hover': {\r\n backgroundColor: 'grey',\r\n color: '#2c2560',\r\n },\r\n selected: {\r\n backgroundColor: 'black',\r\n },\r\n },\r\n})(MenuItem);\r\n\r\nexport default ZapModal;\r\n","C:\\Users\\CR\\Documents\\front-end\\src\\grape-finance\\ERC20.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\views\\GrapeNode\\components\\ClaimModal.jsx",[],"C:\\Users\\CR\\Documents\\front-end\\src\\components\\CardContent\\CardContent.tsx",[],"C:\\Users\\CR\\Documents\\front-end\\src\\components\\Label\\Label.tsx",[],"C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useApproveZapper.ts",["1075"],"import {BigNumber, ethers} from 'ethers';\r\nimport {useCallback, useMemo} from 'react';\r\nimport {useHasPendingApproval, useTransactionAdder} from '../state/transactions/hooks';\r\nimport useAllowance from './useAllowance';\r\nimport ERC20 from '../grape-finance/ERC20';\r\nimport {GRAPE_TICKER, WINE_TICKER, MIM_TICKER, ZAPPER_ROUTER_ADDR} from '../utils/constants';\r\nimport useGrapeFinance from './useGrapeFinance';\r\n\r\nconst APPROVE_AMOUNT = ethers.constants.MaxUint256;\r\nconst APPROVE_BASE_AMOUNT = BigNumber.from('1000000000000000000000000');\r\n\r\nexport enum ApprovalState {\r\n UNKNOWN,\r\n NOT_APPROVED,\r\n PENDING,\r\n APPROVED,\r\n}\r\n\r\n// returns a variable indicating the state of the approval and a function which approves if necessary or early returns\r\nfunction useApproveZapper(zappingToken: string): [ApprovalState, () => Promise<void>] {\r\n const grapeFinance = useGrapeFinance();\r\n let token: ERC20;\r\n\r\n if (zappingToken === GRAPE_TICKER) token = grapeFinance.GRAPE;\r\n else if (zappingToken === WINE_TICKER) token = grapeFinance.WINE;\r\n else if (zappingToken === MIM_TICKER) token = grapeFinance.externalTokens[MIM_TICKER];\r\n const pendingApproval = useHasPendingApproval(token.address, ZAPPER_ROUTER_ADDR);\r\n const currentAllowance = useAllowance(token, ZAPPER_ROUTER_ADDR, pendingApproval);\r\n\r\n // check the current approval status\r\n const approvalState: ApprovalState = useMemo(() => {\r\n // we might not have enough data to know whether or not we need to approve\r\n if (!currentAllowance) return ApprovalState.UNKNOWN;\r\n\r\n // amountToApprove will be defined if currentAllowance is\r\n return currentAllowance.lt(APPROVE_BASE_AMOUNT)\r\n ? pendingApproval\r\n ? ApprovalState.PENDING\r\n : ApprovalState.NOT_APPROVED\r\n : ApprovalState.APPROVED;\r\n }, [currentAllowance, pendingApproval, token, grapeFinance]);\r\n\r\n const addTransaction = useTransactionAdder();\r\n\r\n const approve = useCallback(async (): Promise<void> => {\r\n if (approvalState !== ApprovalState.NOT_APPROVED) {\r\n console.error('approve was called unnecessarily');\r\n return;\r\n }\r\n\r\n const response = await token.approve(ZAPPER_ROUTER_ADDR, APPROVE_AMOUNT);\r\n addTransaction(response, {\r\n summary: `Approve ${token.symbol}`,\r\n approval: {\r\n tokenAddress: token.address,\r\n spender: ZAPPER_ROUTER_ADDR,\r\n },\r\n });\r\n }, [approvalState, token, addTransaction]);\r\n\r\n return [approvalState, approve];\r\n}\r\n\r\nexport default useApproveZapper;\r\n","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useGrapeNodeClaimFee.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useENS.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\components\\WalletProviderModal\\index.js",[],"C:\\Users\\CR\\Documents\\front-end\\src\\components\\WalletProviderModal\\WalletProviderModal.js",[],"C:\\Users\\CR\\Documents\\front-end\\src\\components\\ModalTitle\\index.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\components\\WalletProviderModal\\WalletCard.js",[],"C:\\Users\\CR\\Documents\\front-end\\src\\components\\ModalTitle\\ModalTitle.tsx",[],"C:\\Users\\CR\\Documents\\front-end\\src\\components\\Modal\\index.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\components\\ModalActions\\index.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\usePoolBalance.ts",["1076"],"import {useCallback, useEffect, useState} from 'react';\r\nimport {BigNumber} from 'ethers';\r\nimport ERC20 from '../grape-finance/ERC20';\r\nimport useGrapeFinance from './useGrapeFinance';\r\nimport config from '../config';\r\n\r\nconst usePoolBalance = (token: ERC20, poolAddress: string) => {\r\n const [balance, setBalance] = useState(BigNumber.from(0));\r\n const grapeFinance = useGrapeFinance();\r\n const isUnlocked = grapeFinance?.isUnlocked;\r\n\r\n const fetchBalance = useCallback(async () => {\r\n setBalance(await token.balanceOf(poolAddress));\r\n }, [token, grapeFinance.myAccount]);\r\n\r\n useEffect(() => {\r\n if (isUnlocked) {\r\n fetchBalance().catch((err) => console.error(`Failed to fetch token balance: ${err.stack}`));\r\n let refreshInterval = setInterval(fetchBalance, config.refreshInterval);\r\n return () => clearInterval(refreshInterval);\r\n }\r\n }, [isUnlocked, token, fetchBalance, grapeFinance]);\r\n\r\n return balance;\r\n};\r\n\r\nexport default usePoolBalance;\r\n","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useZapStakePress.ts",["1077"],"import {useCallback} from 'react';\r\nimport useGrapeFinance from './useGrapeFinance';\r\nimport useHandleTransactionReceipt from './useHandleTransactionReceipt';\r\nimport {Bank} from '../grape-finance';\r\nimport {BigNumber} from 'ethers';\r\nimport {parseUnits} from 'ethers/lib/utils';\r\n\r\nconst useZapStakePress = (bank: Bank) => {\r\n const grapeFinance = useGrapeFinance();\r\n const handleTransactionReceipt = useHandleTransactionReceipt();\r\n\r\n const handleZapStake = useCallback(\r\n (amount: string, token: string) => {\r\n handleTransactionReceipt(\r\n grapeFinance.zapStakePress(bank.contract, token, parseUnits(amount, bank.depositToken.decimal)),\r\n `Zap ${token} and Stake in ${bank.contract}`,\r\n );\r\n },\r\n [bank, grapeFinance, handleTransactionReceipt],\r\n );\r\n\r\n return {onZapAndStake: handleZapStake};\r\n};\r\n\r\nexport default useZapStakePress;\r\n","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\usePressLottoInfo.ts",["1078"],"import {useEffect, useState} from 'react';\r\nimport useGrapeFinance from './useGrapeFinance';\r\nimport {PressLottoInfo} from '../grape-finance/types';\r\nimport useRefresh from './useRefresh';\r\n\r\nconst usePressLottoInfo = (pressName: string) => {\r\n const [pressLottoInfo, setPressLottoInfo] = useState<PressLottoInfo>();\r\n const {slowRefresh} = useRefresh();\r\n const grapeFinance = useGrapeFinance();\r\n\r\n useEffect(() => {\r\n async function fetchPressLottoInfo() {\r\n try {\r\n setPressLottoInfo(await grapeFinance.getPressLottoInfo(pressName));\r\n } catch (err) {\r\n console.error(err);\r\n }\r\n }\r\n fetchPressLottoInfo();\r\n }, [setPressLottoInfo, grapeFinance, slowRefresh]);\r\n\r\n return pressLottoInfo;\r\n};\r\n\r\nexport default usePressLottoInfo;\r\n","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useStakePress.ts",["1079"],"import {useCallback} from 'react';\r\nimport useGrapeFinance from './useGrapeFinance';\r\nimport useHandleTransactionReceipt from './useHandleTransactionReceipt';\r\nimport {Bank} from '../grape-finance';\r\nimport {BigNumber} from 'ethers';\r\nimport { parseUnits } from 'ethers/lib/utils';\r\n\r\nconst useStakePress = (bank: Bank) => {\r\n const grapeFinance = useGrapeFinance();\r\n const handleTransactionReceipt = useHandleTransactionReceipt();\r\n\r\n const handleStake = useCallback(\r\n (amount: string) => {\r\n handleTransactionReceipt(\r\n grapeFinance.stakePress(bank.contract, parseUnits(amount, bank.depositToken.decimal)),\r\n `Stake in ${bank.contract}`,\r\n );\r\n },\r\n [bank, grapeFinance, handleTransactionReceipt],\r\n );\r\n\r\n return {onStake: handleStake};\r\n};\r\n\r\nexport default useStakePress;\r\n","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useCompoundPress.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useClaimPress.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useCompound.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useNodePrice.ts",["1080"],"import { useCallback, useEffect, useState } from 'react';\r\n\r\nimport { BigNumber } from 'ethers';\r\nimport useGrapeFinance from './useGrapeFinance';\r\nimport { ContractName } from '../grape-finance';\r\nimport config from '../config';\r\n\r\nconst useNodePrice = (poolName: ContractName, poolId: Number, sectionInUI: Number) => {\r\n const [amount, setAmount] = useState(BigNumber.from(0));\r\n const grapeFinance = useGrapeFinance();\r\n\r\n const fetchAmount = useCallback(async () => {\r\n const balance = sectionInUI === 3 ? await grapeFinance.getNodePrice(poolName, poolId) : BigNumber.from(0);\r\n setAmount(balance);\r\n }, [poolName, poolId, sectionInUI, grapeFinance]);\r\n\r\n useEffect(() => {\r\n if (sectionInUI === 3) {\r\n fetchAmount().catch((err) => console.error(err.stack));\r\n\r\n const refreshBalance = setInterval(fetchAmount, config.refreshInterval);\r\n return () => clearInterval(refreshBalance);\r\n }\r\n }, [poolName, setAmount, grapeFinance, fetchAmount]);\r\n\r\n return amount;\r\n};\r\n\r\nexport default useNodePrice;","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useLpStatsBTC.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useTotalNodes.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useUserDetails.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useNodes.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useMaxPayout.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useDailyDrip.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\components\\TokenInput\\index.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\views\\Dashboard\\ProgressCountdown.tsx",[],"C:\\Users\\CR\\Documents\\front-end\\src\\components\\Modal\\Modal.tsx",[],"C:\\Users\\CR\\Documents\\front-end\\src\\components\\ModalActions\\ModalActions.tsx",[],"C:\\Users\\CR\\Documents\\front-end\\src\\components\\TokenInput\\TokenInput.tsx",[],"C:\\Users\\CR\\Documents\\front-end\\src\\components\\Container\\index.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\components\\Card\\index.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\components\\Input\\index.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\components\\Card\\Card.tsx",[],"C:\\Users\\CR\\Documents\\front-end\\src\\components\\Container\\Container.tsx",[],"C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useXGrapePrice.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\components\\Input\\Input.tsx",[],"C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useEagerConnect.js",[],"C:\\Users\\CR\\Documents\\front-end\\src\\components\\Footer\\index.js",[],"C:\\Users\\CR\\Documents\\front-end\\src\\components\\Footer\\Footer.js",[],"C:\\Users\\CR\\Documents\\front-end\\src\\components\\Button\\index.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\components\\Button\\Button.tsx",[],"C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useTreasuryAllocationTimes.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\boardroom\\useWithdrawCheck.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\boardroom\\useClaimRewardCheck.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useFetchBoardroomAPR.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useTotalStakedOnBoardroom.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useGetBoardroomPrintRate.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useCurrentEpoch.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useRedeemOnBoardroom.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useStakedBalanceOnBoardroom.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\views\\Dashboard\\SodapressCard.tsx",[],"C:\\Users\\CR\\Documents\\front-end\\src\\views\\Dashboard\\WinepressCard.tsx",["1081"],"import React, {useMemo, useState, useEffect} from 'react';\r\nimport {Box, Grid, Accordion, AccordionDetails, AccordionSummary, useMediaQuery} from '@material-ui/core';\r\nimport InfoIcon from '@mui/icons-material/Info';\r\n\r\nimport {Bank} from '../../grape-finance';\r\nimport TokenSymbol from '../../components/TokenSymbol';\r\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore';\r\nimport ProgressCountdown from './ProgressCountdown';\r\nimport moment from 'moment';\r\nimport {getFullDisplayBalance} from '../../utils/formatBalance';\r\nimport useClaimPress from '../../hooks/useClaimPress';\r\nimport useCompoundPress from '../../hooks/useCompoundPress';\r\nimport useStakePress from '../../hooks/useStakePress';\r\nimport FormControl from '@material-ui/core/FormControl';\r\nimport RadioGroup from '@material-ui/core/RadioGroup';\r\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\r\nimport Radio from '@material-ui/core/Radio';\r\nimport useApprove, {ApprovalState} from '../../hooks/useApprove';\r\nimport useWinepressUserInfo from '../../hooks/useWinepressUserInfo';\r\nimport usePressLottoInfo from '../../hooks/usePressLottoInfo';\r\nimport useGrapeFinance from '../../hooks/useGrapeFinance';\r\nimport useTokenBalance from '../../hooks/useTokenBalance';\r\nimport useZapStakePress from '../../hooks/useZapStakePress';\r\nimport usePoolBalance from '../../hooks/usePoolBalance';\r\nimport {styled} from '@mui/material/styles';\r\nimport Tooltip, {TooltipProps, tooltipClasses} from '@mui/material/Tooltip';\r\nimport useGetPressUsersNearAssassination from '../../hooks/useGetPressUsersNearAssassination';\r\nimport useAssassinatePress from '../../hooks/useAssassinatePress';\r\nimport {subscribe, unsubscribe} from '../../state/txEvent';\r\nimport {SyncLoader} from 'react-spinners';\r\nimport useBurnGrapePress from '../../hooks/useBurnGrapePress';\r\nimport {batch} from 'react-redux';\r\n\r\nconst GRAPE_PER_BATCH = 10;\r\n\r\ninterface WinepressCardProps {\r\n displayName: string;\r\n bank: Bank;\r\n activesOnly: boolean;\r\n}\r\n\r\nconst LightTooltip = styled(({className, ...props}: TooltipProps) => (\r\n <Tooltip {...props} classes={{popper: className}} />\r\n))(({theme}) => ({\r\n [`& .${tooltipClasses.tooltip}`]: {\r\n boxShadow: theme.shadows[1],\r\n fontSize: 11,\r\n },\r\n}));\r\n\r\nconst WinepressCard: React.FC<WinepressCardProps> = ({displayName, bank, activesOnly}) => {\r\n const widthUnder600 = useMediaQuery('(max-width:600px)');\r\n\r\n const [loading, setLoading] = useState(true);\r\n\r\n const grapeFinance = useGrapeFinance();\r\n const pressUserInfo = useWinepressUserInfo();\r\n const pressLottoInfo = usePressLottoInfo(bank.name);\r\n const usersNearAssassination = useGetPressUsersNearAssassination(bank.name);\r\n\r\n const depositTokenBalance = useTokenBalance(bank.depositToken);\r\n const mimTokenBalance = useTokenBalance(grapeFinance.MIM);\r\n const grapeTokenBalance = useTokenBalance(grapeFinance.GRAPE);\r\n\r\n const pressBalance = usePoolBalance(grapeFinance.externalTokens[bank.depositTokenName], bank.address);\r\n\r\n const depositTokenApprove = useApprove(bank.depositToken, bank.address);\r\n const mimTokenApprove = useApprove(grapeFinance.MIM, bank.address);\r\n const grapeTokenApprove = useApprove(grapeFinance.GRAPE, grapeFinance.contracts[bank.name + 'Lotto'].address);\r\n\r\n useEffect(() => {\r\n subscribe('failedTx', () => {\r\n setClaimLoading(false);\r\n setCompoundLoading(false);\r\n setDepositingLoading(false);\r\n setApproveLoading(false);\r\n });\r\n\r\n subscribe('successTx', () => {\r\n setClaimLoading(false);\r\n setCompoundLoading(false);\r\n setDepositingLoading(false);\r\n setApproveLoading(false);\r\n });\r\n\r\n return () => {\r\n unsubscribe('failedTx');\r\n unsubscribe('successTx');\r\n };\r\n }, []);\r\n\r\n const {onClaim} = useClaimPress(bank);\r\n const {onCompound} = useCompoundPress(bank);\r\n const {onStake} = useStakePress(bank);\r\n const {onZapAndStake} = useZapStakePress(bank);\r\n const {onAssassinate} = useAssassinatePress(bank);\r\n const {onBurnGrape} = useBurnGrapePress(bank);\r\n\r\n const [expanded, setExpanded] = useState(false);\r\n const [inputValue, setInputValue] = useState<string>('');\r\n const [payWith, setPayWith] = useState(bank.depositTokenName);\r\n const [batchAmount, setBatchAmount] = useState('');\r\n\r\n const [claimLoading, setClaimLoading] = useState(false);\r\n const [depositingLoading, setDepositingLoading] = useState(false);\r\n const [approveLoading, setApproveLoading] = useState(false);\r\n const [compoundLoading, setCompoundLoading] = useState(false);\r\n\r\n const displayDailyAPR = useMemo(\r\n () => (pressUserInfo ? (Number(pressUserInfo.rewardsPerDay) * 100) / pressUserInfo.totalDeposited : null),\r\n [pressUserInfo],\r\n );\r\n\r\n const displayRemainingTime = useMemo(() => {\r\n if (pressLottoInfo) {\r\n const dateTo = new Date();\r\n dateTo.setSeconds(dateTo.getSeconds() + Number(pressLottoInfo.timeLeftUntilNewDay));\r\n return dateTo;\r\n }\r\n return null;\r\n }, [pressLottoInfo]);\r\n\r\n const numGrapeToBurn = useMemo(() => {\r\n if (!batchAmount) return '';\r\n return Number(batchAmount) * GRAPE_PER_BATCH;\r\n }, [batchAmount]);\r\n\r\n useEffect(() => {\r\n if (pressUserInfo != null && displayDailyAPR != null) {\r\n setLoading(false);\r\n }\r\n }, [pressUserInfo, displayDailyAPR]);\r\n \r\n // Custom functions\r\n const expand = () => {\r\n setExpanded(!expanded);\r\n };\r\n\r\n const stake = () => {\r\n if (Number(inputValue) > 0) {\r\n setDepositingLoading(true);\r\n if (payWith === bank.depositTokenName) {\r\n onStake(inputValue);\r\n } else {\r\n onZapAndStake(inputValue, payWith);\r\n }\r\n }\r\n };\r\n\r\n const burn = () => {\r\n if (Number(batchAmount) > 0) {\r\n onBurnGrape(Number(batchAmount));\r\n }\r\n };\r\n\r\n const handleBatchAmountChanged = (e: any) => {\r\n if (isNaN(Number(e.target.value))) return;\r\n setBatchAmount(e.target.value);\r\n };\r\n\r\n const maxClicked = () => {\r\n setInputValue(getFullDisplayBalance(payWith === 'MIM' ? mimTokenBalance : depositTokenBalance, 18));\r\n };\r\n\r\n const maxBatchClicked = () => {\r\n const batches = Math.floor(Number(grapeTokenBalance) / 1e18 / 10);\r\n setBatchAmount(batches.toFixed(0));\r\n };\r\n\r\n const updateInput = (event: any) => {\r\n setInputValue(event.target.value);\r\n };\r\n\r\n const getLiquidityLink = () => {\r\n if (payWith === bank.depositTokenName) {\r\n return 'https://traderjoexyz.com/pool/0x130966628846bfd36ff31a822705796e8cb8c18d/0xc55036b5348cfb45a932481744645985010d3a44';\r\n }\r\n };\r\n\r\n const handlePayWithChange = (event: React.ChangeEvent<HTMLInputElement>) => {\r\n setPayWith(event.target.value);\r\n };\r\n\r\n const approve = () => {\r\n if (payWith === 'MIM') {\r\n mimTokenApprove.approve();\r\n return;\r\n }\r\n depositTokenApprove.approve();\r\n };\r\n\r\n const showApprove = () => {\r\n return (\r\n (payWith === 'MIM' && mimTokenApprove.approveStatus !== ApprovalState.APPROVED) ||\r\n (payWith === bank.depositTokenName && depositTokenApprove.approveStatus !== ApprovalState.APPROVED)\r\n );\r\n };\r\n\r\n const shortenAddress = (addr: string) => {\r\n if (!addr) return '';\r\n return addr.slice(0, 6) + '...' + addr.slice(addr.length - 4, addr.length);\r\n };\r\n\r\n const assassinate = (user: string) => {\r\n onAssassinate(user);\r\n };\r\n\r\n return (\r\n <>\r\n {(activesOnly === false || (activesOnly === true && pressUserInfo && pressUserInfo.totalTracked > 0)) && (\r\n <Accordion expanded={expanded} onChange={expand} className=\"accordion\">\r\n <AccordionSummary\r\n expandIcon={loading ? <SyncLoader color=\"white\" size={4} /> : <ExpandMoreIcon style={{color: 'white'}} />}\r\n aria-controls=\"panel1bh-content\"\r\n id=\"panel1bh-header\"\r\n >\r\n <Grid container justifyContent={'space-between'} alignItems=\"center\" className=\"lineItemInner\" spacing={1}>\r\n <Grid item className=\"lineName\" xs={12} sm={12} md={4}>\r\n <Grid container justifyContent=\"flex-start\" alignItems=\"center\" spacing={2} wrap=\"nowrap\">\r\n <Grid item>\r\n <TokenSymbol symbol={bank.depositTokenName} height={30} width={30} />\r\n </Grid>\r\n <Grid item>\r\n <div>{displayName}</div>\r\n <div className=\"lineDescription\">\r\n Lock {bank.depositTokenName} and earn up to 350% back in {bank.depositTokenName}\r\n </div>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n <Grid item xs={12} sm={6} md={2}>\r\n <Grid container direction={widthUnder600 ? 'row' : 'column'} justifyContent=\"space-between\">\r\n <Grid item>\r\n <div className=\"lineLabel\">\r\n {' '}\r\n Total Tracked{' '}\r\n <LightTooltip arrow placement=\"top\" enterDelay={0} title=\"Token Deposited + Compounded\">\r\n <InfoIcon style={{verticalAlign: 'text-bottom', fontSize: '17px'}} />\r\n </LightTooltip>\r\n </div>\r\n </Grid>\r\n <Grid item>\r\n {' '}\r\n <div className=\"lineValueDeposited\">\r\n <span style={{color: '#fcfcfc'}}>\r\n {pressUserInfo ? pressUserInfo.totalTracked.toFixed(2) : '0.00'} LP\r\n </span>\r\n <span style={{marginLeft: '5px', fontSize: '14px'}}>\r\n ($\r\n {pressUserInfo\r\n ? (pressUserInfo.totalTracked * Number(pressUserInfo.depositTokenPrice)).toFixed(2)\r\n : '0.00'}\r\n )\r\n </span>\r\n </div>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n\r\n <Grid item xs={12} sm={6} md={2}>\r\n <Grid container direction={widthUnder600 ? 'row' : 'column'} justifyContent=\"space-between\">\r\n <Grid item>\r\n <div className=\"lineLabel\">Rewards</div>\r\n </Grid>\r\n <Grid item>\r\n <div className=\"lineValueDeposited\">\r\n <span style={{color: '#fcfcfc'}}>\r\n {pressUserInfo ? pressUserInfo.totalClaimable.toFixed(2) : '0.00'} LP\r\n </span>\r\n <span style={{marginLeft: '5px', fontSize: '14px'}}>\r\n ($\r\n {pressUserInfo\r\n ? (pressUserInfo.totalClaimable * Number(pressUserInfo.depositTokenPrice)).toFixed(2)\r\n : '0.00'}\r\n )\r\n </span>\r\n </div>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n\r\n <Grid item xs={12} sm={6} md={2}>\r\n <Grid container direction={widthUnder600 ? 'row' : 'column'} justifyContent=\"space-between\">\r\n <Grid item>\r\n <div className=\"lineLabel\">APR Yearly | Daily</div>\r\n </Grid>\r\n <Grid item>\r\n <div className=\"lineValue\">\r\n {displayDailyAPR ? (displayDailyAPR * 365).toFixed(0) : '456'}% |{' '}\r\n {displayDailyAPR ? displayDailyAPR.toFixed(2) : '1.25'}%\r\n </div>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n\r\n <Grid item xs={12} sm={6} md={2}>\r\n <Grid container direction={widthUnder600 ? 'row' : 'column'} justifyContent=\"space-between\">\r\n <Grid item>\r\n <div className=\"lineLabel\">Total Deposited</div>\r\n </Grid>\r\n <Grid item>\r\n ${pressUserInfo ? pressUserInfo.tvl.toLocaleString('en-US', {maximumFractionDigits: 2}) : '0.00'}\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n </AccordionSummary>\r\n <AccordionDetails style={{overflow: 'hidden'}}>\r\n <Grid container direction=\"column\" spacing={2}>\r\n <Grid item>\r\n <Grid container spacing={2} justifyContent=\"space-between\" alignItems=\"center\">\r\n <Grid item xs={6} md={3}>\r\n <div className=\"statBox\">\r\n <div className=\"statBoxInner\">\r\n <div className=\"lineLabel\">Est. Reward /day</div>\r\n <div className=\"lineValue\">\r\n {pressUserInfo ? pressUserInfo.rewardsPerDay.toFixed(2) : '0.00'} LP\r\n <span className=\"wallet-token-value\">\r\n {' '}\r\n ($\r\n {pressUserInfo\r\n ? (pressUserInfo.rewardsPerDay * Number(pressUserInfo.depositTokenPrice)).toFixed(2)\r\n : '0.00'}\r\n )\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </Grid>\r\n <Grid item xs={6} md={3}>\r\n <div className=\"statBox\">\r\n <div className=\"statBoxInner\">\r\n <div className=\"lineLabel\">\r\n Your Deposits{' '}\r\n <LightTooltip\r\n arrow\r\n placement=\"top\"\r\n enterDelay={0}\r\n title=\"Shows 90% of the sum of all your deposits\"\r\n >\r\n <InfoIcon style={{verticalAlign: 'text-bottom', fontSize: '17px'}} />\r\n </LightTooltip>\r\n </div>\r\n <div className=\"lineValue\">\r\n {pressUserInfo ? pressUserInfo.totalDeposited.toFixed(2) : '0.00'} LP{' '}\r\n <span className=\"wallet-token-value\">\r\n ($\r\n {pressUserInfo\r\n ? (pressUserInfo.totalDeposited * Number(pressUserInfo.depositTokenPrice)).toFixed(2)\r\n : '0.00'}\r\n )\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </Grid>\r\n <Grid item xs={6} md={3}>\r\n <div className=\"statBox\">\r\n <div className=\"statBoxInner\">\r\n <div className=\"lineLabel\">\r\n Your Compounds{' '}\r\n <LightTooltip arrow placement=\"top\" enterDelay={0} title=\"Sum of all your compounds\">\r\n <InfoIcon style={{verticalAlign: 'text-bottom', fontSize: '17px'}} />\r\n </LightTooltip>\r\n </div>\r\n <div className=\"lineValue\">\r\n {pressUserInfo\r\n ? (pressUserInfo.totalTracked - pressUserInfo.totalDeposited).toFixed(2)\r\n : '0.00'}{' '}\r\n LP\r\n <span className=\"wallet-token-value\">\r\n {' '}\r\n ($\r\n {pressUserInfo\r\n ? (\r\n (pressUserInfo.totalTracked - pressUserInfo.totalDeposited) *\r\n Number(pressUserInfo.depositTokenPrice)\r\n ).toFixed(2)\r\n : '0.00'}\r\n )\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </Grid>\r\n <Grid item xs={6} md={3}>\r\n <div className=\"statBox\">\r\n <div className=\"statBoxInner\">\r\n <div className=\"lineLabel\">\r\n Assassination Tracker{' '}\r\n <LightTooltip\r\n arrow\r\n placement=\"top\"\r\n enterDelay={0}\r\n title=\"You don't want to reach 3.5... ((tracked share in token - tracked token balance) / tracked token balance)\"\r\n >\r\n <InfoIcon style={{verticalAlign: 'text-bottom', fontSize: '17px'}} />\r\n </LightTooltip>\r\n </div>\r\n <div className=\"lineValue\">\r\n {pressUserInfo ? pressUserInfo.profitRatio.toFixed(2) : '0.00'} / 3.5\r\n </div>\r\n </div>\r\n </div>\r\n </Grid>\r\n\r\n <Grid item xs={6} md={3}>\r\n <div className=\"statBox\">\r\n <div className=\"statBoxInner\">\r\n <div className=\"lineLabel\">\r\n Contract Balance{' '}\r\n <LightTooltip\r\n arrow\r\n placement=\"top\"\r\n enterDelay={0}\r\n title=\"Amount of Token left in the Contract\"\r\n >\r\n <InfoIcon style={{verticalAlign: 'text-bottom', fontSize: '17px'}} />\r\n </LightTooltip>\r\n </div>\r\n <div className=\"lineValue\">\r\n {pressBalance\r\n ? (Number(pressBalance) / 1e18).toLocaleString('en-US', {maximumFractionDigits: 2})\r\n : '0.00'}{' '}\r\n <span className=\"wallet-token-value\">\r\n {' '}\r\n ($\r\n {pressBalance && pressUserInfo\r\n ? (\r\n (Number(pressBalance) / 1e18) *\r\n Number(pressUserInfo.depositTokenPrice)\r\n ).toLocaleString('en-US', {maximumFractionDigits: 2})\r\n : '0.00'}\r\n )\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </Grid>\r\n <Grid item xs={6} md={3}>\r\n <div className=\"statBox\">\r\n <div className=\"statBoxInner\">\r\n <div className=\"lineLabel\">\r\n Remaining Shares | Tokens{' '}\r\n <LightTooltip\r\n arrow\r\n placement=\"top\"\r\n enterDelay={0}\r\n title=\"Your Remaining shares in the pool. Reaching 0 kicks you out of the Press\"\r\n >\r\n <InfoIcon style={{verticalAlign: 'text-bottom', fontSize: '17px'}} />\r\n </LightTooltip>\r\n </div>\r\n <div className=\"lineValue\">\r\n {pressUserInfo\r\n ? `${pressUserInfo.currentShares.toFixed(2)} | ${pressUserInfo.currentSharesInToken.toFixed(\r\n 2,\r\n )} LP`\r\n : '0.00'}{' '}\r\n <span className=\"wallet-token-value\">\r\n {' '}\r\n ($\r\n {pressUserInfo\r\n ? (\r\n Number(pressUserInfo.currentSharesInToken) * Number(pressUserInfo.depositTokenPrice)\r\n ).toLocaleString('en-US', {maximumFractionDigits: 2})\r\n : '0.00'}\r\n )\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </Grid>\r\n <Grid item xs={6} md={3}>\r\n <div className=\"statBox\">\r\n <div className=\"statBoxInner\">\r\n <div className=\"lineLabel\">\r\n Pending Shares | Tokens{' '}\r\n <LightTooltip\r\n arrow\r\n placement=\"top\"\r\n enterDelay={0}\r\n title=\"Compounding allows you to have a greater return than your initial.\"\r\n >\r\n <InfoIcon style={{verticalAlign: 'text-bottom', fontSize: '17px'}} />\r\n </LightTooltip>\r\n </div>\r\n <div className=\"lineValue\">\r\n {pressUserInfo\r\n ? `${pressUserInfo.pendingShares.toFixed(2)} | ${pressUserInfo.pendingSharesInToken.toFixed(\r\n 2,\r\n )} LP`\r\n : '0.00'}{' '}\r\n <span className=\"wallet-token-value\">\r\n {' '}\r\n ($\r\n {pressUserInfo\r\n ? (\r\n Number(pressUserInfo.pendingSharesInToken) * Number(pressUserInfo.depositTokenPrice)\r\n ).toLocaleString('en-US', {maximumFractionDigits: 2})\r\n : '0.00'}\r\n )\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </Grid>\r\n <Grid item xs={6} md={3}>\r\n <div className=\"statBox\">\r\n <div className=\"statBoxInner\">\r\n <div className=\"lineLabel\">\r\n Claimed Shares{' '}\r\n <LightTooltip\r\n arrow\r\n placement=\"top\"\r\n enterDelay={0}\r\n title=\"Total Shares claimed so far. (Total Share Balance - Current Share Balance)\"\r\n >\r\n <InfoIcon style={{verticalAlign: 'text-bottom', fontSize: '17px'}} />\r\n </LightTooltip>\r\n </div>\r\n <div className=\"lineValue\">\r\n {pressUserInfo ? pressUserInfo.claimedInShares.toFixed(2) : '0.00'}\r\n </div>\r\n </div>\r\n </div>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n <Grid item>\r\n <Grid container spacing={5}>\r\n <Grid item xs={12} sm={12} md={6}>\r\n <Box className=\"lineDetailsBox\">\r\n <div className=\"press-line-details-inner\">\r\n <Box>\r\n <div className=\"pending-rewards\">DEPOSIT IN {bank.name}</div>\r\n </Box>\r\n <Box mt={2}>\r\n <FormControl>\r\n <RadioGroup\r\n row\r\n aria-labelledby=\"row-radio-buttons-group-label\"\r\n name=\"row-radio-buttons-group\"\r\n value={payWith}\r\n onChange={handlePayWithChange}\r\n >\r\n <FormControlLabel\r\n value={bank.depositTokenName}\r\n control={<Radio />}\r\n label={bank.depositTokenName}\r\n />\r\n\r\n <FormControlLabel value=\"MIM\" control={<Radio />} label=\"MIM\" />\r\n </RadioGroup>\r\n </FormControl>\r\n </Box>\r\n <div className=\"node-inputDetailsBox\">\r\n <Box className=\"box-price-of-one color-secondary\">\r\n 1 share = {pressUserInfo ? pressUserInfo.priceOfOneShare.toFixed(2) : '0.00'}{' '}\r\n {bank.depositTokenName} = $\r\n {pressUserInfo\r\n ? (pressUserInfo.priceOfOneShare * pressUserInfo.depositTokenPrice).toFixed(3)\r\n : '0.000'}\r\n </Box>\r\n <div className=\"inputDetailsBoxInner\">\r\n <Grid container justifyContent=\"space-between\" alignItems=\"center\" wrap=\"nowrap\">\r\n <Grid item xs={10} md={11}>\r\n <input\r\n type=\"number\"\r\n placeholder=\"Enter amount\"\r\n className=\"amount-input\"\r\n value={inputValue}\r\n onChange={updateInput}\r\n />\r\n </Grid>\r\n <Grid item xs={2} md={1} className=\"color-secondary\">\r\n <div onClick={maxClicked} className=\"max-button\">\r\n MAX\r\n </div>\r\n </Grid>\r\n </Grid>\r\n <div className=\"balance\">\r\n <span>\r\n Wallet:{' '}\r\n {getFullDisplayBalance(payWith === 'MIM' ? mimTokenBalance : depositTokenBalance, 18)}{' '}\r\n {payWith}\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n <Box mt={2}>\r\n {getLiquidityLink() != null && (\r\n <a\r\n style={{textDecoration: 'none'}}\r\n rel=\"noopener noreferrer\"\r\n target=\"_blank\"\r\n href={getLiquidityLink()}\r\n >\r\n <div className=\"addRemoveLiquidity color-secondary\">Add / Remove Liquidity</div>\r\n </a>\r\n )}\r\n </Box>\r\n </div>\r\n <Box mt={2}>\r\n <Grid container justifyContent=\"center\">\r\n <Grid item xs={12}>\r\n {showApprove() ? (\r\n <button\r\n onClick={() => {\r\n setApproveLoading(true);\r\n approve();\r\n }}\r\n className=\"primary-button\"\r\n title=\"Approve\"\r\n style={{borderTopLeftRadius: '0', borderTopRightRadius: '0'}}\r\n >\r\n {approveLoading ? (\r\n <span>\r\n <SyncLoader color=\"white\" size={4} style={{marginRight: '10px'}} />\r\n APPROVING\r\n </span>\r\n ) : (\r\n <span>APPROVE</span>\r\n )}\r\n </button>\r\n ) : (\r\n <button\r\n disabled={Number(inputValue) === 0}\r\n onClick={stake}\r\n className=\"primary-button\"\r\n title=\"Create Nodes\"\r\n style={{borderTopLeftRadius: '0', borderTopRightRadius: '0'}}\r\n >\r\n {depositingLoading ? (\r\n <span>\r\n <SyncLoader color=\"white\" size={4} style={{marginRight: '10px'}} />\r\n DEPOSITING\r\n </span>\r\n ) : (\r\n <span>DEPOSIT</span>\r\n )}\r\n </button>\r\n )}\r\n </Grid>\r\n </Grid>\r\n </Box>\r\n </Box>\r\n </Grid>\r\n <Grid item xs={12} sm={12} md={6}>\r\n <Box className=\"lineDetailsBox\">\r\n <div className=\"press-line-details-inner\">\r\n <Box>\r\n <div className=\"pending-rewards\">PENDING {bank.earnTokenName} REWARDS</div>\r\n </Box>\r\n <Box style={{textAlign: 'center'}} mt={2}>\r\n <TokenSymbol symbol={bank.earnTokenName} width={59} height={59} />\r\n </Box>\r\n <Box mt={2}>\r\n <Grid\r\n container\r\n direction=\"column\"\r\n spacing={0}\r\n justifyContent=\"center\"\r\n alignContent=\"center\"\r\n alignItems=\"center\"\r\n >\r\n <Grid item className=\"rewardTokenAmount\">\r\n {pressUserInfo ? pressUserInfo.totalClaimable.toFixed(2) : '0.00'} {bank.earnTokenName}\r\n </Grid>\r\n <Grid item className=\"rewardTokenValue\">\r\n $\r\n {pressUserInfo\r\n ? (pressUserInfo.totalClaimable * Number(pressUserInfo.depositTokenPrice)).toFixed(2)\r\n : '0.00'}\r\n </Grid>\r\n </Grid>\r\n </Box>\r\n </div>\r\n <Box mt={2}>\r\n <Grid container justifyContent=\"center\">\r\n <Grid item xs={6}>\r\n <button\r\n className=\"primary-button\"\r\n title=\"Compound\"\r\n onClick={() => {\r\n setCompoundLoading(true);\r\n onCompound();\r\n }}\r\n disabled={!pressUserInfo || (pressUserInfo && pressUserInfo.totalClaimable <= 0)}\r\n style={{\r\n borderTopLeftRadius: '0',\r\n borderTopRightRadius: '0',\r\n borderBottomRightRadius: '0',\r\n }}\r\n >\r\n {compoundLoading ? (\r\n <span>\r\n <SyncLoader color=\"white\" size={4} style={{marginRight: '10px'}} />\r\n COMPOUNDING\r\n </span>\r\n ) : (\r\n <span>COMPOUND</span>\r\n )}\r\n </button>\r\n </Grid>\r\n <Grid item xs={6}>\r\n <button\r\n style={{borderTopLeftRadius: '0', borderTopRightRadius: '0', borderBottomLeftRadius: '0'}}\r\n className=\"secondary-button\"\r\n title=\"Claim\"\r\n onClick={() => {\r\n setClaimLoading(true);\r\n onClaim();\r\n }}\r\n disabled={!pressUserInfo || (pressUserInfo && pressUserInfo.totalClaimable <= 0)}\r\n >\r\n {claimLoading ? (\r\n <span>\r\n <SyncLoader color=\"white\" size={4} style={{marginRight: '10px'}} />\r\n CLAIMING\r\n </span>\r\n ) : (\r\n <span>CLAIM</span>\r\n )}\r\n </button>\r\n </Grid>\r\n </Grid>\r\n </Box>\r\n </Box>\r\n </Grid>\r\n <Grid item xs={12} md={6}>\r\n <Box className=\"lineDetailsBox\">\r\n <div className=\"press-line-details-inner\">\r\n <Box>\r\n <div className=\"pending-rewards\">{bank.name} LOTTERY</div>\r\n </Box>\r\n <Box mt={2}>\r\n <Grid container direction=\"column\" spacing={1}>\r\n <Grid item xs={12}>\r\n <Grid container justifyContent=\"space-between\">\r\n <Grid item>Daily Top Deposit</Grid>\r\n <Grid item>\r\n {pressLottoInfo ? pressLottoInfo.largestDaily.toFixed(2) : '0.00'} LP\r\n <span className=\"wallet-token-value\">\r\n {' '}\r\n $\r\n {pressLottoInfo && pressUserInfo\r\n ? (pressLottoInfo.largestDaily * Number(pressUserInfo.depositTokenPrice)).toFixed(\r\n 2,\r\n )\r\n : '0.00'}\r\n </span>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n <Grid item xs={12}>\r\n <Grid container justifyContent=\"space-between\">\r\n <Grid item>Daily Deposit Pot</Grid>\r\n <Grid item>\r\n {pressLottoInfo ? pressLottoInfo.dailyDepositPot.toFixed(2) : '0.00'} LP\r\n <span className=\"wallet-token-value\">\r\n {' '}\r\n $\r\n {pressLottoInfo && pressUserInfo\r\n ? (\r\n pressLottoInfo.dailyDepositPot * Number(pressUserInfo.depositTokenPrice)\r\n ).toFixed(2)\r\n : '0.00'}\r\n </span>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n <Grid item xs={12}>\r\n <Grid container justifyContent=\"space-between\">\r\n <Grid item>Largest Deposit Pot</Grid>\r\n <Grid item>\r\n {pressLottoInfo ? pressLottoInfo.largestDailyPot.toFixed(2) : '0.00'} LP\r\n <span className=\"wallet-token-value\">\r\n {' '}\r\n $\r\n {pressLottoInfo && pressUserInfo\r\n ? (\r\n pressLottoInfo.largestDailyPot * Number(pressUserInfo.depositTokenPrice)\r\n ).toFixed(2)\r\n : '0.00'}\r\n </span>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n <Grid item xs={12}>\r\n <Grid container justifyContent=\"space-between\">\r\n <Grid item>Next Winner Drawing</Grid>\r\n <Grid item>\r\n {displayRemainingTime && (\r\n <ProgressCountdown\r\n description=\"Next Drawing\"\r\n base={moment().toDate()}\r\n hideBar={true}\r\n deadline={displayRemainingTime}\r\n />\r\n )}\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n <Grid item xs={12}>\r\n <Grid container justifyContent=\"space-between\">\r\n <Grid item>Lotto Tickets</Grid>\r\n <Grid item>\r\n {pressLottoInfo\r\n ? `${pressLottoInfo.lottoTickets} / ${pressLottoInfo.totalLottoTickets}`\r\n : '0 / 0'}{' '}\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n <Grid item xs={12}>\r\n <Grid container justifyContent=\"space-between\">\r\n <Grid item>\r\n <div>Your Lotto Winnings</div>\r\n <div className=\"color-secondary\" style={{fontSize: '12px'}}>\r\n Your winnings are sent to you automatically\r\n </div>\r\n </Grid>\r\n <Grid item>{pressLottoInfo ? pressLottoInfo.lottoWinnings : '0'} LP</Grid>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n </Box>\r\n </div>\r\n <Box mt={2}>\r\n <Grid container justifyContent=\"center\">\r\n <Grid item xs={12}>\r\n {grapeTokenApprove.approveStatus !== ApprovalState.APPROVED ? (\r\n <>\r\n <span style={{paddingLeft: '35px', paddingRight: '35px'}}>\r\n {' '}\r\n Burn Grape for Tickets (1 Grape each)\r\n </span>\r\n <button\r\n className=\"primary-button\"\r\n title=\"Approve\"\r\n onClick={() => {\r\n setApproveLoading(true);\r\n grapeTokenApprove.approve();\r\n }}\r\n style={{\r\n marginTop: '15px',\r\n borderTopLeftRadius: '0',\r\n borderTopRightRadius: '0',\r\n }}\r\n >\r\n {approveLoading ? (\r\n <span>\r\n <SyncLoader color=\"white\" size={4} style={{marginRight: '10px'}} />\r\n APPROVING\r\n </span>\r\n ) : (\r\n <span>APPROVE</span>\r\n )}\r\n </button>\r\n </>\r\n ) : (\r\n <>\r\n <Grid container style={{paddingLeft: '35px', paddingRight: '35px'}}>\r\n <Grid item xs={12}>\r\n Burn batches of {GRAPE_PER_BATCH} Grape in exchange for 10 Lotto tickets\r\n </Grid>\r\n <Grid item xs={12}>\r\n <div className=\"inputDetailsBoxInner\">\r\n <Grid container justifyContent=\"space-between\" alignItems=\"center\" wrap=\"nowrap\">\r\n <Grid item xs={10} md={11}>\r\n <input\r\n type=\"number\"\r\n placeholder=\"Number of batches\"\r\n className=\"amount-input\"\r\n value={batchAmount}\r\n onChange={handleBatchAmountChanged}\r\n />\r\n </Grid>\r\n <Grid item xs={2} md={1} className=\"color-secondary\">\r\n <div onClick={maxBatchClicked} className=\"max-button\">\r\n MAX\r\n </div>\r\n </Grid>\r\n </Grid>\r\n <div className=\"balance\">\r\n <span>Wallet: {getFullDisplayBalance(grapeTokenBalance, 18)} GRAPE</span>\r\n </div>\r\n </div>\r\n </Grid>\r\n </Grid>\r\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-2 mt-2\">\r\n <button\r\n className=\"primary-button\"\r\n title=\"Buy \"\r\n onClick={burn}\r\n disabled={\r\n Number(batchAmount) <= 0 ||\r\n Number(batchAmount) > Number(grapeTokenBalance) / 1e18 / 10\r\n }\r\n style={{\r\n marginTop: '15px',\r\n borderTopLeftRadius: '0',\r\n borderTopRightRadius: '0',\r\n }}\r\n >\r\n Burn {numGrapeToBurn} GRAPE\r\n </button>\r\n </div>\r\n </>\r\n )}\r\n </Grid>\r\n </Grid>\r\n </Box>\r\n </Box>\r\n </Grid>\r\n <Grid item xs={12} sm={12} md={6}>\r\n <Box className=\"lineDetailsBox\">\r\n <div className=\"press-line-details-inner\">\r\n <Box>\r\n <div className=\"pending-rewards\">{bank.earnTokenName} ASSASSINATION</div>\r\n </Box>\r\n\r\n <Box mt={2}>\r\n <Grid container justifyContent=\"space-between\">\r\n <Grid item>Your Assassination Profits</Grid>\r\n <Grid item>\r\n {pressUserInfo ? pressUserInfo.profitsAssassinated.toFixed(2) : '0.00'}{' '}\r\n {bank.depositTokenName}\r\n <span className=\"wallet-token-value\">\r\n {' '}\r\n $\r\n {pressUserInfo\r\n ? (\r\n pressUserInfo.profitsAssassinated * Number(pressUserInfo.depositTokenPrice)\r\n ).toFixed(2)\r\n : '0.00'}\r\n </span>\r\n </Grid>\r\n </Grid>\r\n </Box>\r\n\r\n <Box mt={3}>\r\n <div className=\"pending-rewards\">USERS NEAR ASSASSINATION (95%)</div>\r\n {usersNearAssassination && usersNearAssassination.length > 0 ? (\r\n <Grid\r\n container\r\n direction=\"column\"\r\n spacing={1}\r\n style={{marginTop: '20px', paddingBottom: '20px'}}\r\n >\r\n {usersNearAssassination.map((user) => (\r\n <Grid item xs={12}>\r\n <Grid container justifyContent=\"space-between\" alignItems=\"center\">\r\n <Grid item>{shortenAddress(user)}</Grid>\r\n <Grid item>\r\n <button\r\n onClick={() => assassinate(user)}\r\n className=\"primary-button\"\r\n style={{height: '35px'}}\r\n >\r\n Assassinate\r\n </button>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n ))}\r\n </Grid>\r\n ) : (\r\n <div className=\"color-secondary\" style={{marginTop: '20px'}}>\r\n No users near assassination\r\n </div>\r\n )}\r\n </Box>\r\n </div>\r\n </Box>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n </AccordionDetails>\r\n </Accordion>\r\n )}\r\n </>\r\n );\r\n};\r\n\r\nexport default WinepressCard;\r\n","C:\\Users\\CR\\Documents\\front-end\\src\\views\\Winery\\components\\ProgressCountdown.tsx",[],"C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useSodapressUserInfo.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useWinepressUserInfo.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useWalletStats.ts",["1082"],"import {useEffect, useState} from 'react';\r\nimport useGrapeFinance from './useGrapeFinance';\r\nimport {Bank, WalletStats} from '../grape-finance/types';\r\nimport useRefresh from './useRefresh';\r\n\r\nconst useWalletStats = (banks: Bank[]) => {\r\n const [stat, setStat] = useState<WalletStats>();\r\n const {slowRefresh} = useRefresh();\r\n const grapeFinance = useGrapeFinance();\r\n\r\n useEffect(() => {\r\n async function fetchWalletStats() {\r\n try {\r\n setStat(await grapeFinance.getWalletStats(banks));\r\n } catch (err) {\r\n console.error(err);\r\n }\r\n }\r\n fetchWalletStats();\r\n }, [setStat, grapeFinance, slowRefresh]);\r\n\r\n return stat;\r\n};\r\n\r\nexport default useWalletStats;\r\n","C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useBanks.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useBank.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\views\\NFTRaffle\\components\\ExchangeCard.tsx",[],"C:\\Users\\CR\\Documents\\front-end\\src\\components\\Chart\\index.js",[],"C:\\Users\\CR\\Documents\\front-end\\src\\components\\Chart\\Chart.js",[],"C:\\Users\\CR\\Documents\\front-end\\src\\views\\NFTRaffle\\components\\ExchangeModal.tsx",[],"C:\\Users\\CR\\Documents\\front-end\\src\\views\\Bond\\BondEstimatorModal.js",["1083"],"import {Modal, Grid, GridItem, Box, Typography, makeStyles} from '@material-ui/core';\r\nimport React, {useEffect, useState} from 'react';\r\nimport CloseIcon from '@material-ui/icons/Close';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n textField: {\r\n color: 'black',\r\n '& *': {\r\n color: 'black',\r\n },\r\n },\r\n text: {\r\n fontSize: '14px',\r\n },\r\n subTitle: {\r\n color: '#fff',\r\n fontSize: '14px',\r\n fontWeight: 'bold',\r\n },\r\n greenText: {\r\n color: '#36d846',\r\n fontSize: '14px',\r\n },\r\n inputButton: {\r\n marginLeft: '8px',\r\n fontSize: '12px',\r\n borderRadius: '4px',\r\n background: '#0c7aca',\r\n border: 'none',\r\n outline: 'none',\r\n padding: '0px 4px',\r\n lineHeight: '24px',\r\n color: 'white',\r\n cursor: 'pointer',\r\n },\r\n input: {\r\n appearance: 'none',\r\n border: 'none',\r\n outline: 'none',\r\n padding: 'none',\r\n width: '100%',\r\n paddingBlock: '5px',\r\n backgroundColor: 'transparent',\r\n '&::-webkit-outer-spin-button, &::-webkit-inner-spin-button': {\r\n WebkitAppearance: 'none',\r\n },\r\n '&[type=number]': {\r\n MozAppearance: 'none',\r\n },\r\n },\r\n}));\r\n\r\nconst style = {\r\n position: 'absolute',\r\n top: '50%',\r\n color: '#fff',\r\n left: '50%',\r\n transform: 'translate(-50%, -50%)',\r\n width: 'min(90%, 450px)',\r\n bgcolor: 'rgba(0,0,0,0.8)',\r\n p: '24px',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n outline: 'none',\r\n boxSizing: 'border-box',\r\n borderRadius: '12px',\r\n};\r\n\r\nconst BondEstimatorModal = ({open, walletBondAmount, handleClose}) => {\r\n const [bondAmount, setBondAmount] = useState(walletBondAmount);\r\n const [twap, setTwap] = useState(1.1);\r\n\r\n const classes = useStyles();\r\n\r\n const [ratio, setRatio] = useState(1);\r\n const [grapeRedeemed, setGrapeRedeemed] = useState(\"1\");\r\n\r\n const updateCalculation = (bondAmount, twap) => {\r\n const coeff = 0.7\r\n const ratio = 1 + ((Number(twap) - 1) * coeff)\r\n setRatio(ratio.toFixed(3))\r\n setGrapeRedeemed((Number(bondAmount) * ratio).toFixed(2))\r\n };\r\n\r\n useEffect(() => {\r\n updateCalculation(bondAmount, twap)\r\n }, [open, walletBondAmount, handleClose, bondAmount, twap])\r\n\r\n return (\r\n <Modal open={open}>\r\n <Box sx={style}>\r\n <Box\r\n sx={{\r\n display: 'flex',\r\n justifyContent: 'flex-end',\r\n }}\r\n >\r\n <Box\r\n sx={{\r\n cursor: 'pointer',\r\n }}\r\n onClick={() => {\r\n handleClose();\r\n setBondAmount(walletBondAmount);\r\n }}\r\n >\r\n <CloseIcon />\r\n </Box>\r\n </Box>\r\n <Box\r\n sx={{\r\n display: 'flex',\r\n flexDirection: 'column',\r\n }}\r\n >\r\n <Typography className={classes.text}>Enter GBonds amount:</Typography>\r\n <Box\r\n sx={{\r\n borderRadius: '10px',\r\n bgcolor: '#eff2f4',\r\n border: '1px solid #d0d3d4',\r\n p: '10px',\r\n mt: '10px',\r\n }}\r\n >\r\n <Box\r\n sx={{\r\n display: 'flex',\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n mb: '10px',\r\n }}\r\n >\r\n <input\r\n type=\"text\"\r\n value={bondAmount}\r\n className={classes.input}\r\n onChange={(e) => {\r\n setBondAmount(e.target.value);\r\n // updateCalculation(e.target.value, twap);\r\n }}\r\n />\r\n </Box>\r\n </Box>\r\n </Box>\r\n <Box\r\n mt={1}\r\n sx={{\r\n display: 'flex',\r\n flexDirection: 'column',\r\n }}\r\n >\r\n <Typography className={classes.text}>Enter Grape TWAP:</Typography>\r\n <Box\r\n sx={{\r\n borderRadius: '10px',\r\n bgcolor: '#eff2f4',\r\n border: '1px solid #d0d3d4',\r\n p: '10px',\r\n mt: '10px',\r\n }}\r\n >\r\n <Box\r\n sx={{\r\n display: 'flex',\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n mb: '10px',\r\n }}\r\n >\r\n <input\r\n type=\"number\"\r\n value={twap}\r\n className={classes.input}\r\n onChange={(e) => {\r\n setTwap(e.target.value);\r\n // updateCalculation(bondAmount, e.target.value);\r\n }}\r\n />\r\n </Box>\r\n </Box>\r\n </Box>\r\n <Box mt={3}>\r\n <Grid container direction=\"column\">\r\n <Grid item>\r\n <Grid container justifyContent=\"space-between\">\r\n <Grid item>TWAP</Grid>\r\n <Grid item>\r\n <b>{twap}</b>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n <Grid item>\r\n <Grid container justifyContent=\"space-between\">\r\n <Grid item>GBonds amount</Grid>\r\n <Grid item>\r\n <b>{Number(bondAmount).toFixed(2)}</b>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n <Grid item>\r\n <Grid container style={{color: '#930993'}} justifyContent=\"space-between\">\r\n <Grid item>Ratio</Grid>\r\n <Grid item>\r\n <b>1 / {ratio}</b>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n <Grid item>\r\n <Grid container style={{color: '#930993'}} justifyContent=\"space-between\">\r\n <Grid item>Grapes redeemed</Grid>\r\n <Grid item>\r\n <b>{grapeRedeemed}</b>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n </Box>\r\n </Box>\r\n </Modal>\r\n );\r\n};\r\n\r\nexport default BondEstimatorModal;\r\n","C:\\Users\\CR\\Documents\\front-end\\src\\views\\Rebates\\CemeteryCard.js",[],"C:\\Users\\CR\\Documents\\front-end\\src\\0x.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\views\\Home\\HomeCard.js",["1084"],"import React from 'react';\r\nimport cx from 'clsx';\r\nimport {makeStyles} from '@material-ui/core/styles';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport {Stack} from '@mui/material';\r\nimport {Row, Item} from '@mui-treasury/components/flex';\r\nimport {Link} from 'react-router-dom';\r\n\r\nimport solera from '../../assets/img/solera.png';\r\nimport xGrape from '../../assets/img/xGrape.png';\r\nimport vinium from '../../assets/img/vinium.png';\r\nimport grapeWine from '../../assets/img/grape-wine.png';\r\nimport gnode from '../../assets/img/gnode.png';\r\nimport barrel from '../../assets/img/barrel.png';\r\nimport winemaker from '../../assets/img/Winemaker.png';\r\nimport rebates from '../../assets/img/rebates.png';\r\nimport casinocoins from '../../assets/img/casinocoins.png';\r\nimport burninggrape from '../../assets/img/burninggrape.png';\r\nimport goblet from '../../assets/img/goblet.png';\r\nimport ribbonImg from '../../assets/img/new-ribbon.png';\r\nimport AnimatedButton from '../../components/Button/AnimatedButton';\r\n\r\nconst nameToImage = {\r\n solera: solera,\r\n xGrape: xGrape,\r\n grapeWine: grapeWine,\r\n gnode: gnode,\r\n barrel: barrel,\r\n winemaker: winemaker,\r\n rebates: rebates,\r\n casinocoins: casinocoins,\r\n burninggrape: burninggrape,\r\n goblet: goblet,\r\n vinium: vinium,\r\n};\r\n\r\nconst useStyles = makeStyles(({palette}) => ({\r\n root: ({color}) => ({\r\n borderRadius: '5px !important',\r\n border: '1px solid rgba(230, 230, 230, 0.1)',\r\n background: `rgba(0, 0, 0, 0.3)`,\r\n backdropFilter: 'blur(6px)',\r\n }),\r\n\r\n content: ({color}) => ({\r\n zIndex: 1,\r\n bottom: 0,\r\n }),\r\n title: {\r\n transition: '0.3s',\r\n fontSize: '1.6rem !important',\r\n margin: 0,\r\n color: '#e647e6',\r\n },\r\n\r\n subtitle: {\r\n fontSize: '1.1rem !important',\r\n margin: 0,\r\n padding: 0,\r\n color: '#fff',\r\n },\r\n description: {\r\n fontSize: '1rem !important',\r\n color: '#e3e3e3 !important',\r\n margin: 0,\r\n },\r\n logo: {\r\n marginTop: '20px',\r\n transition: '0.3s',\r\n height: 110,\r\n objectFit: 'contain !important',\r\n },\r\n contentText: {\r\n fontSize: '0.8rem !important',\r\n color: '#fff',\r\n },\r\n}));\r\n\r\nconst CustomCard = ({item, styles, title, subTitle, subItems}) => {\r\n return (\r\n <Stack direction=\"column\" className={cx(styles.root, styles.color)} justifyContent=\"space-between\" spacing={0}>\r\n {item.isNew && <img alt=\"New\" className=\"new-ribbon\" src={ribbonImg}></img>}\r\n\r\n <Row p={2} style={{marginTop: item.isNew ? '-55px' : null}}>\r\n <Grid container justifyContent=\"space-between\" style={{textAlign: 'center'}}>\r\n <Grid item xs={12}>\r\n <h1 className={styles.title} style={{color: item.color}}>\r\n {title}\r\n </h1>\r\n <h3 className={styles.subtitle}>{subTitle}</h3>\r\n </Grid>\r\n <Grid item xs={12}>\r\n <img alt={item.image} className={styles.logo} src={nameToImage[item.image]} />\r\n </Grid>\r\n </Grid>\r\n </Row>\r\n\r\n <div\r\n style={{\r\n borderBottomLeftRadius: '5px',\r\n borderBottomRightRadius: '5px',\r\n backgroundColor: 'rgba(230, 230, 230, 0.1)',\r\n }}\r\n >\r\n <Row px={2} pt={2}>\r\n <Item>\r\n <div className={styles.contentText}>{item.description}</div>\r\n </Item>\r\n </Row>\r\n\r\n <Grid container style={{padding: '15px'}} justifyContent=\"space-evenly\" spacing={2}>\r\n {subItems == null && (\r\n <Grid item style={{width: '100%'}}>\r\n {item.isInternalLink === true ? (\r\n <Link to={item.linkTo} style={{textDecoration: 'none'}}>\r\n <AnimatedButton backgroundColor=\"#9309937c\" icon={null} title={`Go to ${item.label}`} fullWidth />\r\n </Link>\r\n ) : (\r\n <a\r\n rel=\"noreferrer\"\r\n style={{textDecoration: 'none'}}\r\n target={item.isInternalLink === false ? '_blank' : ''}\r\n href={item.linkTo}\r\n >\r\n <AnimatedButton backgroundColor=\"#9309937c\" icon={null} title={`Go to ${item.label}`} fullWidth />\r\n </a>\r\n )}\r\n </Grid>\r\n )}\r\n\r\n {subItems != null && subItems.length > 0\r\n ? subItems.map((subItem) => (\r\n <Grid item xs={subItems.length === 1 ? 12 : subItems.length % 2 ? 4 : 6}>\r\n {subItem.isInternalLink === true ? (\r\n <Link to={subItem.linkTo} style={{textDecoration: 'none'}}>\r\n <AnimatedButton backgroundColor=\"#9309937c\" icon={null} title={subItem.label} fullWidth />\r\n </Link>\r\n ) : (\r\n <a\r\n style={{textDecoration: 'none'}}\r\n target={subItem.isInternalLink === false ? '_blank' : ''}\r\n href={subItem.linkTo}\r\n >\r\n <AnimatedButton backgroundColor=\"#9309937c\" icon={null} title={subItem.label} fullWidth />\r\n </a>\r\n )}\r\n </Grid>\r\n ))\r\n : null}\r\n </Grid>\r\n </div>\r\n </Stack>\r\n );\r\n};\r\n\r\nexport const HomeCard = ({item}) => {\r\n const styles1 = useStyles({color: item.color});\r\n return (\r\n <Grid key={item.label} item xs={12} sm={12} md={6} lg={4}>\r\n <CustomCard\r\n key={item.label}\r\n item={item}\r\n styles={styles1}\r\n subItems={item.items}\r\n title={item.label}\r\n subTitle={item.subLabel}\r\n />\r\n </Grid>\r\n );\r\n};\r\n\r\nexport default HomeCard;\r\n","C:\\Users\\CR\\Documents\\front-end\\src\\grape-finance\\constants.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useBondsPurchasable.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useBondStats.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useTotalValueLocked.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useIsWindowVisible.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useDebounce.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\views\\Bond\\components\\ExchangeCard.tsx",[],"C:\\Users\\CR\\Documents\\front-end\\src\\views\\Bond\\components\\ExchangeStat.tsx",[],"C:\\Users\\CR\\Documents\\front-end\\src\\components\\Spacer\\index.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\components\\LPInfoCard\\index.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\views\\Rebates\\components\\DepositModal.tsx",["1085"],"import React, {useCallback, useMemo, useState} from 'react';\r\nimport styled from 'styled-components';\r\n\r\nimport {Button} from '@material-ui/core';\r\nimport Modal, {ModalProps} from '../../../components/Modal';\r\nimport ModalActions from '../../../components/ModalActions';\r\nimport ModalTitle from '../../../components/ModalTitle';\r\nimport TokenInput from '../../../components/TokenInput';\r\nimport useRebateTreasury from '../../../hooks/useRebateTreasury';\r\nimport useTombFinance from '../../../hooks/useGrapeFinance';\r\nimport useFantomPrice from '../../../hooks/useFantomPrice';\r\nimport useTombStats from '../../../hooks/useWineStats';\r\n\r\nimport {getFullDisplayBalance} from '../../../utils/formatBalance';\r\nimport {BigNumber} from 'ethers';\r\n\r\ninterface DepositModalProps extends ModalProps {\r\n max: BigNumber;\r\n onConfirm: (amount: Number) => void;\r\n tokenName?: string;\r\n token?: any;\r\n}\r\n\r\nconst DepositModal: React.FC<DepositModalProps> = ({max, onConfirm, onDismiss, tokenName = '', token}) => {\r\n const tombStats = useTombStats();\r\n const [val, setVal] = useState('');\r\n\r\n const tombFinance = useTombFinance();\r\n const rebateStats = useRebateTreasury();\r\n const {price: ftmPrice} = useFantomPrice();\r\n\r\n const tombPriceInDollars = useMemo(\r\n () => (tombStats ? Number(tombStats.priceInDollars).toFixed(2) : null),\r\n [tombStats],\r\n );\r\n\r\n const fullBalance = useMemo(() => {\r\n return getFullDisplayBalance(max, 18);\r\n }, [max, tokenName]);\r\n\r\n const handleChange = useCallback(\r\n (e: React.FormEvent<HTMLInputElement>) => {\r\n setVal(e.currentTarget.value);\r\n },\r\n [setVal],\r\n );\r\n\r\n const handleSelectMax = useCallback(() => {\r\n setVal(rebateStats.tombAvailable > +fullBalance ? fullBalance : fullBalance);\r\n }, [fullBalance, setVal, rebateStats]);\r\n\r\n function getAssetPrice(token: String) {\r\n const address = tombFinance.externalTokens[tokenName].address;\r\n const assetPrice = rebateStats.assets.find((a: any) => a.token === address).price;\r\n return assetPrice;\r\n }\r\n\r\n function getOutAmount() {\r\n const toBondPrice = getAssetPrice(tokenName);\r\n const outAmount =\r\n +val *\r\n ((toBondPrice / rebateStats.tombPrice) *\r\n (1 + rebateStats.bondPremium / 100) *\r\n (token.params.multiplier / 1000000));\r\n return outAmount;\r\n }\r\n\r\n function formatOutAmount() {\r\n const outAmount = getOutAmount();\r\n return `Receiving: ${outAmount.toFixed(4)} WINE ($${(outAmount * Number(tombPriceInDollars)).toFixed(2)})`;\r\n }\r\n\r\n function formatInAmount() {\r\n return `Input: ${(+val).toFixed(4)} ${tokenName} ($${(+val * getAssetPrice(tokenName) * ftmPrice).toFixed(2)})`;\r\n }\r\n\r\n return (\r\n <Modal>\r\n <ModalTitle text={`Bond ${tokenName}`} />\r\n <TokenInput\r\n value={val}\r\n onSelectMax={handleSelectMax}\r\n onChange={handleChange}\r\n max={fullBalance}\r\n symbol={tokenName}\r\n />\r\n <StyledMaxText style={{marginTop: '14px'}}>{formatInAmount()}</StyledMaxText>\r\n <StyledMaxText>{formatOutAmount()}</StyledMaxText>\r\n <StyledMaxText>\r\n Estimated Return:{' '}\r\n {(\r\n ((getOutAmount() * Number(tombPriceInDollars) - +val * getAssetPrice(tokenName) * ftmPrice) /\r\n (+val * getAssetPrice(tokenName) * ftmPrice)) *\r\n 100\r\n ).toFixed(2)}\r\n %\r\n </StyledMaxText>\r\n <StyledMaxText style={{color: getOutAmount() < rebateStats.tombAvailable ? 'white' : 'var(--accent)'}}>\r\n {rebateStats.tombAvailable > 0 ? `${rebateStats.tombAvailable.toFixed(4)} Wine Available` : 'Wine Sold Out'}\r\n </StyledMaxText>\r\n <ModalActions>\r\n <Button\r\n color={getOutAmount() < rebateStats.tombAvailable ? 'primary' : 'secondary'}\r\n variant=\"contained\"\r\n disabled={getOutAmount() >= rebateStats.tombAvailable}\r\n onClick={() => onConfirm(+val)}\r\n >\r\n Confirm\r\n </Button>\r\n </ModalActions>\r\n </Modal>\r\n );\r\n};\r\n\r\nconst StyledMaxText = styled.div`\r\n align-items: center;\r\n color: ${(props) => props.theme.color.grey[600]};\r\n display: flex;\r\n font-size: 18px;\r\n margin-top: 2px;\r\n font-weight: 700;\r\n justify-content: flex-start;\r\n`;\r\n\r\nexport default DepositModal;\r\n","C:\\Users\\CR\\Documents\\front-end\\src\\components\\InfoCard\\index.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useCatchError.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\views\\Bond\\components\\ExchangeModal.tsx",[],"C:\\Users\\CR\\Documents\\front-end\\src\\hooks\\useFantomPrice.ts",[],"C:\\Users\\CR\\Documents\\front-end\\src\\components\\Spacer\\Spacer.tsx",[],"C:\\Users\\CR\\Documents\\front-end\\src\\components\\LPInfoCard\\LPInfoCard.tsx",[],"C:\\Users\\CR\\Documents\\front-end\\src\\components\\InfoCard\\InfoCard.tsx",[],"C:\\Users\\CR\\Documents\\front-end\\src\\components\\Page\\PriceItems.tsx",[],"C:\\Users\\CR\\Documents\\front-end\\src\\components\\Button\\AnimatedButton.tsx",[],"C:\\Users\\CR\\Documents\\front-end\\src\\components\\Page\\AccountButton.tsx",[],"C:\\Users\\CR\\Documents\\front-end\\src\\components\\Page\\AccountModal.tsx",[],"C:\\Users\\CR\\Documents\\front-end\\src\\views\\Dashboard\\DashboardTop.tsx",["1086","1087","1088","1089","1090","1091","1092"],"import {useMemo, useState, useEffect} from 'react';\r\nimport {useWallet} from 'use-wallet';\r\nimport {Grid, Typography, Card, CardContent, Tooltip} from '@material-ui/core';\r\nimport TokenSymbol from '../../components/TokenSymbol';\r\nimport useBanks from '../../hooks/useBanks';\r\nimport useGrapeStats from '../../hooks/useGrapeStats';\r\nimport useWineStats from '../../hooks/useWineStats';\r\nimport useWalletStats from '../../hooks/useWalletStats';\r\nimport CountUp from 'react-countup';\r\nimport useTokenBalance from '../../hooks/useTokenBalance';\r\nimport {getDisplayBalance} from '../../utils/formatBalance';\r\nimport useGrapeFinance from '../../hooks/useGrapeFinance';\r\nimport grapeImg from '../../assets/img/grape.png';\r\nimport nodesImg from '../../assets/img/gnode.png';\r\nimport wineImg from '../../assets/img/gshare.png';\r\nimport soda from '../../assets/img/soda.png';\r\nimport {SyncLoader} from 'react-spinners';\r\nimport useXGrapePrice from '../../hooks/useXGrapePrice';\r\nimport useVintagePrice from '../../hooks/useVintagePrice';\r\nimport InfoIcon from '@mui/icons-material/Info';\r\n\r\nimport useSVintagePrice from '../../hooks/useSVintagePrice';\r\nimport {Link} from 'react-router-dom';\r\nimport DashboardTokenBox from './DashboardTokenBox';\r\nimport useWalletNodesAndNFTs from '../../hooks/useWalletNodesAndNFTs';\r\nimport useNodeRewardPoolStats from '../../hooks/useNodesRewardBalance';\r\nimport useGrapeTotalNode from '../../hooks/useGrapeTotalNodes';\r\nimport useWineTotalNode from '../../hooks/useWineTotalNodes';\r\nimport useGrapeMimSWTotalNode from '../../hooks/useGrapeMimSWTotalNode';\r\n\r\nimport {\r\n GRAPE_NODE_MULTIPLIER,\r\n WINE_NODE_MULTIPLIER,\r\n GRAPEMIMSW_NODE_MULTIPLIER,\r\n GOON_MULTIPLIER,\r\n GLASS_MULTIPLIER,\r\n DECANTER_MULTIPLIER,\r\n GOBLET_MULTIPLIER,\r\n} from '../../utils/constants';\r\nimport DashboardNFTBox from './DashboardNFTBox';\r\nimport useLpStats from '../../hooks/useLpStats';\r\n\r\nconst DashboardTop = () => {\r\n const {account} = useWallet();\r\n const grapeFinance = useGrapeFinance();\r\n const [banks] = useBanks();\r\n const walletStats = useWalletStats(banks);\r\n const grapeStats = useGrapeStats();\r\n const grapeMimSWStats = useLpStats('GRAPE-MIM-SW');\r\n const wineStats = useWineStats();\r\n\r\n const grapeBalance = useTokenBalance(grapeFinance.GRAPE);\r\n const displayGrapeBalance = useMemo(() => getDisplayBalance(grapeBalance, 18, 2), [grapeBalance]);\r\n const wineBalance = useTokenBalance(grapeFinance.WINE);\r\n const displayWineBalance = useMemo(() => getDisplayBalance(wineBalance, 18, 2), [wineBalance]);\r\n const gbondBalance = useTokenBalance(grapeFinance.GBOND);\r\n const displayGbondBalance = useMemo(() => getDisplayBalance(gbondBalance, 18, 2), [gbondBalance]);\r\n const xGrapeBalance = useTokenBalance(grapeFinance.XGRAPE);\r\n const vintageBalance = useTokenBalance(grapeFinance.VINTAGE);\r\n const svintageBalance = useTokenBalance(grapeFinance.SVINTAGE);\r\n const displayXGrapeBalance = useMemo(() => getDisplayBalance(xGrapeBalance, 18, 2), [xGrapeBalance]);\r\n const displayVintageBalance = useMemo(() => getDisplayBalance(vintageBalance, 18, 2), [vintageBalance]);\r\n const displaySVintageBalance = useMemo(() => getDisplayBalance(svintageBalance, 18, 2), [svintageBalance]);\r\n\r\n const grapePriceInDollars = useMemo(\r\n () => (grapeStats ? Number(grapeStats.priceInDollars).toFixed(2) : null),\r\n [grapeStats],\r\n );\r\n const winePriceInDollars = useMemo(\r\n () => (wineStats ? Number(wineStats.priceInDollars).toFixed(2) : null),\r\n [wineStats],\r\n );\r\n const grapeMimSWPriceInDollars = useMemo(\r\n () => (grapeMimSWStats ? Number(grapeMimSWStats.priceOfOne).toFixed(2) : null),\r\n [grapeMimSWStats],\r\n );\r\n\r\n const xGrapePrice = useXGrapePrice();\r\n const vintagePrice = useVintagePrice();\r\n const sVintagePrice = useSVintagePrice();\r\n\r\n const [userNftTickets, setUserNftTickets] = useState<number>();\r\n const [userNodeTickets, setUserNodeTickets] = useState<number>();\r\n const walletsNodesAndNFTs = useWalletNodesAndNFTs();\r\n const nodeRewardPoolStats = useNodeRewardPoolStats();\r\n const totalGrapeNodes = useGrapeTotalNode();\r\n const totalWineNodes = useWineTotalNode();\r\n const totalGrapeMIMSWNodes = useGrapeMimSWTotalNode();\r\n\r\n useEffect(() => {\r\n if (walletsNodesAndNFTs && account) {\r\n setUserNodeTickets(\r\n walletsNodesAndNFTs.grapes * GRAPE_NODE_MULTIPLIER +\r\n walletsNodesAndNFTs.wines * WINE_NODE_MULTIPLIER +\r\n walletsNodesAndNFTs.grapeMimSWs * GRAPEMIMSW_NODE_MULTIPLIER,\r\n );\r\n\r\n setUserNftTickets(\r\n walletsNodesAndNFTs.goonBags * GOON_MULTIPLIER +\r\n walletsNodesAndNFTs.glasses * GLASS_MULTIPLIER +\r\n walletsNodesAndNFTs.decanters * DECANTER_MULTIPLIER +\r\n walletsNodesAndNFTs.goblets * GOBLET_MULTIPLIER,\r\n );\r\n }\r\n }, [walletsNodesAndNFTs, account]);\r\n\r\n const getPriceForNodes = (coin: string) => {\r\n if (coin === 'GRAPE') {\r\n return Number((nodeRewardPoolStats.grapes * Number(grapePriceInDollars)).toFixed(0));\r\n } else if (coin === 'WINE') {\r\n return Number((nodeRewardPoolStats.wines * Number(winePriceInDollars)).toFixed(0));\r\n } else if (coin === 'GRAPE-MIM SW') {\r\n return Number((nodeRewardPoolStats.grapeMimSWs * Number(grapeMimSWPriceInDollars)).toFixed(0));\r\n }\r\n };\r\n\r\n const getTotalPriceForNodes = () => {\r\n return getPriceForNodes('GRAPE') + getPriceForNodes('WINE') + getPriceForNodes('GRAPE-MIM SW');\r\n };\r\n\r\n const allTicketsFromNFTs = 9600;\r\n const allTicketsFromNodes = useMemo(() => {\r\n if (totalGrapeNodes && totalWineNodes && totalGrapeMIMSWNodes && account) {\r\n return Number(totalGrapeNodes) + Number(totalWineNodes[0]) + Number(totalGrapeMIMSWNodes[0]);\r\n }\r\n return null;\r\n }, [totalGrapeNodes, totalWineNodes, totalGrapeMIMSWNodes, account]);\r\n\r\n const totalTicketsWorth = useMemo(() => {\r\n if (\r\n nodeRewardPoolStats &&\r\n grapePriceInDollars &&\r\n allTicketsFromNodes &&\r\n winePriceInDollars &&\r\n grapeMimSWPriceInDollars &&\r\n userNftTickets &&\r\n userNodeTickets &&\r\n account\r\n ) {\r\n return (\r\n ((userNftTickets + userNodeTickets) * getTotalPriceForNodes()) / (allTicketsFromNodes + allTicketsFromNFTs)\r\n );\r\n }\r\n return 0;\r\n }, [\r\n nodeRewardPoolStats,\r\n allTicketsFromNodes,\r\n grapePriceInDollars,\r\n winePriceInDollars,\r\n grapeMimSWPriceInDollars,\r\n userNftTickets,\r\n userNodeTickets,\r\n account,\r\n ]);\r\n\r\n const totalInvested = useMemo(() => {\r\n if (walletStats && account) {\r\n return (\r\n walletStats.totalInNodes +\r\n walletStats.totalInSodaPress +\r\n walletStats.totalInVineyard +\r\n walletStats.totalInWinePress +\r\n walletStats.totalInSoleraPress +\r\n walletStats.totalInWinery +\r\n Number(displayGrapeBalance) * Number(grapePriceInDollars) +\r\n Number(displayWineBalance) * Number(winePriceInDollars) +\r\n Number(displayXGrapeBalance) * Number(xGrapePrice) +\r\n Number(displayVintageBalance) * Number(vintagePrice)\r\n );\r\n }\r\n return -1;\r\n }, [walletStats, account]);\r\n\r\n const totalRewards = useMemo(() => {\r\n if (walletStats && account) {\r\n // include individual tokens as well\r\n return (\r\n walletStats.rewardsInNodes +\r\n walletStats.rewardsInSodaPress +\r\n walletStats.rewardsInSoleraPress +\r\n walletStats.rewardsInVineyard +\r\n walletStats.rewardsInWinePress +\r\n walletStats.rewardsInWinery\r\n );\r\n }\r\n return -1;\r\n }, [walletStats, account]);\r\n\r\n return (\r\n <Grid container spacing={1}>\r\n <Grid item xs={12}>\r\n <Grid container spacing={1}>\r\n <Grid item xs={12} lg={4}>\r\n <Card>\r\n <CardContent>\r\n <Grid container justifyContent=\"space-between\" alignContent=\"center\" alignItems=\"center\">\r\n <Grid item>\r\n <span style={{fontWeight: '700'}}>MY TOTAL</span>\r\n\r\n <Tooltip\r\n arrow\r\n placement=\"top\"\r\n enterDelay={0}\r\n title=\"Sum of all pools, rewards and individual tokens\"\r\n style={{verticalAlign: 'sub', paddingBottom: '1px'}}\r\n >\r\n <InfoIcon fontSize=\"small\" />\r\n </Tooltip>\r\n </Grid>\r\n <Grid item style={{fontWeight: 700}}>\r\n {totalInvested !== -1 ? (\r\n <CountUp end={totalInvested} separator=\",\" prefix=\"≈$\" />\r\n ) : (\r\n <SyncLoader color=\"white\" size={4} />\r\n )}\r\n </Grid>\r\n </Grid>\r\n\r\n <Grid container justifyContent=\"space-between\">\r\n <Grid item>\r\n <span style={{color: '#f9b857', marginTop: '10px'}}>Rewards</span>\r\n </Grid>\r\n <Grid item>\r\n {totalRewards !== -1 ? (\r\n <CountUp end={Number(totalRewards)} separator=\",\" prefix=\"≈$\" />\r\n ) : (\r\n <SyncLoader color=\"white\" size={4} />\r\n )}\r\n </Grid>\r\n </Grid>\r\n </CardContent>\r\n </Card>\r\n </Grid>\r\n <Grid item xs={6} sm={6} md={3} lg={2}>\r\n <Card>\r\n <CardContent>\r\n <Grid container justifyContent=\"space-between\">\r\n <Grid item>\r\n <span className=\"dashboard-top-pool-category\">Vineyard</span>\r\n </Grid>\r\n <Grid item>\r\n <span className=\"dashboard-top-pool-value\">\r\n {walletStats ? (\r\n <CountUp end={walletStats.totalInVineyard} separator=\",\" prefix=\"≈$\" />\r\n ) : (\r\n <SyncLoader color=\"white\" size={4} />\r\n )}\r\n </span>\r\n </Grid>\r\n </Grid>\r\n\r\n <Grid container justifyContent=\"space-between\">\r\n <Grid item>\r\n <span className=\"dashboard-top-reward-label\">Rewards</span>\r\n </Grid>\r\n <Grid item>\r\n <span className=\"dashboard-top-reward-value\">\r\n {walletStats != null ? (\r\n <CountUp end={Number(walletStats.rewardsInVineyard)} separator=\",\" prefix=\"≈$\" />\r\n ) : (\r\n <SyncLoader color=\"white\" size={4} />\r\n )}\r\n </span>\r\n </Grid>\r\n </Grid>\r\n </CardContent>\r\n </Card>\r\n </Grid>\r\n <Grid item xs={6} sm={6} md={3} lg={2}>\r\n <Card>\r\n <CardContent>\r\n <Grid container justifyContent=\"space-between\">\r\n <Grid item>\r\n <span className=\"dashboard-top-pool-category\">Winery</span>\r\n </Grid>\r\n <Grid item>\r\n <span className=\"dashboard-top-pool-value\">\r\n {walletStats ? (\r\n <CountUp end={walletStats.totalInWinery} separator=\",\" prefix=\"≈$\" />\r\n ) : (\r\n <SyncLoader color=\"white\" size={4} />\r\n )}\r\n </span>\r\n </Grid>\r\n </Grid>\r\n\r\n <Grid container justifyContent=\"space-between\">\r\n <Grid item>\r\n <span className=\"dashboard-top-reward-label\">Rewards</span>\r\n </Grid>\r\n <Grid item>\r\n <span className=\"dashboard-top-reward-value\">\r\n {walletStats != null ? (\r\n <CountUp end={Number(walletStats.rewardsInWinery)} separator=\",\" prefix=\"≈$\" />\r\n ) : (\r\n <SyncLoader color=\"white\" size={4} />\r\n )}\r\n </span>\r\n </Grid>\r\n </Grid>\r\n </CardContent>\r\n </Card>\r\n </Grid>\r\n <Grid item xs={6} sm={6} md={3} lg={2}>\r\n <Card>\r\n <CardContent>\r\n <Grid container justifyContent=\"space-between\">\r\n <Grid item>\r\n <span className=\"dashboard-top-pool-category\">Nodes</span>\r\n </Grid>\r\n <Grid item>\r\n <span className=\"dashboard-top-pool-value\">\r\n {walletStats ? (\r\n <CountUp end={walletStats.totalInNodes} separator=\",\" prefix=\"≈$\" />\r\n ) : (\r\n <SyncLoader color=\"white\" size={4} />\r\n )}\r\n </span>\r\n </Grid>\r\n </Grid>\r\n\r\n <Grid container justifyContent=\"space-between\">\r\n <Grid item>\r\n <span className=\"dashboard-top-reward-label\">Rewards</span>\r\n </Grid>\r\n <Grid item>\r\n <span className=\"dashboard-top-reward-value\">\r\n {walletStats != null ? (\r\n <CountUp end={Number(walletStats.rewardsInNodes)} separator=\",\" prefix=\"≈$\" />\r\n ) : (\r\n <SyncLoader color=\"white\" size={4} />\r\n )}\r\n </span>\r\n </Grid>\r\n </Grid>\r\n </CardContent>\r\n </Card>\r\n </Grid>\r\n\r\n <Grid item xs={6} sm={6} md={3} lg={2}>\r\n <Card>\r\n <CardContent>\r\n <Grid container justifyContent=\"space-between\">\r\n <Grid item>\r\n <span className=\"dashboard-top-pool-category\">Presses</span>\r\n </Grid>\r\n <Grid item>\r\n <span className=\"dashboard-top-pool-value\">\r\n {walletStats ? (\r\n <CountUp\r\n end={\r\n walletStats.totalInWinePress + walletStats.totalInSodaPress + walletStats.totalInSoleraPress\r\n }\r\n separator=\",\"\r\n prefix=\"≈$\"\r\n />\r\n ) : (\r\n <SyncLoader color=\"white\" size={4} />\r\n )}\r\n </span>\r\n </Grid>\r\n </Grid>\r\n\r\n <Grid container justifyContent=\"space-between\">\r\n <Grid item>\r\n <span className=\"dashboard-top-reward-label\">Rewards</span>\r\n </Grid>\r\n <Grid item>\r\n <span className=\"dashboard-top-reward-value\">\r\n {walletStats != null ? (\r\n <CountUp\r\n end={Number(\r\n walletStats.rewardsInWinePress +\r\n walletStats.rewardsInSodaPress +\r\n walletStats.rewardsInSoleraPress,\r\n )}\r\n separator=\",\"\r\n prefix=\"≈$\"\r\n />\r\n ) : (\r\n <SyncLoader color=\"white\" size={4} />\r\n )}\r\n </span>\r\n </Grid>\r\n </Grid>\r\n </CardContent>\r\n </Card>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n\r\n <Grid item xs={12}>\r\n <Grid container spacing={1} justifyContent=\"space-between\" alignItems=\"center\">\r\n <Grid item xs={4} sm={4} md={2}>\r\n <a\r\n target=\"_blank\"\r\n style={{textDecoration: 'none'}}\r\n rel=\"noopener noreferrer\"\r\n href=\"https://app.bogged.finance/avax/swap?tokenIn=0x130966628846BFd36ff31a822705796e8cb8C18D&tokenOut=0x5541D83EFaD1f281571B343977648B75d95cdAC2\"\r\n >\r\n <DashboardTokenBox\r\n displayBalance={displayGrapeBalance}\r\n tokenPrice={Number(grapePriceInDollars)}\r\n tokenSymbol=\"GRAPE\"\r\n />\r\n </a>\r\n </Grid>\r\n\r\n <Grid item xs={4} sm={4} md={2}>\r\n <a\r\n target=\"_blank\"\r\n style={{textDecoration: 'none'}}\r\n rel=\"noopener noreferrer\"\r\n href=\"https://app.bogged.finance/avax/swap?tokenIn=0x130966628846BFd36ff31a822705796e8cb8C18D&tokenOut=0xC55036B5348CfB45a932481744645985010d3A44\"\r\n >\r\n <DashboardTokenBox\r\n displayBalance={displayWineBalance}\r\n tokenPrice={Number(winePriceInDollars)}\r\n tokenSymbol=\"WINE\"\r\n />\r\n </a>\r\n </Grid>\r\n\r\n <Grid item xs={4} sm={4} md={2}>\r\n <a\r\n target=\"_blank\"\r\n rel=\"noopener noreferrer\"\r\n href=\"https://xgrape.grapefinance.app/\"\r\n style={{textDecoration: 'none'}}\r\n >\r\n <DashboardTokenBox\r\n displayBalance={displayXGrapeBalance}\r\n tokenPrice={Number(xGrapePrice)}\r\n tokenSymbol=\"XGRAPE\"\r\n />\r\n </a>\r\n </Grid>\r\n\r\n <Grid item xs={4} sm={4} md={2}>\r\n <a\r\n style={{textDecoration: 'none'}}\r\n target=\"_blank\"\r\n rel=\"noopener noreferrer\"\r\n href=\"https://www.swapsicle.io/swap?inputCurrency=0x130966628846bfd36ff31a822705796e8cb8c18d&outputCurrency=0x01Af64EF39AEB5612202AA07B3A3829f20c395fd#/\"\r\n >\r\n <DashboardTokenBox\r\n displayBalance={displayVintageBalance}\r\n tokenPrice={vintagePrice}\r\n tokenSymbol=\"VINTAGE\"\r\n />\r\n </a>\r\n </Grid>\r\n\r\n <Grid item xs={4} sm={4} md={2}>\r\n <a\r\n style={{textDecoration: 'none'}}\r\n target=\"_blank\"\r\n rel=\"noopener noreferrer\"\r\n href=\"https://www.swapsicle.io/swap?inputCurrency=0x130966628846bfd36ff31a822705796e8cb8c18d&outputCurrency=0x01Af64EF39AEB5612202AA07B3A3829f20c395fd#/\"\r\n >\r\n <DashboardTokenBox\r\n displayBalance={displaySVintageBalance}\r\n tokenPrice={sVintagePrice}\r\n tokenSymbol=\"SOLERA\"\r\n />\r\n </a>\r\n </Grid>\r\n\r\n <Grid item xs={4} sm={4} md={2}>\r\n <Link to=\"/bond\" style={{textDecoration: 'none'}}>\r\n <DashboardTokenBox displayBalance={displayGbondBalance} tokenPrice={null} tokenSymbol=\"GBOND\" />\r\n </Link>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n\r\n <Grid item xs={12}>\r\n <Grid container spacing={1} justifyContent=\"space-between\" alignItems=\"center\">\r\n <Grid item xs={4} sm={4} md={2}>\r\n <a\r\n target=\"_blank\"\r\n style={{textDecoration: 'none'}}\r\n rel=\"noopener noreferrer\"\r\n href=\"https://nftrade.com/collection/the-winery-collection?traitIds=db35524c-4e6a-4866-8b2f-cfd744414d5a&search=&sort=min_listed_desc&contractAddress=0x99fec0ca5cd461884e2e6e8484c219bbfb91e2df&chainName=\"\r\n >\r\n <DashboardNFTBox count={walletsNodesAndNFTs?.goonBags} multiplier={GOON_MULTIPLIER} nftSymbol=\"GOONBAG\" />\r\n </a>\r\n </Grid>\r\n\r\n <Grid item xs={4} sm={4} md={2}>\r\n <a\r\n target=\"_blank\"\r\n style={{textDecoration: 'none'}}\r\n rel=\"noopener noreferrer\"\r\n href=\"https://nftrade.com/collection/the-winery-collection?traitIds=b7c9d938-0a64-486b-abbd-d337077ae642&search=&sort=min_listed_desc&contractAddress=0x99fec0ca5cd461884e2e6e8484c219bbfb91e2df&chainName=\"\r\n >\r\n <DashboardNFTBox count={walletsNodesAndNFTs?.glasses} multiplier={GLASS_MULTIPLIER} nftSymbol=\"GLASS\" />\r\n </a>\r\n </Grid>\r\n\r\n <Grid item xs={4} sm={4} md={2}>\r\n <a\r\n target=\"_blank\"\r\n rel=\"noopener noreferrer\"\r\n href=\"https://nftrade.com/collection/the-winery-collection?traitIds=503dbfba-488e-473a-b9bf-6d20c19e2446&search=&sort=min_listed_desc&contractAddress=0x99fec0ca5cd461884e2e6e8484c219bbfb91e2df&chainName=\"\r\n style={{textDecoration: 'none'}}\r\n >\r\n <DashboardNFTBox\r\n count={walletsNodesAndNFTs?.decanters}\r\n multiplier={DECANTER_MULTIPLIER}\r\n nftSymbol=\"DECANTER\"\r\n />\r\n </a>\r\n </Grid>\r\n\r\n <Grid item xs={4} sm={4} md={2}>\r\n <a\r\n style={{textDecoration: 'none'}}\r\n target=\"_blank\"\r\n rel=\"noopener noreferrer\"\r\n href=\"https://nftrade.com/collection/the-winery-collection?traitIds=4a6117cf-14ec-4905-afc3-f4d56c1c3151&search=&sort=min_listed_desc&contractAddress=0x99fec0ca5cd461884e2e6e8484c219bbfb91e2df&chainName=\"\r\n >\r\n <DashboardNFTBox count={walletsNodesAndNFTs?.goblets} multiplier={GOBLET_MULTIPLIER} nftSymbol=\"GOBLET\" />\r\n </a>\r\n </Grid>\r\n\r\n <Grid item xs={4} sm={4} md={2}>\r\n <div className=\"dashboard-token-box\">\r\n <div className=\"dashboard-token-box-inner\">\r\n <Grid container justifyContent=\"center\" alignItems=\"flex-start\" spacing={1}>\r\n <Grid item>\r\n <TokenSymbol width={35} height={35} symbol={'NODE'} />\r\n </Grid>\r\n <Grid item>\r\n <Grid\r\n container\r\n direction={'column'}\r\n justifyContent=\"flex-start\"\r\n alignItems=\"flex-start\"\r\n spacing={0}\r\n >\r\n <Grid item className=\"lineValue\">\r\n Node Tickets\r\n </Grid>\r\n <Grid item className=\"wallet-token-value\">\r\n {userNodeTickets != null ? userNodeTickets : 'Loading'}\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n </div>\r\n </div>\r\n </Grid>\r\n\r\n <Grid item xs={4} sm={4} md={2}>\r\n <div className=\"dashboard-token-box\">\r\n <div className=\"dashboard-token-box-inner\">\r\n <Grid container justifyContent=\"center\" alignItems=\"flex-start\" spacing={1}>\r\n <Grid item>\r\n <Grid\r\n container\r\n direction={'column'}\r\n justifyContent=\"flex-start\"\r\n alignItems=\"flex-start\"\r\n spacing={0}\r\n >\r\n <Grid item className=\"lineValue\">\r\n Est. Next Airdrop\r\n </Grid>\r\n <Grid item className=\"wallet-token-value\">\r\n {totalTicketsWorth != null ? `~ $${totalTicketsWorth.toFixed(0)}` : 'Loading'}\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n </div>\r\n </div>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n </Grid>\r\n );\r\n};\r\n\r\nexport default DashboardTop;\r\n",{"ruleId":"1093","replacedBy":"1094"},{"ruleId":"1095","replacedBy":"1096"},{"ruleId":"1093","replacedBy":"1094"},{"ruleId":"1095","replacedBy":"1096"},{"ruleId":"1097","severity":1,"message":"1098","line":6,"column":8,"nodeType":"1099","messageId":"1100","endLine":6,"endColumn":17},{"ruleId":"1097","severity":1,"message":"1101","line":20,"column":8,"nodeType":"1099","messageId":"1100","endLine":20,"endColumn":28},{"ruleId":"1102","severity":1,"message":"1103","line":1,"column":16,"nodeType":"1099","messageId":"1100","endLine":1,"endColumn":25},{"ruleId":"1102","severity":1,"message":"1104","line":1,"column":27,"nodeType":"1099","messageId":"1100","endLine":1,"endColumn":38},{"ruleId":"1102","severity":1,"message":"1105","line":1,"column":40,"nodeType":"1099","messageId":"1100","endLine":1,"endColumn":48},{"ruleId":"1102","severity":1,"message":"1106","line":1,"column":50,"nodeType":"1099","messageId":"1100","endLine":1,"endColumn":56},{"ruleId":"1097","severity":1,"message":"1107","line":2,"column":9,"nodeType":"1099","messageId":"1100","endLine":2,"endColumn":13},{"ruleId":"1097","severity":1,"message":"1108","line":2,"column":15,"nodeType":"1099","messageId":"1100","endLine":2,"endColumn":19},{"ruleId":"1097","severity":1,"message":"1109","line":7,"column":7,"nodeType":"1099","messageId":"1100","endLine":7,"endColumn":31},{"ruleId":"1097","severity":1,"message":"1110","line":13,"column":9,"nodeType":"1099","messageId":"1100","endLine":13,"endColumn":26},{"ruleId":"1111","severity":1,"message":"1112","line":39,"column":9,"nodeType":"1113","endLine":39,"endColumn":59},{"ruleId":"1102","severity":1,"message":"1114","line":36,"column":9,"nodeType":"1099","messageId":"1100","endLine":36,"endColumn":23},{"ruleId":"1111","severity":1,"message":"1115","line":47,"column":6,"nodeType":"1116","endLine":47,"endColumn":8,"suggestions":"1117"},{"ruleId":"1102","severity":1,"message":"1118","line":4,"column":8,"nodeType":"1099","messageId":"1100","endLine":4,"endColumn":15},{"ruleId":"1097","severity":1,"message":"1110","line":3,"column":9,"nodeType":"1099","messageId":"1100","endLine":3,"endColumn":26},{"ruleId":"1097","severity":1,"message":"1119","line":4,"column":9,"nodeType":"1099","messageId":"1100","endLine":4,"endColumn":14},{"ruleId":"1097","severity":1,"message":"1120","line":4,"column":24,"nodeType":"1099","messageId":"1100","endLine":4,"endColumn":37},{"ruleId":"1097","severity":1,"message":"1121","line":24,"column":8,"nodeType":"1099","messageId":"1100","endLine":24,"endColumn":17},{"ruleId":"1097","severity":1,"message":"1110","line":3,"column":9,"nodeType":"1099","messageId":"1100","endLine":3,"endColumn":26},{"ruleId":"1097","severity":1,"message":"1121","line":12,"column":8,"nodeType":"1099","messageId":"1100","endLine":12,"endColumn":17},{"ruleId":"1097","severity":1,"message":"1110","line":3,"column":9,"nodeType":"1099","messageId":"1100","endLine":3,"endColumn":26},{"ruleId":"1097","severity":1,"message":"1121","line":6,"column":8,"nodeType":"1099","messageId":"1100","endLine":6,"endColumn":17},{"ruleId":"1097","severity":1,"message":"1122","line":4,"column":9,"nodeType":"1099","messageId":"1100","endLine":4,"endColumn":12},{"ruleId":"1097","severity":1,"message":"1123","line":4,"column":14,"nodeType":"1099","messageId":"1100","endLine":4,"endColumn":23},{"ruleId":"1111","severity":1,"message":"1124","line":21,"column":6,"nodeType":"1116","endLine":21,"endColumn":42,"suggestions":"1125"},{"ruleId":"1097","severity":1,"message":"1126","line":2,"column":10,"nodeType":"1099","messageId":"1100","endLine":2,"endColumn":21},{"ruleId":"1097","severity":1,"message":"1127","line":6,"column":10,"nodeType":"1099","messageId":"1100","endLine":6,"endColumn":27},{"ruleId":"1097","severity":1,"message":"1128","line":14,"column":25,"nodeType":"1099","messageId":"1100","endLine":14,"endColumn":41},{"ruleId":"1111","severity":1,"message":"1129","line":80,"column":6,"nodeType":"1116","endLine":80,"endColumn":27,"suggestions":"1130"},{"ruleId":"1111","severity":1,"message":"1131","line":24,"column":6,"nodeType":"1116","endLine":24,"endColumn":55,"suggestions":"1132"},{"ruleId":"1097","severity":1,"message":"1122","line":2,"column":9,"nodeType":"1099","messageId":"1100","endLine":2,"endColumn":12},{"ruleId":"1097","severity":1,"message":"1133","line":10,"column":8,"nodeType":"1099","messageId":"1100","endLine":10,"endColumn":25},{"ruleId":"1134","severity":1,"message":"1135","line":105,"column":59,"nodeType":"1136","messageId":"1137","endLine":105,"endColumn":61},{"ruleId":"1097","severity":1,"message":"1138","line":10,"column":9,"nodeType":"1099","messageId":"1100","endLine":10,"endColumn":25},{"ruleId":"1097","severity":1,"message":"1139","line":28,"column":7,"nodeType":"1099","messageId":"1100","endLine":28,"endColumn":17},{"ruleId":"1097","severity":1,"message":"1140","line":18,"column":8,"nodeType":"1099","messageId":"1100","endLine":18,"endColumn":20},{"ruleId":"1097","severity":1,"message":"1141","line":2,"column":9,"nodeType":"1099","messageId":"1100","endLine":2,"endColumn":16},{"ruleId":"1111","severity":1,"message":"1142","line":24,"column":5,"nodeType":"1116","endLine":24,"endColumn":50,"suggestions":"1143"},{"ruleId":"1111","severity":1,"message":"1144","line":38,"column":6,"nodeType":"1116","endLine":38,"endColumn":18,"suggestions":"1145"},{"ruleId":"1097","severity":1,"message":"1126","line":4,"column":10,"nodeType":"1099","messageId":"1100","endLine":4,"endColumn":21},{"ruleId":"1111","severity":1,"message":"1142","line":24,"column":5,"nodeType":"1116","endLine":24,"endColumn":50,"suggestions":"1146"},{"ruleId":"1097","severity":1,"message":"1122","line":1,"column":9,"nodeType":"1099","messageId":"1100","endLine":1,"endColumn":12},{"ruleId":"1111","severity":1,"message":"1147","line":36,"column":6,"nodeType":"1116","endLine":36,"endColumn":20,"suggestions":"1148"},{"ruleId":"1097","severity":1,"message":"1149","line":8,"column":8,"nodeType":"1099","messageId":"1100","endLine":8,"endColumn":19},{"ruleId":"1097","severity":1,"message":"1150","line":13,"column":8,"nodeType":"1099","messageId":"1100","endLine":13,"endColumn":21},{"ruleId":"1097","severity":1,"message":"1098","line":17,"column":8,"nodeType":"1099","messageId":"1100","endLine":17,"endColumn":17},{"ruleId":"1111","severity":1,"message":"1151","line":131,"column":6,"nodeType":"1116","endLine":131,"endColumn":49,"suggestions":"1152"},{"ruleId":"1111","severity":1,"message":"1153","line":151,"column":5,"nodeType":"1116","endLine":151,"endColumn":31,"suggestions":"1154"},{"ruleId":"1097","severity":1,"message":"1155","line":28,"column":8,"nodeType":"1099","messageId":"1100","endLine":28,"endColumn":28},{"ruleId":"1097","severity":1,"message":"1156","line":17,"column":3,"nodeType":"1099","messageId":"1100","endLine":17,"endColumn":21},{"ruleId":"1097","severity":1,"message":"1157","line":18,"column":3,"nodeType":"1099","messageId":"1100","endLine":18,"endColumn":24},{"ruleId":"1097","severity":1,"message":"1158","line":24,"column":3,"nodeType":"1099","messageId":"1100","endLine":24,"endColumn":17},{"ruleId":"1097","severity":1,"message":"1159","line":33,"column":9,"nodeType":"1099","messageId":"1100","endLine":33,"endColumn":24},{"ruleId":"1097","severity":1,"message":"1160","line":37,"column":9,"nodeType":"1099","messageId":"1100","endLine":37,"endColumn":16},{"ruleId":"1097","severity":1,"message":"1161","line":529,"column":11,"nodeType":"1099","messageId":"1100","endLine":529,"endColumn":33},{"ruleId":"1134","severity":1,"message":"1135","line":701,"column":26,"nodeType":"1136","messageId":"1137","endLine":701,"endColumn":28},{"ruleId":"1134","severity":1,"message":"1135","line":829,"column":23,"nodeType":"1136","messageId":"1137","endLine":829,"endColumn":25},{"ruleId":"1134","severity":1,"message":"1135","line":1221,"column":20,"nodeType":"1136","messageId":"1137","endLine":1221,"endColumn":22},{"ruleId":"1134","severity":1,"message":"1135","line":1872,"column":52,"nodeType":"1136","messageId":"1137","endLine":1872,"endColumn":54},{"ruleId":"1134","severity":1,"message":"1162","line":2070,"column":32,"nodeType":"1136","messageId":"1137","endLine":2070,"endColumn":34},{"ruleId":"1097","severity":1,"message":"1163","line":2,"column":9,"nodeType":"1099","messageId":"1100","endLine":2,"endColumn":24},{"ruleId":"1111","severity":1,"message":"1142","line":19,"column":6,"nodeType":"1116","endLine":19,"endColumn":45,"suggestions":"1164"},{"ruleId":"1097","severity":1,"message":"1165","line":3,"column":9,"nodeType":"1099","messageId":"1100","endLine":3,"endColumn":22},{"ruleId":"1111","severity":1,"message":"1166","line":22,"column":6,"nodeType":"1116","endLine":22,"endColumn":67,"suggestions":"1167"},{"ruleId":"1097","severity":1,"message":"1168","line":12,"column":8,"nodeType":"1099","messageId":"1100","endLine":12,"endColumn":13},{"ruleId":"1097","severity":1,"message":"1169","line":41,"column":10,"nodeType":"1099","messageId":"1100","endLine":41,"endColumn":18},{"ruleId":"1097","severity":1,"message":"1170","line":47,"column":9,"nodeType":"1099","messageId":"1100","endLine":47,"endColumn":23},{"ruleId":"1134","severity":1,"message":"1135","line":58,"column":15,"nodeType":"1136","messageId":"1137","endLine":58,"endColumn":17},{"ruleId":"1134","severity":1,"message":"1135","line":81,"column":71,"nodeType":"1136","messageId":"1137","endLine":81,"endColumn":73},{"ruleId":"1134","severity":1,"message":"1135","line":110,"column":16,"nodeType":"1136","messageId":"1137","endLine":110,"endColumn":18},{"ruleId":"1134","severity":1,"message":"1135","line":111,"column":16,"nodeType":"1136","messageId":"1137","endLine":111,"endColumn":18},{"ruleId":"1134","severity":1,"message":"1135","line":112,"column":16,"nodeType":"1136","messageId":"1137","endLine":112,"endColumn":18},{"ruleId":"1097","severity":1,"message":"1171","line":116,"column":12,"nodeType":"1099","messageId":"1100","endLine":116,"endColumn":26},{"ruleId":"1134","severity":1,"message":"1135","line":117,"column":16,"nodeType":"1136","messageId":"1137","endLine":117,"endColumn":18},{"ruleId":"1134","severity":1,"message":"1135","line":118,"column":16,"nodeType":"1136","messageId":"1137","endLine":118,"endColumn":18},{"ruleId":"1134","severity":1,"message":"1135","line":119,"column":16,"nodeType":"1136","messageId":"1137","endLine":119,"endColumn":18},{"ruleId":"1097","severity":1,"message":"1172","line":124,"column":8,"nodeType":"1099","messageId":"1100","endLine":124,"endColumn":14},{"ruleId":"1097","severity":1,"message":"1173","line":124,"column":16,"nodeType":"1099","messageId":"1100","endLine":124,"endColumn":22},{"ruleId":"1097","severity":1,"message":"1174","line":193,"column":7,"nodeType":"1099","messageId":"1100","endLine":193,"endColumn":28},{"ruleId":"1111","severity":1,"message":"1175","line":41,"column":6,"nodeType":"1116","endLine":41,"endColumn":62,"suggestions":"1176"},{"ruleId":"1111","severity":1,"message":"1177","line":14,"column":6,"nodeType":"1116","endLine":14,"endColumn":37,"suggestions":"1178"},{"ruleId":"1097","severity":1,"message":"1179","line":5,"column":9,"nodeType":"1099","messageId":"1100","endLine":5,"endColumn":18},{"ruleId":"1111","severity":1,"message":"1180","line":20,"column":6,"nodeType":"1116","endLine":20,"endColumn":52,"suggestions":"1181"},{"ruleId":"1097","severity":1,"message":"1179","line":5,"column":9,"nodeType":"1099","messageId":"1100","endLine":5,"endColumn":18},{"ruleId":"1111","severity":1,"message":"1182","line":24,"column":6,"nodeType":"1116","endLine":24,"endColumn":54,"suggestions":"1183"},{"ruleId":"1097","severity":1,"message":"1184","line":32,"column":9,"nodeType":"1099","messageId":"1100","endLine":32,"endColumn":14},{"ruleId":"1111","severity":1,"message":"1185","line":20,"column":6,"nodeType":"1116","endLine":20,"endColumn":42,"suggestions":"1186"},{"ruleId":"1102","severity":1,"message":"1187","line":1,"column":22,"nodeType":"1099","messageId":"1100","endLine":1,"endColumn":30},{"ruleId":"1188","severity":1,"message":"1189","line":139,"column":21,"nodeType":"1190","messageId":"1191","endLine":143,"endColumn":22,"fix":"1192"},{"ruleId":"1111","severity":1,"message":"1193","line":39,"column":6,"nodeType":"1116","endLine":39,"endColumn":22,"suggestions":"1194"},{"ruleId":"1097","severity":1,"message":"1195","line":3,"column":15,"nodeType":"1099","messageId":"1100","endLine":3,"endColumn":25},{"ruleId":"1097","severity":1,"message":"1196","line":13,"column":8,"nodeType":"1099","messageId":"1100","endLine":13,"endColumn":16},{"ruleId":"1097","severity":1,"message":"1197","line":14,"column":8,"nodeType":"1099","messageId":"1100","endLine":14,"endColumn":16},{"ruleId":"1097","severity":1,"message":"1118","line":15,"column":8,"nodeType":"1099","messageId":"1100","endLine":15,"endColumn":15},{"ruleId":"1097","severity":1,"message":"1198","line":16,"column":8,"nodeType":"1099","messageId":"1100","endLine":16,"endColumn":12},{"ruleId":"1111","severity":1,"message":"1199","line":145,"column":6,"nodeType":"1116","endLine":154,"endColumn":4,"suggestions":"1200"},{"ruleId":"1111","severity":1,"message":"1201","line":172,"column":6,"nodeType":"1116","endLine":172,"endColumn":28,"suggestions":"1202"},"no-native-reassign",["1203"],"no-negated-in-lhs",["1204"],"@typescript-eslint/no-unused-vars","'useWallet' is defined but never used.","Identifier","unusedVar","'BackgroundDecoration' is defined but never used.","no-unused-vars","'useEffect' is defined but never used.","'useCallback' is defined but never used.","'useState' is defined but never used.","'useRef' is defined but never used.","'save' is defined but never used.","'load' is defined but never used.","'PERSISTED_KEYS' is assigned a value but never used.","'createGlobalStyle' is defined but never used.","react-hooks/exhaustive-deps","The 'transactions' conditional could make the dependencies of useEffect Hook (at line 94) change on every render. Move it inside the useEffect callback. Alternatively, wrap the initialization of 'transactions' in its own useMemo() Hook.","VariableDeclarator","'tombPriceInFTM' is assigned a value but never used.","React Hook useEffect has a missing dependency: 'updateVesting'. Either include it or remove the dependency array.","ArrayExpression",["1205"],"'wineImg' is defined but never used.","'Route' is defined but never used.","'useRouteMatch' is defined but never used.","'HomeImage' is defined but never used.","'Box' is defined but never used.","'Container' is defined but never used.","React Hook useEffect has missing dependencies: 'account' and 'raffleAddress'. Either include them or remove the dependency array. If 'setStat' needs the current value of 'account', you can also switch to useReducer instead of useState and read 'account' in the reducer.",["1206"],"'formatEther' is defined but never used.","'getDisplayBalance' is defined but never used.","'setCompoundValue' is assigned a value but never used.","React Hook useEffect has a missing dependency: 'bombFinance'. Either include it or remove the dependency array.",["1207"],"React Hook useEffect has a missing dependency: 'refreshPool'. Either include it or remove the dependency array.",["1208"],"'usePegPoolApprove' is defined but never used.","eqeqeq","Expected '===' and instead saw '=='.","BinaryExpression","unexpected","'copyErrorDetails' is assigned a value but never used.","'StyledLink' is assigned a value but never used.","'useBondStats' is defined but never used.","'ChainId' is defined but never used.","React Hook useCallback has a missing dependency: 'refreshPool'. Either include it or remove the dependency array.",["1209"],"React Hook useEffect has a missing dependency: 'bombFinance.contracts.PegPool'. Either include it or remove the dependency array.",["1210"],["1211"],"React Hook useEffect has a missing dependency: 'checkRewards'. Either include it or remove the dependency array.",["1212"],"'useWithdraw' is defined but never used.","'useGrapeStats' is defined but never used.","React Hook useMemo has missing dependencies: 'bank.contract' and 'userDetails'. Either include them or remove the dependency array.",["1213"],"React Hook useMemo has a missing dependency: 'bank.earnTokenName'. Either include it or remove the dependency array.",["1214"],"'useSodapressUserInfo' is defined but never used.","'ExtinctionPoolInfo' is defined but never used.","'ExtinctionRewardToken' is defined but never used.","'LightPoolStats' is defined but never used.","'bankDefinitions' is defined but never used.","'Console' is defined but never used.","'priceOfSharesInDollars' is assigned a value but never used.","Expected '!==' and instead saw '!='.","'JsonRpcProvider' is defined but never used.",["1215"],"'PressUserInfo' is defined but never used.","React Hook useEffect has a missing dependency: 'press'. Either include it or remove the dependency array. If 'setUsers' needs the current value of 'press', you can also switch to useReducer instead of useState and read 'press' in the reducer.",["1216"],"'Label' is defined but never used.","'estimate' is assigned a value but never used.","'mimAmountPerLP' is assigned a value but never used.","'normalizeOrder' is defined but never used.","'tokenA' is assigned a value but never used.","'tokenB' is assigned a value but never used.","'StyledDescriptionText' is assigned a value but never used.","React Hook useMemo has unnecessary dependencies: 'grapeFinance' and 'token'. Either exclude them or remove the dependency array.",["1217"],"React Hook useCallback has a missing dependency: 'poolAddress'. Either include it or remove the dependency array. If 'setBalance' needs the current value of 'poolAddress', you can also switch to useReducer instead of useState and read 'poolAddress' in the reducer.",["1218"],"'BigNumber' is defined but never used.","React Hook useEffect has a missing dependency: 'pressName'. Either include it or remove the dependency array. If 'setPressLottoInfo' needs the current value of 'pressName', you can also switch to useReducer instead of useState and read 'pressName' in the reducer.",["1219"],"React Hook useEffect has a missing dependency: 'sectionInUI'. Either include it or remove the dependency array.",["1220"],"'batch' is defined but never used.","React Hook useEffect has a missing dependency: 'banks'. Either include it or remove the dependency array. If 'setStat' needs the current value of 'banks', you can also switch to useReducer instead of useState and read 'banks' in the reducer.",["1221"],"'GridItem' is defined but never used.","react/jsx-no-target-blank","Using target=\"_blank\" without rel=\"noreferrer\" (which implies rel=\"noopener\") is a security risk in older browsers: see https://mathiasbynens.github.io/rel-noopener/#recommendations","JSXOpeningElement","noTargetBlankWithoutNoreferrer",{"range":"1222","text":"1223"},"React Hook useMemo has an unnecessary dependency: 'tokenName'. Either exclude it or remove the dependency array.",["1224"],"'Typography' is defined but never used.","'grapeImg' is defined but never used.","'nodesImg' is defined but never used.","'soda' is defined but never used.","React Hook useMemo has a missing dependency: 'getTotalPriceForNodes'. Either include it or remove the dependency array.",["1225"],"React Hook useMemo has missing dependencies: 'displayGrapeBalance', 'displayVintageBalance', 'displayWineBalance', 'displayXGrapeBalance', 'grapePriceInDollars', 'vintagePrice', 'winePriceInDollars', and 'xGrapePrice'. Either include them or remove the dependency array.",["1226"],"no-global-assign","no-unsafe-negation",{"desc":"1227","fix":"1228"},{"desc":"1229","fix":"1230"},{"desc":"1231","fix":"1232"},{"desc":"1233","fix":"1234"},{"desc":"1235","fix":"1236"},{"desc":"1237","fix":"1238"},{"desc":"1235","fix":"1239"},{"desc":"1240","fix":"1241"},{"desc":"1242","fix":"1243"},{"desc":"1244","fix":"1245"},{"desc":"1246","fix":"1247"},{"desc":"1248","fix":"1249"},{"desc":"1250","fix":"1251"},{"desc":"1252","fix":"1253"},{"desc":"1254","fix":"1255"},{"desc":"1256","fix":"1257"},{"desc":"1258","fix":"1259"},[4925,4925]," rel=\"noreferrer\"",{"desc":"1260","fix":"1261"},{"desc":"1262","fix":"1263"},{"desc":"1264","fix":"1265"},"Update the dependencies array to be: [updateVesting]",{"range":"1266","text":"1267"},"Update the dependencies array to be: [setStat, grapeFinance, fastRefresh, account, raffleAddress]",{"range":"1268","text":"1269"},"Update the dependencies array to be: [bombFinance, isUnlocked, pegPool]",{"range":"1270","text":"1271"},"Update the dependencies array to be: [bombFinance, fetchPool, isUnlocked, refreshPool, slowRefresh]",{"range":"1272","text":"1273"},"Update the dependencies array to be: [handleTransactionReceipt, bombFinance, pool.depositTokenName, refreshPool]",{"range":"1274","text":"1275"},"Update the dependencies array to be: [bombFinance.contracts.PegPool, isUnlocked]",{"range":"1276","text":"1277"},{"range":"1278","text":"1275"},"Update the dependencies array to be: [checkRewards, rewardTokens]",{"range":"1279","text":"1280"},"Update the dependencies array to be: [bank.contract, dailyRewards, userDetails, computedUserNode, poolStats]",{"range":"1281","text":"1282"},"Update the dependencies array to be: [bank.earnTokenName, lpTokenStats?.priceOfOne, grapeStats?.priceInDollars]",{"range":"1283","text":"1284"},"Update the dependencies array to be: [bombFinance, handleTransactionReceipt, refreshPool]",{"range":"1285","text":"1286"},"Update the dependencies array to be: [setUsers, grapeFinance, slowRefresh, grapeFinance.myAccount, press]",{"range":"1287","text":"1288"},"Update the dependencies array to be: [currentAllowance, pendingApproval]",{"range":"1289","text":"1290"},"Update the dependencies array to be: [token, poolAddress]",{"range":"1291","text":"1292"},"Update the dependencies array to be: [setPressLottoInfo, grapeFinance, slowRefresh, pressName]",{"range":"1293","text":"1294"},"Update the dependencies array to be: [poolName, setAmount, grapeFinance, fetchAmount, sectionInUI]",{"range":"1295","text":"1296"},"Update the dependencies array to be: [setStat, grapeFinance, slowRefresh, banks]",{"range":"1297","text":"1298"},"Update the dependencies array to be: [max]",{"range":"1299","text":"1300"},"Update the dependencies array to be: [nodeRewardPoolStats, grapePriceInDollars, allTicketsFromNodes, winePriceInDollars, grapeMimSWPriceInDollars, userNftTickets, userNodeTickets, account, getTotalPriceForNodes]",{"range":"1301","text":"1302"},"Update the dependencies array to be: [walletStats, account, displayGrapeBalance, grapePriceInDollars, displayWineBalance, winePriceInDollars, displayXGrapeBalance, xGrapePrice, displayVintageBalance, vintagePrice]",{"range":"1303","text":"1304"},[1597,1599],"[updateVesting]",[648,684],"[setStat, grapeFinance, fastRefresh, account, raffleAddress]",[2775,2796],"[bombFinance, isUnlocked, pegPool]",[782,831],"[bombFinance, fetchPool, isUnlocked, refreshPool, slowRefresh]",[872,917],"[handleTransactionReceipt, bombFinance, pool.depositTokenName, refreshPool]",[1150,1162],"[bombFinance.contracts.PegPool, isUnlocked]",[888,933],[1265,1279],"[checkRewards, rewardTokens]",[5430,5473],"[bank.contract, dailyRewards, userDetails, computedUserNode, poolStats]",[6024,6050],"[bank.earnTokenName, lpTokenStats?.priceOfOne, grapeStats?.priceInDollars]",[638,677],"[bombFinance, handleTransactionReceipt, refreshPool]",[678,739],"[setUsers, grapeFinance, slowRefresh, grapeFinance.myAccount, press]",[1789,1845],"[currentAllowance, pendingApproval]",[550,581],"[token, poolAddress]",[659,705],"[setPressLottoInfo, grapeFinance, slowRefresh, pressName]",[928,976],"[poolName, setAmount, grapeFinance, fetchAmount, sectionInUI]",[609,645],"[setStat, grapeFinance, slowRefresh, banks]",[1447,1463],"[max]",[6255,6452],"[nodeRewardPoolStats, grapePriceInDollars, allTicketsFromNodes, winePriceInDollars, grapeMimSWPriceInDollars, userNftTickets, userNodeTickets, account, getTotalPriceForNodes]",[7082,7104],"[walletStats, account, displayGrapeBalance, grapePriceInDollars, displayWineBalance, winePriceInDollars, displayXGrapeBalance, xGrapePrice, displayVintageBalance, vintagePrice]"]