From ed3906bc445cbc56862a7fa5b1055cb96d619b00 Mon Sep 17 00:00:00 2001 From: Joseph Bergeron Date: Tue, 21 Jun 2022 00:22:02 -0400 Subject: [PATCH 1/2] Add Mobius farm support --- src/constants/abis/LiquidityGauge.json | 548 ++++++++++ src/constants/abis/RevoMobiusFarmBot.json | 1189 +++++++++++++++++++++ src/pages/Compound/useFarmBotRegistry.ts | 111 +- src/pages/Compound/useFarmBotRewards.ts | 16 +- src/pages/Zap/index.tsx | 34 +- 5 files changed, 1851 insertions(+), 47 deletions(-) create mode 100644 src/constants/abis/LiquidityGauge.json create mode 100644 src/constants/abis/RevoMobiusFarmBot.json diff --git a/src/constants/abis/LiquidityGauge.json b/src/constants/abis/LiquidityGauge.json new file mode 100644 index 00000000000..cfbc5f6c7b4 --- /dev/null +++ b/src/constants/abis/LiquidityGauge.json @@ -0,0 +1,548 @@ +[ + { + "type": "event", + "name": "Deposit", + "inputs": [ + { "type": "address", "name": "provider", "indexed": true }, + { "type": "uint256", "name": "value", "indexed": false } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Withdraw", + "inputs": [ + { "type": "address", "name": "provider", "indexed": true }, + { "type": "uint256", "name": "value", "indexed": false } + ], + "anonymous": false + }, + { + "type": "event", + "name": "UpdateLiquidityLimit", + "inputs": [ + { "type": "address", "name": "user", "indexed": false }, + { "type": "uint256", "name": "original_balance", "indexed": false }, + { "type": "uint256", "name": "original_supply", "indexed": false }, + { "type": "uint256", "name": "working_balance", "indexed": false }, + { "type": "uint256", "name": "working_supply", "indexed": false } + ], + "anonymous": false + }, + { + "type": "event", + "name": "CommitOwnership", + "inputs": [{ "type": "address", "name": "admin", "indexed": false }], + "anonymous": false + }, + { + "type": "event", + "name": "ApplyOwnership", + "inputs": [{ "type": "address", "name": "admin", "indexed": false }], + "anonymous": false + }, + { + "type": "event", + "name": "Transfer", + "inputs": [ + { "type": "address", "name": "_from", "indexed": true }, + { "type": "address", "name": "_to", "indexed": true }, + { "type": "uint256", "name": "_value", "indexed": false } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Approval", + "inputs": [ + { "type": "address", "name": "_owner", "indexed": true }, + { "type": "address", "name": "_spender", "indexed": true }, + { "type": "uint256", "name": "_value", "indexed": false } + ], + "anonymous": false + }, + { + "type": "constructor", + "stateMutability": "nonpayable", + "outputs": [], + "inputs": [ + { "type": "address", "name": "_lp_token" }, + { "type": "address", "name": "_minter" }, + { "type": "address", "name": "_admin" } + ] + }, + { + "type": "function", + "stateMutability": "view", + "outputs": [{ "type": "uint256", "name": "" }], + "name": "decimals", + "inputs": [], + "gas": 288 + }, + { + "type": "function", + "stateMutability": "view", + "outputs": [{ "type": "uint256", "name": "" }], + "name": "integrate_checkpoint", + "inputs": [], + "gas": 4624 + }, + { + "type": "function", + "stateMutability": "nonpayable", + "outputs": [{ "type": "bool", "name": "" }], + "name": "user_checkpoint", + "inputs": [{ "type": "address", "name": "addr" }], + "gas": 3133638 + }, + { + "type": "function", + "stateMutability": "nonpayable", + "outputs": [{ "type": "uint256", "name": "" }], + "name": "claimable_tokens", + "inputs": [{ "type": "address", "name": "addr" }], + "gas": 3046705 + }, + { + "type": "function", + "stateMutability": "view", + "outputs": [{ "type": "address", "name": "" }], + "name": "reward_contract", + "inputs": [], + "gas": 2718 + }, + { + "type": "function", + "stateMutability": "view", + "outputs": [{ "type": "uint256", "name": "" }], + "name": "last_claim", + "inputs": [], + "gas": 2544 + }, + { + "type": "function", + "stateMutability": "view", + "outputs": [{ "type": "uint256", "name": "" }], + "name": "claimed_reward", + "inputs": [ + { "type": "address", "name": "_addr" }, + { "type": "address", "name": "_token" } + ], + "gas": 3066 + }, + { + "type": "function", + "stateMutability": "view", + "outputs": [{ "type": "uint256", "name": "" }], + "name": "claimable_reward", + "inputs": [ + { "type": "address", "name": "_addr" }, + { "type": "address", "name": "_token" } + ], + "gas": 3034 + }, + { + "type": "function", + "stateMutability": "nonpayable", + "outputs": [{ "type": "uint256", "name": "" }], + "name": "claimable_reward_write", + "inputs": [ + { "type": "address", "name": "_addr" }, + { "type": "address", "name": "_token" } + ], + "gas": 1211018 + }, + { + "type": "function", + "stateMutability": "nonpayable", + "outputs": [], + "name": "set_rewards_receiver", + "inputs": [{ "type": "address", "name": "_receiver" }], + "gas": 35733 + }, + { "type": "function", "stateMutability": "nonpayable", "outputs": [], "name": "claim_rewards", "inputs": [] }, + { + "type": "function", + "stateMutability": "nonpayable", + "outputs": [], + "name": "claim_rewards", + "inputs": [{ "type": "address", "name": "_addr" }] + }, + { + "type": "function", + "stateMutability": "nonpayable", + "outputs": [], + "name": "claim_rewards", + "inputs": [ + { "type": "address", "name": "_addr" }, + { "type": "address", "name": "_receiver" } + ] + }, + { + "type": "function", + "stateMutability": "nonpayable", + "outputs": [], + "name": "kick", + "inputs": [{ "type": "address", "name": "addr" }], + "gas": 3148229 + }, + { + "type": "function", + "stateMutability": "nonpayable", + "outputs": [], + "name": "deposit", + "inputs": [{ "type": "uint256", "name": "_value" }] + }, + { + "type": "function", + "stateMutability": "nonpayable", + "outputs": [], + "name": "deposit", + "inputs": [ + { "type": "uint256", "name": "_value" }, + { "type": "address", "name": "_addr" } + ] + }, + { + "type": "function", + "stateMutability": "nonpayable", + "outputs": [], + "name": "deposit", + "inputs": [ + { "type": "uint256", "name": "_value" }, + { "type": "address", "name": "_addr" }, + { "type": "bool", "name": "_claim_rewards" } + ] + }, + { + "type": "function", + "stateMutability": "nonpayable", + "outputs": [], + "name": "withdraw", + "inputs": [{ "type": "uint256", "name": "_value" }] + }, + { + "type": "function", + "stateMutability": "nonpayable", + "outputs": [], + "name": "withdraw", + "inputs": [ + { "type": "uint256", "name": "_value" }, + { "type": "bool", "name": "_claim_rewards" } + ] + }, + { + "type": "function", + "stateMutability": "nonpayable", + "outputs": [{ "type": "bool", "name": "" }], + "name": "transfer", + "inputs": [ + { "type": "address", "name": "_to" }, + { "type": "uint256", "name": "_value" } + ], + "gas": 17172316 + }, + { + "type": "function", + "stateMutability": "nonpayable", + "outputs": [{ "type": "bool", "name": "" }], + "name": "transferFrom", + "inputs": [ + { "type": "address", "name": "_from" }, + { "type": "address", "name": "_to" }, + { "type": "uint256", "name": "_value" } + ], + "gas": 17210266 + }, + { + "type": "function", + "stateMutability": "nonpayable", + "outputs": [{ "type": "bool", "name": "" }], + "name": "approve", + "inputs": [ + { "type": "address", "name": "_spender" }, + { "type": "uint256", "name": "_value" } + ], + "gas": 38211 + }, + { + "type": "function", + "stateMutability": "nonpayable", + "outputs": [{ "type": "bool", "name": "" }], + "name": "increaseAllowance", + "inputs": [ + { "type": "address", "name": "_spender" }, + { "type": "uint256", "name": "_added_value" } + ], + "gas": 40755 + }, + { + "type": "function", + "stateMutability": "nonpayable", + "outputs": [{ "type": "bool", "name": "" }], + "name": "decreaseAllowance", + "inputs": [ + { "type": "address", "name": "_spender" }, + { "type": "uint256", "name": "_subtracted_value" } + ], + "gas": 40779 + }, + { + "type": "function", + "stateMutability": "nonpayable", + "outputs": [], + "name": "set_rewards", + "inputs": [ + { "type": "address", "name": "_reward_contract" }, + { "type": "bytes32", "name": "_sigs" }, + { "type": "address[8]", "name": "_reward_tokens" } + ], + "gas": 2743591 + }, + { + "type": "function", + "stateMutability": "nonpayable", + "outputs": [], + "name": "set_killed", + "inputs": [{ "type": "bool", "name": "_is_killed" }], + "gas": 38145 + }, + { + "type": "function", + "stateMutability": "nonpayable", + "outputs": [], + "name": "commit_transfer_ownership", + "inputs": [{ "type": "address", "name": "addr" }], + "gas": 39525 + }, + { + "type": "function", + "stateMutability": "nonpayable", + "outputs": [], + "name": "accept_transfer_ownership", + "inputs": [], + "gas": 39470 + }, + { + "type": "function", + "stateMutability": "view", + "outputs": [{ "type": "address", "name": "" }], + "name": "minter", + "inputs": [], + "gas": 3078 + }, + { + "type": "function", + "stateMutability": "view", + "outputs": [{ "type": "address", "name": "" }], + "name": "crv_token", + "inputs": [], + "gas": 3108 + }, + { + "type": "function", + "stateMutability": "view", + "outputs": [{ "type": "address", "name": "" }], + "name": "lp_token", + "inputs": [], + "gas": 3138 + }, + { + "type": "function", + "stateMutability": "view", + "outputs": [{ "type": "address", "name": "" }], + "name": "controller", + "inputs": [], + "gas": 3168 + }, + { + "type": "function", + "stateMutability": "view", + "outputs": [{ "type": "address", "name": "" }], + "name": "voting_escrow", + "inputs": [], + "gas": 3198 + }, + { + "type": "function", + "stateMutability": "view", + "outputs": [{ "type": "uint256", "name": "" }], + "name": "future_epoch_time", + "inputs": [], + "gas": 3228 + }, + { + "type": "function", + "stateMutability": "view", + "outputs": [{ "type": "uint256", "name": "" }], + "name": "balanceOf", + "inputs": [{ "type": "address", "name": "arg0" }], + "gas": 3473 + }, + { + "type": "function", + "stateMutability": "view", + "outputs": [{ "type": "uint256", "name": "" }], + "name": "totalSupply", + "inputs": [], + "gas": 3288 + }, + { + "type": "function", + "stateMutability": "view", + "outputs": [{ "type": "uint256", "name": "" }], + "name": "allowance", + "inputs": [ + { "type": "address", "name": "arg0" }, + { "type": "address", "name": "arg1" } + ], + "gas": 3748 + }, + { + "type": "function", + "stateMutability": "view", + "outputs": [{ "type": "string", "name": "" }], + "name": "name", + "inputs": [], + "gas": 13650 + }, + { + "type": "function", + "stateMutability": "view", + "outputs": [{ "type": "string", "name": "" }], + "name": "symbol", + "inputs": [], + "gas": 11403 + }, + { + "type": "function", + "stateMutability": "view", + "outputs": [{ "type": "uint256", "name": "" }], + "name": "working_balances", + "inputs": [{ "type": "address", "name": "arg0" }], + "gas": 3623 + }, + { + "type": "function", + "stateMutability": "view", + "outputs": [{ "type": "uint256", "name": "" }], + "name": "working_supply", + "inputs": [], + "gas": 3438 + }, + { + "type": "function", + "stateMutability": "view", + "outputs": [{ "type": "int128", "name": "" }], + "name": "period", + "inputs": [], + "gas": 3468 + }, + { + "type": "function", + "stateMutability": "view", + "outputs": [{ "type": "uint256", "name": "" }], + "name": "period_timestamp", + "inputs": [{ "type": "uint256", "name": "arg0" }], + "gas": 3607 + }, + { + "type": "function", + "stateMutability": "view", + "outputs": [{ "type": "uint256", "name": "" }], + "name": "integrate_inv_supply", + "inputs": [{ "type": "uint256", "name": "arg0" }], + "gas": 3637 + }, + { + "type": "function", + "stateMutability": "view", + "outputs": [{ "type": "uint256", "name": "" }], + "name": "integrate_inv_supply_of", + "inputs": [{ "type": "address", "name": "arg0" }], + "gas": 3773 + }, + { + "type": "function", + "stateMutability": "view", + "outputs": [{ "type": "uint256", "name": "" }], + "name": "integrate_checkpoint_of", + "inputs": [{ "type": "address", "name": "arg0" }], + "gas": 3803 + }, + { + "type": "function", + "stateMutability": "view", + "outputs": [{ "type": "uint256", "name": "" }], + "name": "integrate_fraction", + "inputs": [{ "type": "address", "name": "arg0" }], + "gas": 3833 + }, + { + "type": "function", + "stateMutability": "view", + "outputs": [{ "type": "uint256", "name": "" }], + "name": "inflation_rate", + "inputs": [], + "gas": 3648 + }, + { + "type": "function", + "stateMutability": "view", + "outputs": [{ "type": "address", "name": "" }], + "name": "reward_tokens", + "inputs": [{ "type": "uint256", "name": "arg0" }], + "gas": 3787 + }, + { + "type": "function", + "stateMutability": "view", + "outputs": [{ "type": "address", "name": "" }], + "name": "rewards_receiver", + "inputs": [{ "type": "address", "name": "arg0" }], + "gas": 3923 + }, + { + "type": "function", + "stateMutability": "view", + "outputs": [{ "type": "uint256", "name": "" }], + "name": "reward_integral", + "inputs": [{ "type": "address", "name": "arg0" }], + "gas": 3953 + }, + { + "type": "function", + "stateMutability": "view", + "outputs": [{ "type": "uint256", "name": "" }], + "name": "reward_integral_for", + "inputs": [ + { "type": "address", "name": "arg0" }, + { "type": "address", "name": "arg1" } + ], + "gas": 4198 + }, + { + "type": "function", + "stateMutability": "view", + "outputs": [{ "type": "address", "name": "" }], + "name": "admin", + "inputs": [], + "gas": 3798 + }, + { + "type": "function", + "stateMutability": "view", + "outputs": [{ "type": "address", "name": "" }], + "name": "future_admin", + "inputs": [], + "gas": 3828 + }, + { + "type": "function", + "stateMutability": "view", + "outputs": [{ "type": "bool", "name": "" }], + "name": "is_killed", + "inputs": [], + "gas": 3858 + } +] diff --git a/src/constants/abis/RevoMobiusFarmBot.json b/src/constants/abis/RevoMobiusFarmBot.json new file mode 100644 index 00000000000..2c740a5930e --- /dev/null +++ b/src/constants/abis/RevoMobiusFarmBot.json @@ -0,0 +1,1189 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "RevoMobiusFarmBot", + "sourceName": "contracts/farms/RevoMobiusFarmBot.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + }, + { + "internalType": "address", + "name": "_reserveAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "_stakingToken", + "type": "address" + }, + { + "internalType": "address", + "name": "_revoFees", + "type": "address" + }, + { + "internalType": "address[]", + "name": "_rewardsTokens", + "type": "address[]" + }, + { + "internalType": "address", + "name": "_liquidityGauge", + "type": "address" + }, + { + "internalType": "address", + "name": "_minter", + "type": "address" + }, + { + "internalType": "address", + "name": "_router", + "type": "address" + }, + { + "internalType": "address", + "name": "_swap", + "type": "address" + }, + { + "internalType": "uint8", + "name": "_celoNativeStakingTokenIndex", + "type": "uint8" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "by", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "lpStaked", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newLPTotalBalance", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "compounderFeeAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "reserveFeeAmount", + "type": "uint256" + } + ], + "name": "Compound", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "by", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "lpAmount", + "type": "uint256" + } + ], + "name": "Deposit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "by", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newRoleRecipient", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "GrantRole", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Paused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "by", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "reserveAddress", + "type": "address" + } + ], + "name": "ReserveUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "by", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "numerator", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "denominator", + "type": "uint256" + } + ], + "name": "SlippageUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Unpaused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "by", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "lpAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "fee", + "type": "uint256" + } + ], + "name": "Withdraw", + "type": "event" + }, + { + "inputs": [], + "name": "COMPOUNDER_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "bridgedStakingTokenIndex", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "celoNativeStakingToken", + "outputs": [ + { + "internalType": "contract IERC20", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "celoNativeStakingTokenIndex", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[][]", + "name": "_paths", + "type": "address[][]" + }, + { + "internalType": "uint256[]", + "name": "_minAmountsOut", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "_minSwapOut", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_minLiquidity", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_deadline", + "type": "uint256" + } + ], + "name": "compound", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "subtractedValue", + "type": "uint256" + } + ], + "name": "decreaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_lpAmount", + "type": "uint256" + } + ], + "name": "deposit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_lpAmount", + "type": "uint256" + } + ], + "name": "getFpAmount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_fpAmount", + "type": "uint256" + } + ], + "name": "getLpAmount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "addedValue", + "type": "uint256" + } + ], + "name": "increaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "interestEarnedDenominator", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "interestEarnedNumerator", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "liquidityGauge", + "outputs": [ + { + "internalType": "contract ILiquidityGaugeV3", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lpTotalBalance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maxPerformanceFeeDenominator", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maxPerformanceFeeNumerator", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maxWithdrawalFeeDenominator", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maxWithdrawalFeeNumerator", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "minter", + "outputs": [ + { + "internalType": "contract IMinter", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "reserveAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "revoFees", + "outputs": [ + { + "internalType": "contract IRevoFees", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "rewardsTokens", + "outputs": [ + { + "internalType": "contract IERC20", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "router", + "outputs": [ + { + "internalType": "contract IUniswapV2Router02SwapOnly", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "slippageDenominator", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "slippageNumerator", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "stakingToken", + "outputs": [ + { + "internalType": "contract IERC20", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "stakingToken0", + "outputs": [ + { + "internalType": "contract IERC20", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "stakingToken1", + "outputs": [ + { + "internalType": "contract IERC20", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "swap", + "outputs": [ + { + "internalType": "contract ISwap", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "unpause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_reserveAddress", + "type": "address" + } + ], + "name": "updateReserveAddress", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_slippageNumerator", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_slippageDenominator", + "type": "uint256" + } + ], + "name": "updateSlippage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_lpAmount", + "type": "uint256" + } + ], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "withdrawAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x6080604052612710600a556063600b556064600c553480156200002157600080fd5b5060405162004d7e38038062004d7e8339810160408190526200004491620006b1565b8a8a8a8a846040518060400160405280600d81526020016c2932bb37902328102a37b5b2b760991b81525081816003908051906020019062000088929190620004e4565b5080516200009e906004906020840190620004e4565b50506006805460ff1916905550600d80546001600160a01b038085166001600160a01b03199283161790925560088054868416908316179055600e805492871692909116919091179055620000f56000866200041d565b6040516001600160a01b0386169033907fe7442843a65013dba5eebc77d5a00f5fafa588af0da4bf39250936d4783bb5539062000135906000906200081a565b60405180910390a35050601380546001600160a01b03808c166001600160a01b031992831617909255601580548a841690831617905560168054898416908316811790915560148054938c169390921692909217905560405162415c3360e91b81529093506382b866009250620001b391506000906004016200082a565b60206040518083038186803b158015620001cc57600080fd5b505afa158015620001e1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002079190620007e6565b600f80546001600160a01b0319166001600160a01b0392831617905560165460405162415c3360e91b81529116906382b86600906200024c906001906004016200082a565b60206040518083038186803b1580156200026557600080fd5b505afa1580156200027a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a09190620007e6565b601080546001600160a01b0319166001600160a01b039290921691909117905560005b875181101562000340576011888281518110620002f057634e487b7160e01b600052603260045260246000fd5b60209081029190910181015182546001810184556000938452919092200180546001600160a01b0319166001600160a01b03909216919091179055806200033781620009ed565b915050620002c3565b5060018260ff161115620003715760405162461bcd60e51b815260040162000368906200083a565b60405180910390fd5b6012805460ff191660ff8416908117909155620003909060016200090e565b6012805460ff9283166101000261ff001982168117909255908216911617620003e257600f546012805462010000600160b01b0319166001600160a01b0390921662010000029190911790556200040c565b6010546012805462010000600160b01b0319166001600160a01b0390921662010000029190911790555b505050505050505050505062000a7c565b6200042982826200042d565b5050565b620004398282620004b7565b620004295760008281526005602090815260408083206001600160a01b03851684529091529020805460ff19166001179055620004733390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526005602090815260408083206001600160a01b038516845290915290205460ff165b92915050565b828054620004f2906200098d565b90600052602060002090601f01602090048101928262000516576000855562000561565b82601f106200053157805160ff191683800117855562000561565b8280016001018555821562000561579182015b828111156200056157825182559160200191906001019062000544565b506200056f92915062000573565b5090565b5b808211156200056f576000815560010162000574565b6000620005a16200059b84620008bb565b6200089c565b90508083825260208201905082856020860282011115620005c157600080fd5b60005b85811015620005f15781620005da88826200063a565b8452506020928301929190910190600101620005c4565b5050509392505050565b60006200060c6200059b84620008e1565b9050828152602081018484840111156200062557600080fd5b620006328482856200095a565b509392505050565b8051620004de8162000a4d565b600082601f8301126200065957600080fd5b81516200066b8482602086016200058a565b949350505050565b8051620004de8162000a67565b600082601f8301126200069257600080fd5b81516200066b848260208601620005fb565b8051620004de8162000a72565b60008060008060008060008060008060006101608c8e031215620006d457600080fd5b6000620006e28e8e6200063a565b9b50506020620006f58e828f016200063a565b9a50506040620007088e828f016200063a565b99505060606200071b8e828f016200063a565b98505060808c01516001600160401b038111156200073857600080fd5b620007468e828f0162000647565b97505060a0620007598e828f016200063a565b96505060c06200076c8e828f016200063a565b95505060e06200077f8e828f016200063a565b945050610100620007938e828f016200063a565b935050610120620007a78e828f01620006a4565b9250506101408c01516001600160401b03811115620007c557600080fd5b620007d38e828f0162000680565b9150509295989b509295989b9093969950565b600060208284031215620007f957600080fd5b60006200066b848462000673565b805b82525050565b62000809816200094e565b60208101620004de828462000807565b60208101620004de82846200080f565b60208082528101620004de81603381527f496e646578206f662043656c6f2d6e617469766520746f6b656e20696e20746860208201527f65204c50206d7573742062652030206f72203100000000000000000000000000604082015260600190565b6000620008a860405190565b9050620008b68282620009be565b919050565b60006001600160401b03821115620008d757620008d762000a37565b5060209081020190565b60006001600160401b03821115620008fd57620008fd62000a37565b601f19601f83011660200192915050565b60ff91821691166000828210156200092a576200092a62000a0b565b500390565b60006001600160a01b038216620004de565b6000620004de826200092f565b600060ff8216620004de565b60005b83811015620009775781810151838201526020016200095d565b8381111562000987576000848401525b50505050565b600281046001821680620009a257607f821691505b60208210811415620009b857620009b862000a21565b50919050565b601f19601f83011681018181106001600160401b0382111715620009e657620009e662000a37565b6040525050565b600060001982141562000a045762000a0462000a0b565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b62000a58816200092f565b811462000a6457600080fd5b50565b62000a588162000941565b60ff811662000a58565b6142f28062000a8c6000396000f3fe608060405234801561001057600080fd5b506004361061034c5760003560e01c80638119c065116101bd578063c305f5dd116100f9578063dbae9b0f116100a2578063f84afd481161007c578063f84afd48146106fe578063f887ea4014610711578063f9a0be6814610724578063fd3865e11461073757600080fd5b8063dbae9b0f1461069d578063dd62ed3e146106a5578063f79ed94b146106de57600080fd5b8063c9ce0e8c116100d3578063c9ce0e8c1461066e578063d484064114610681578063d547741f1461068a57600080fd5b8063c305f5dd14610644578063c7493abb1461065d578063c838b0741461066557600080fd5b80639b26360711610166578063a457c2d711610140578063a457c2d7146105f8578063a9059cbb1461060b578063b6b55f251461061e578063b6d0dcd81461063157600080fd5b80639b263607146105cb5780639f27a6e9146105dd578063a217fddf146105f057600080fd5b80638c00ca9d116101975780638c00ca9d1461057757806391d148541461058a57806395d89b41146105c357600080fd5b80638119c065146105545780638456cb5914610567578063853828b61461056f57600080fd5b8063313ce5671161028c5780634fb5cd4c11610235578063684cb2741161020f578063684cb274146104de57806370a082311461050557806372f702f31461052e5780637aca573c1461054157600080fd5b80634fb5cd4c146104b35780635c975abb146104c05780635f8e9e91146104cb57600080fd5b80633950935111610266578063395093511461048f5780633f4ba83a146104a25780634a1510b4146104aa57600080fd5b8063313ce5671461046357806336568abe146104735780633902cbff1461048657600080fd5b806318160ddd116102f957806327b74a5d116102d357806327b74a5d146104295780632e1a7d4d146104325780632e5bd7ab146104475780632f2ff15d1461045057600080fd5b806318160ddd146103eb57806323b872dd146103f3578063248a9ca31461040657600080fd5b8063095ea7b31161032a578063095ea7b3146103af5780630ab8985b146103c2578063147bd3af146103d557600080fd5b806301ffc9a71461035157806306fdde031461037a578063075461721461038f575b600080fd5b61036461035f3660046131cd565b61074a565b6040516103719190613daa565b60405180910390f35b6103826107b3565b6040516103719190613dd4565b6014546103a2906001600160a01b031681565b6040516103719190613dc6565b6103646103bd366004613069565b610845565b6010546103a2906001600160a01b031681565b6103de600b5481565b6040516103719190613db8565b6002546103de565b61036461040136600461301c565b61085b565b6103de610414366004613190565b60009081526005602052604090206001015490565b6103de60075481565b610445610440366004613190565b6108d6565b005b6103de61271081565b61044561045e3660046131ae565b610cc4565b60125b604051610371919061406a565b6104456104813660046131ae565b610d39565b6103de600a5481565b61036461049d366004613069565b610d6f565b610445610da6565b6103de6103e881565b6012546104669060ff1681565b60065460ff16610364565b6103de6104d9366004613190565b610e4b565b6103de7f29944e936a0f6e1cbaa227df218d7d6025c2a2785db840e42a3425f24e9e68ac81565b6103de610513366004612fc4565b6001600160a01b031660009081526020819052604090205490565b6008546103a2906001600160a01b031681565b600d546103a2906001600160a01b031681565b6016546103a2906001600160a01b031681565b610445610e81565b610445610e97565b610445610585366004613209565b610ee8565b6103646105983660046131ae565b60009182526005602090815260408084206001600160a01b0393909316845291905290205460ff1690565b610382610f3e565b60125461046690610100900460ff1681565b6104456105eb366004613099565b610f4d565b6103de600081565b610364610606366004613069565b6117f1565b610364610619366004613069565b61184e565b61044561062c366004613190565b61185b565b6103a261063f366004613190565b611a19565b6012546103a2906201000090046001600160a01b031681565b6103de601981565b6103de60095481565b6103de61067c366004613190565b611a43565b6103de600c5481565b6104456106983660046131ae565b611a64565b6103de602881565b6103de6106b3366004612fe2565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600e546106f1906001600160a01b031681565b6040516103719190613d1e565b61044561070c366004612fc4565b611a8e565b6015546103a2906001600160a01b031681565b6013546103a2906001600160a01b031681565b600f546103a2906001600160a01b031681565b60006001600160e01b031982167f7965db0b0000000000000000000000000000000000000000000000000000000014806107ad57507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b92915050565b6060600380546107c2906141a9565b80601f01602080910402602001604051908101604052809291908181526020018280546107ee906141a9565b801561083b5780601f106108105761010080835404028352916020019161083b565b820191906000526020600020905b81548152906001019060200180831161081e57829003601f168201915b5050505050905090565b6000610852338484611b24565b50600192915050565b6000610868848484611bcb565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156108b55760405162461bcd60e51b81526004016108ac90613ee5565b60405180910390fd5b6108c985336108c48685614133565b611b24565b60019150505b9392505050565b60405163327383a360e21b8152600090309063c9ce0e8c906108fc908590600401613db8565b60206040518083038186803b15801561091457600080fd5b505afa158015610928573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094c91906131eb565b3360009081526020819052604090205490915081111561097e5760405162461bcd60e51b81526004016108ac90613f45565b6008546040516370a0823160e01b81526000916001600160a01b0316906370a08231906109af903090600401613d1e565b60206040518083038186803b1580156109c757600080fd5b505afa1580156109db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ff91906131eb565b905080831115610a1b57610a1b610a168285614133565b611ce8565b600d54600954600a546040517f4ae2859c00000000000000000000000000000000000000000000000000000000815260009384936001600160a01b0390911692634ae2859c92610a6f929190600401613fd5565b604080518083038186803b158015610a8657600080fd5b505afa158015610a9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610abe9190613228565b9092509050600081610ad08785614114565b610ada9190614100565b905060006103e8610aec886028614114565b610af69190614100565b905080821115610b04578091505b600854600e5460405163a9059cbb60e01b81526000926001600160a01b039081169263a9059cbb92610b3e92909116908790600401613d6f565b602060405180830381600087803b158015610b5857600080fd5b505af1158015610b6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b909190613172565b905080610baf5760405162461bcd60e51b81526004016108ac90613f85565b6008546000906001600160a01b031663a9059cbb33610bce878d614133565b6040518363ffffffff1660e01b8152600401610beb929190613d6f565b602060405180830381600087803b158015610c0557600080fd5b505af1158015610c19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c3d9190613172565b905080610c5c5760405162461bcd60e51b81526004016108ac90613f05565b610c663389611d66565b8860076000828254610c789190614133565b909155505060405133907ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b56890610cb1908c908890613fd5565b60405180910390a2505050505050505050565b600082815260056020526040902060010154610cdf81611e40565b610ce98383611e4a565b816001600160a01b0316336001600160a01b03167fe7442843a65013dba5eebc77d5a00f5fafa588af0da4bf39250936d4783bb55385604051610d2c9190613db8565b60405180910390a3505050565b6001600160a01b0381163314610d615760405162461bcd60e51b81526004016108ac90613fb5565b610d6b8282611e6f565b5050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916108529185906108c49086906140e8565b6000610db181611e40565b610db9611ef2565b6008546040516370a0823160e01b81526000916001600160a01b0316906370a0823190610dea903090600401613d1e565b60206040518083038186803b158015610e0257600080fd5b505afa158015610e16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3a91906131eb565b90508015610d6b57610d6b81611f58565b6000610e5660025490565b610e6257506000919050565b600254600754610e729084614114565b6107ad9190614100565b919050565b6000610e8c81611e40565b610e94612001565b50565b3360009081526020819052604081205411610ec45760405162461bcd60e51b81526004016108ac90613ec5565b33600090815260208190526040812054610edd90610e4b565b9050610e94816108d6565b6000610ef381611e40565b600b839055600c82905560405133907fe8a0df875bece805d1b6bd1bf60bdf2abc88b51be72ed2bb5cd590532bc446a890610f319086908690613fd5565b60405180910390a2505050565b6060600480546107c2906141a9565b8042811015610f6e5760405162461bcd60e51b81526004016108ac90613e65565b7f29944e936a0f6e1cbaa227df218d7d6025c2a2785db840e42a3425f24e9e68ac610f9881611e40565b60065460ff1615610fbb5760405162461bcd60e51b81526004016108ac90613ea5565b601154875114610fdd5760405162461bcd60e51b81526004016108ac90613f25565b601154865114610fff5760405162461bcd60e51b81526004016108ac90613e85565b60005b8751811015611196576011818154811061102c57634e487b7160e01b600052603260045260246000fd5b60009182526020909120015488516001600160a01b039091169089908390811061106657634e487b7160e01b600052603260045260246000fd5b602002602001015160008151811061108e57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b0316146110bc5760405162461bcd60e51b81526004016108ac90613f55565b601260029054906101000a90046001600160a01b03166001600160a01b03168882815181106110fb57634e487b7160e01b600052603260045260246000fd5b602002602001015160018a848151811061112557634e487b7160e01b600052603260045260246000fd5b6020026020010151516111389190614133565b8151811061115657634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b0316146111845760405162461bcd60e51b81526004016108ac90613e95565b8061118e8161420b565b915050611002565b5061119f612059565b60115460009067ffffffffffffffff8111156111cb57634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156111f4578160200160208202803683370190505b50905060005b6011548110156112eb576011818154811061122557634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546040516370a0823160e01b81526001600160a01b03909116906370a082319061125e903090600401613d1e565b60206040518083038186803b15801561127657600080fd5b505afa15801561128a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ae91906131eb565b8282815181106112ce57634e487b7160e01b600052603260045260246000fd5b6020908102919091010152806112e38161420b565b9150506111fa565b5060005b6011548110156113dc5760155489516113c9916001600160a01b0316908b908490811061132c57634e487b7160e01b600052603260045260246000fd5b602002602001015184848151811061135457634e487b7160e01b600052603260045260246000fd5b60200260200101516011858154811061137d57634e487b7160e01b600052603260045260246000fd5b9060005260206000200160009054906101000a90046001600160a01b03168c86815181106113bb57634e487b7160e01b600052603260045260246000fd5b60200260200101518a612178565b50806113d48161420b565b9150506112ef565b506012546040516370a0823160e01b8152600091600291620100009091046001600160a01b0316906370a0823190611418903090600401613d1e565b60206040518083038186803b15801561143057600080fd5b505afa158015611444573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061146891906131eb565b6114729190614100565b601654601254919250611498916201000090046001600160a01b03908116911683612297565b6016546012546040517f916955860000000000000000000000000000000000000000000000000000000081526001600160a01b03909216916391695586916114f59160ff808316926101009004169086908d908c90600401614078565b602060405180830381600087803b15801561150f57600080fd5b505af1158015611523573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061154791906131eb565b50600f546040516370a0823160e01b81526000916001600160a01b0316906370a0823190611579903090600401613d1e565b60206040518083038186803b15801561159157600080fd5b505afa1580156115a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115c991906131eb565b6010546040516370a0823160e01b81529192506000916001600160a01b03909116906370a08231906115ff903090600401613d1e565b60206040518083038186803b15801561161757600080fd5b505afa15801561162b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061164f91906131eb565b905061165d60176000612d4a565b601780546001818101835560008390527fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c15918201859055825490810190925501819055601654600f546116bd916001600160a01b03918216911684612297565b6016546010546116da916001600160a01b03918216911683612297565b6016546040517f4d49e87d0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690634d49e87d90611728906017908c908c90600401613d8a565b602060405180830381600087803b15801561174257600080fd5b505af1158015611756573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177a91906131eb565b50600080600061178861238f565b92509250925061179783611f58565b6117a08361278b565b60075460405133917f36c54fe3f6742709ba65ab76880ce98cbacfc0e2f273d55f4e4d50d8830c2600916117d99187918790879061402c565b60405180910390a25050505050505050505050505050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156118355760405162461bcd60e51b81526004016108ac90613fa5565b61184433856108c48685614133565b5060019392505050565b6000610852338484611bcb565b60065460ff161561187e5760405162461bcd60e51b81526004016108ac90613ea5565b6008546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526000916001600160a01b0316906323b872dd906118cc90339030908790600401613d47565b602060405180830381600087803b1580156118e657600080fd5b505af11580156118fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061191e9190613172565b90508061193d5760405162461bcd60e51b81526004016108ac90613ef5565b60405163327383a360e21b8152600090309063c9ce0e8c90611963908690600401613db8565b60206040518083038186803b15801561197b57600080fd5b505afa15801561198f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119b391906131eb565b90506119bf33826127e5565b82600760008282546119d191906140e8565b909155506119e0905083611f58565b336001600160a01b03167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c84604051610f319190613db8565b60118181548110611a2957600080fd5b6000918252602090912001546001600160a01b0316905081565b600060075460001415611a54575090565b600754600254610e729084614114565b600082815260056020526040902060010154611a7f81611e40565b611a898383611e6f565b505050565b6000611a9981611e40565b6001600160a01b038216611abf5760405162461bcd60e51b81526004016108ac90613e35565b600e80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03841690811790915560405133907fbd45c5f5d28e3962d234f9fa4e443f6f92e4525b10556e441307306fab9f9e0390600090a35050565b6001600160a01b038316611b4a5760405162461bcd60e51b81526004016108ac90613f65565b6001600160a01b038216611b705760405162461bcd60e51b81526004016108ac90613e25565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610d2c908590613db8565b6001600160a01b038316611bf15760405162461bcd60e51b81526004016108ac90613f35565b6001600160a01b038216611c175760405162461bcd60e51b81526004016108ac90613df5565b6001600160a01b03831660009081526020819052604090205481811015611c505760405162461bcd60e51b81526004016108ac90613e45565b611c5a8282614133565b6001600160a01b038086166000908152602081905260408082209390935590851681529081208054849290611c909084906140e8565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611cda9190613db8565b60405180910390a350505050565b6013546040517f2e1a7d4d0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690632e1a7d4d90611d31908490600401613db8565b600060405180830381600087803b158015611d4b57600080fd5b505af1158015611d5f573d6000803e3d6000fd5b5050505050565b6001600160a01b038216611d8c5760405162461bcd60e51b81526004016108ac90613f15565b6001600160a01b03821660009081526020819052604090205481811015611dc55760405162461bcd60e51b81526004016108ac90613e15565b611dcf8282614133565b6001600160a01b03841660009081526020819052604081209190915560028054849290611dfd908490614133565b90915550506040516000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610d2c908690613db8565b610e948133612899565b600082815260056020526040902060010154611e6581611e40565b611a898383612919565b60008281526005602090815260408083206001600160a01b038516845290915290205460ff1615610d6b5760008281526005602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60065460ff16611f145760405162461bcd60e51b81526004016108ac90613e05565b6006805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b604051611f4e9190613d1e565b60405180910390a1565b60065460ff1615611f7b5760405162461bcd60e51b81526004016108ac90613ea5565b60008111611f9b5760405162461bcd60e51b81526004016108ac90613eb5565b601354600854611fb8916001600160a01b03918216911683612297565b6013546040517fb6b55f250000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063b6b55f2590611d31908490600401613db8565b60065460ff16156120245760405162461bcd60e51b81526004016108ac90613ea5565b6006805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611f413390565b60065460ff161561207c5760405162461bcd60e51b81526004016108ac90613ea5565b6014546013546040517f6a6278420000000000000000000000000000000000000000000000000000000081526001600160a01b0392831692636a627842926120c992911690600401613d1e565b600060405180830381600087803b1580156120e357600080fd5b505af11580156120f7573d6000803e3d6000fd5b50506013546040517f84e9bd7e0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506384e9bd7e9150612144903090600401613d1e565b600060405180830381600087803b15801561215e57600080fd5b505af1158015612172573d6000803e3d6000fd5b50505050565b6000600286511015801561218c5750600085115b1561228a576121a56001600160a01b0385168887612297565b6040517f38ed17390000000000000000000000000000000000000000000000000000000081526000906001600160a01b038916906338ed1739906121f590899088908c9030908a90600401613fe3565b600060405180830381600087803b15801561220f57600080fd5b505af1158015612223573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261224b919081019061313d565b9050806001825161225c9190614133565b8151811061227a57634e487b7160e01b600052603260045260246000fd5b602002602001015191505061228d565b50835b9695505050505050565b600081846001600160a01b031663dd62ed3e30866040518363ffffffff1660e01b81526004016122c8929190613d2c565b60206040518083038186803b1580156122e057600080fd5b505afa1580156122f4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231891906131eb565b61232291906140e8565b90506121728463095ea7b360e01b8584604051602401612343929190613d6f565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b0319909316929092179091526129bb565b60008060006123a060065460ff1690565b156123bd5760405162461bcd60e51b81526004016108ac90613ea5565b6008546040516370a0823160e01b81526000916001600160a01b0316906370a08231906123ee903090600401613d1e565b60206040518083038186803b15801561240657600080fd5b505afa15801561241a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061243e91906131eb565b600d546040517f92ce27f80000000000000000000000000000000000000000000000000000000081529192506001600160a01b0316906392ce27f890612488908490600401613db8565b60206040518083038186803b1580156124a057600080fd5b505afa1580156124b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124d891906131eb565b600d546040517f1deae18c0000000000000000000000000000000000000000000000000000000081529194506001600160a01b031690631deae18c90612522908490600401613db8565b60206040518083038186803b15801561253a57600080fd5b505afa15801561254e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061257291906131eb565b91506103e8612582602883614114565b61258c9190614100565b61259683856140e8565b11156125b45760405162461bcd60e51b81526004016108ac90613e55565b60085460405163a9059cbb60e01b81526000916001600160a01b03169063a9059cbb906125e79033908890600401613d6f565b602060405180830381600087803b15801561260157600080fd5b505af1158015612615573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126399190613172565b600854600e5460405163a9059cbb60e01b81529293506000926001600160a01b039283169263a9059cbb92612675929116908890600401613d6f565b602060405180830381600087803b15801561268f57600080fd5b505af11580156126a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126c79190613172565b90508180156126d35750805b6126ef5760405162461bcd60e51b81526004016108ac90613ed5565b600d546040517f2a5649920000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690632a56499290612738903390600401613d1e565b600060405180830381600087803b15801561275257600080fd5b505af1158015612766573d6000803e3d6000fd5b505050508385846127779190614133565b6127819190614133565b9550505050909192565b60065460ff16156127ae5760405162461bcd60e51b81526004016108ac90613ea5565b80600760008282546127c091906140e8565b9091555050600754600a546127d59083614114565b6127df9190614100565b60095550565b6001600160a01b03821661280b5760405162461bcd60e51b81526004016108ac90613fc5565b806002600082825461281d91906140e8565b90915550506001600160a01b0382166000908152602081905260408120805483929061284a9084906140e8565b90915550506040516001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061288d908590613db8565b60405180910390a35050565b60008281526005602090815260408083206001600160a01b038516845290915290205460ff16610d6b576128d7816001600160a01b03166014612a4a565b6128e2836020612a4a565b6040516020016128f3929190613cba565b60408051601f198184030181529082905262461bcd60e51b82526108ac91600401613dd4565b60008281526005602090815260408083206001600160a01b038516845290915290205460ff16610d6b5760008281526005602090815260408083206001600160a01b03851684529091529020805460ff191660011790556129773390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000612a10826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612c419092919063ffffffff16565b805190915015611a895780806020019051810190612a2e9190613172565b611a895760405162461bcd60e51b81526004016108ac90613f95565b60606000612a59836002614114565b612a649060026140e8565b67ffffffffffffffff811115612a8a57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612ab4576020820181803683370190505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110612af957634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110612b5257634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053506000612b76846002614114565b612b819060016140e8565b90505b6001811115612c22577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110612bd057634e487b7160e01b600052603260045260246000fd5b1a60f81b828281518110612bf457634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535060049490941c93612c1b81614192565b9050612b84565b5083156108cf5760405162461bcd60e51b81526004016108ac90613de5565b6060612c508484600085612c58565b949350505050565b606082471015612c7a5760405162461bcd60e51b81526004016108ac90613e75565b843b612c985760405162461bcd60e51b81526004016108ac90613f75565b600080866001600160a01b03168587604051612cb49190613cae565b60006040518083038185875af1925050503d8060008114612cf1576040519150601f19603f3d011682016040523d82523d6000602084013e612cf6565b606091505b5091509150612d06828286612d11565b979650505050505050565b60608315612d205750816108cf565b825115612d305782518084602001fd5b8160405162461bcd60e51b81526004016108ac9190613dd4565b5080546000825590600052602060002090810190610e9491905b80821115612d785760008155600101612d64565b5090565b6000612d8f612d8a846140c4565b6140ad565b90508083825260208201905082856020860282011115612dae57600080fd5b60005b85811015612dda5781612dc48882612f09565b8452506020928301929190910190600101612db1565b5050509392505050565b6000612df2612d8a846140c4565b90508083825260208201905082856020860282011115612e1157600080fd5b60005b85811015612dda57813567ffffffffffffffff811115612e3357600080fd5b808601612e408982612f14565b855250506020928301929190910190600101612e14565b6000612e65612d8a846140c4565b90508083825260208201905082856020860282011115612e8457600080fd5b60005b85811015612dda5781612e9a8882612fa3565b8452506020928301929190910190600101612e87565b6000612ebe612d8a846140c4565b90508083825260208201905082856020860282011115612edd57600080fd5b60005b85811015612dda5781612ef38882612fb9565b8452506020928301929190910190600101612ee0565b80356107ad8161428a565b600082601f830112612f2557600080fd5b8135612c50848260208601612d7c565b600082601f830112612f4657600080fd5b8135612c50848260208601612de4565b600082601f830112612f6757600080fd5b8135612c50848260208601612e57565b600082601f830112612f8857600080fd5b8151612c50848260208601612eb0565b80516107ad8161429e565b80356107ad816142a6565b80356107ad816142ac565b80516107ad816142a6565b600060208284031215612fd657600080fd5b6000612c508484612f09565b60008060408385031215612ff557600080fd5b60006130018585612f09565b925050602061301285828601612f09565b9150509250929050565b60008060006060848603121561303157600080fd5b600061303d8686612f09565b935050602061304e86828701612f09565b925050604061305f86828701612fa3565b9150509250925092565b6000806040838503121561307c57600080fd5b60006130888585612f09565b925050602061301285828601612fa3565b600080600080600060a086880312156130b157600080fd5b853567ffffffffffffffff8111156130c857600080fd5b6130d488828901612f35565b955050602086013567ffffffffffffffff8111156130f157600080fd5b6130fd88828901612f56565b945050604061310e88828901612fa3565b935050606061311f88828901612fa3565b925050608061313088828901612fa3565b9150509295509295909350565b60006020828403121561314f57600080fd5b815167ffffffffffffffff81111561316657600080fd5b612c5084828501612f77565b60006020828403121561318457600080fd5b6000612c508484612f98565b6000602082840312156131a257600080fd5b6000612c508484612fa3565b600080604083850312156131c157600080fd5b60006130018585612fa3565b6000602082840312156131df57600080fd5b6000612c508484612fae565b6000602082840312156131fd57600080fd5b6000612c508484612fb9565b6000806040838503121561321c57600080fd5b60006130888585612fa3565b6000806040838503121561323b57600080fd5b60006132478585612fb9565b925050602061301285828601612fb9565b60006132648383613278565b505060200190565b60006132648383613320565b6132818161414a565b82525050565b6000613291825190565b80845260209384019383018060005b838110156132c55781516132b48882613258565b9750602083019250506001016132a0565b509495945050505050565b60006132da825490565b808452600083815260208082209501949081905b838110156132c5576132ff8261427e565b613309888261326c565b975050600191820191016132ee565b801515613281565b80613281565b6000613330825190565b61333e818560208601614166565b9290920192915050565b6132818161415b565b600061335b825190565b808452602084019350613372818560208601614166565b601f01601f19169290920192915050565b60208082527f537472696e67733a20686578206c656e67746820696e73756666696369656e74910190815260005b5060200190565b602381526000602082017f45524332303a207472616e7366657220746f20746865207a65726f206164647281527f6573730000000000000000000000000000000000000000000000000000000000602082015291505b5060400190565b601481526000602082017f5061757361626c653a206e6f7420706175736564000000000000000000000000815291506133b1565b602281526000602082017f45524332303a206275726e20616d6f756e7420657863656564732062616c616e81527f63650000000000000000000000000000000000000000000000000000000000006020820152915061340e565b602281526000602082017f45524332303a20617070726f766520746f20746865207a65726f20616464726581527f73730000000000000000000000000000000000000000000000000000000000006020820152915061340e565b601f81526000602082017f43616e6e6f74207365742072657365727665206164647265737320746f203000815291506133b1565b602681526000602082017f45524332303a207472616e7366657220616d6f756e742065786365656473206281527f616c616e636500000000000000000000000000000000000000000000000000006020820152915061340e565b601881526000602082017f506572666f726d616e63652066656520746f6f20686967680000000000000000815291506133b1565b601081526000602082017f4661726d426f743a204558504952454400000000000000000000000000000000815291506133b1565b602681526000602082017f416464726573733a20696e73756666696369656e742062616c616e636520666f81527f722063616c6c00000000000000000000000000000000000000000000000000006020820152915061340e565b604081526000602082017f506172616d65746572205f6d696e416d6f756e74734f7574206d75737420686181527f7665206c656e67746820657175616c20746f2072657761726473546f6b656e736020820152915061340e565b603a81526000602082017f4561636820737761702070617468206d75737420656e6420776974682074686581527f2043656c6f2d6e6174697665207374616b696e6720746f6b656e0000000000006020820152915061340e565b601081526000602082017f5061757361626c653a2070617573656400000000000000000000000000000000815291506133b1565b602b81526000602082017f43616e6e6f7420696e7665737420696e206661726d2062656361757365206c7081527f416d6f756e7420697320300000000000000000000000000000000000000000006020820152915061340e565b601c81526000602082017f43616e6e6f74207769746864726177207a65726f2062616c616e636500000000815291506133b1565b601381526000602082017f53656e64696e672066656573206661696c656400000000000000000000000000815291506133b1565b602881526000602082017f45524332303a207472616e7366657220616d6f756e742065786365656473206181527f6c6c6f77616e63650000000000000000000000000000000000000000000000006020820152915061340e565b602181526000602082017f5472616e73666572206661696c65642c2061626f7274696e67206465706f736981527f74000000000000000000000000000000000000000000000000000000000000006020820152915061340e565b602481526000602082017f5472616e73666572206661696c65642c2061626f7274696e672077697468647281527f6177616c000000000000000000000000000000000000000000000000000000006020820152915061340e565b602181526000602082017f45524332303a206275726e2066726f6d20746865207a65726f2061646472657381527f73000000000000000000000000000000000000000000000000000000000000006020820152915061340e565b603881526000602082017f506172616d65746572205f7061746873206d7573742068617665206c656e677481527f6820657175616c20746f2072657761726473546f6b656e7300000000000000006020820152915061340e565b602581526000602082017f45524332303a207472616e736665722066726f6d20746865207a65726f20616481527f64726573730000000000000000000000000000000000000000000000000000006020820152915061340e565b603881526000602082017f43616e6e6f74207769746864726177206d6f7265207468616e2074686520746f81527f74616c2062616c616e6365206f6620746865206f776e657200000000000000006020820152915061340e565b601281526000602082017f496e76616c696420706174682073746172740000000000000000000000000000815291506133b1565b602481526000602082017f45524332303a20617070726f76652066726f6d20746865207a65726f2061646481527f72657373000000000000000000000000000000000000000000000000000000006020820152915061340e565b601d81526000602082017f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000815291506133b1565b601f81526000602082017f466565206661696c65642c2061626f7274696e67207769746864726177616c00815291506133b1565b602a81526000602082017f5361666545524332303a204552433230206f7065726174696f6e20646964206e81527f6f742073756363656564000000000000000000000000000000000000000000006020820152915061340e565b602581526000602082017f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7781527f207a65726f0000000000000000000000000000000000000000000000000000006020820152915061340e565b602f81526000602082017f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636581527f20726f6c657320666f722073656c6600000000000000000000000000000000006020820152915061340e565b601f81526000602082017f45524332303a206d696e7420746f20746865207a65726f206164647265737300815291506133b1565b60ff8116613281565b60006108cf8284613326565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526017016000613cec8285613326565b7f206973206d697373696e6720726f6c652000000000000000000000000000000081526011019150612c508284613326565b602081016107ad8284613278565b60408101613d3a8285613278565b6108cf6020830184613278565b60608101613d558286613278565b613d626020830185613278565b612c506040830184613320565b60408101613d7d8285613278565b6108cf6020830184613320565b60608082528101613d9b81866132d0565b9050613d626020830185613320565b602081016107ad8284613318565b602081016107ad8284613320565b602081016107ad8284613348565b602080825281016108cf8184613351565b602080825281016107ad81613383565b602080825281016107ad816133b8565b602080825281016107ad81613415565b602080825281016107ad81613449565b602080825281016107ad816134a3565b602080825281016107ad816134fd565b602080825281016107ad81613531565b602080825281016107ad8161358b565b602080825281016107ad816135bf565b602080825281016107ad816135f3565b602080825281016107ad8161364d565b602080825281016107ad816136a7565b602080825281016107ad81613701565b602080825281016107ad81613735565b602080825281016107ad8161378f565b602080825281016107ad816137c3565b602080825281016107ad816137f7565b602080825281016107ad81613851565b602080825281016107ad816138ab565b602080825281016107ad81613905565b602080825281016107ad8161395f565b602080825281016107ad816139b9565b602080825281016107ad81613a13565b602080825281016107ad81613a6d565b602080825281016107ad81613aa1565b602080825281016107ad81613afb565b602080825281016107ad81613b2f565b602080825281016107ad81613b63565b602080825281016107ad81613bbd565b602080825281016107ad81613c17565b602080825281016107ad81613c71565b60408101613d7d8285613320565b60a08101613ff18288613320565b613ffe6020830187613320565b81810360408301526140108186613287565b905061401f6060830185613278565b61228d6080830184613320565b6080810161403a8287613320565b6140476020830186613320565b6140546040830185613320565b6140616060830184613320565b95945050505050565b602081016107ad8284613ca5565b60a081016140868288613ca5565b6140936020830187613ca5565b6140a06040830186613320565b61401f6060830185613320565b60006140b860405190565b9050610e7c82826141de565b600067ffffffffffffffff8211156140de576140de614268565b5060209081020190565b600082198211156140fb576140fb614226565b500190565b60008261410f5761410f61423c565b500490565b600081600019048311821515161561412e5761412e614226565b500290565b60008282101561414557614145614226565b500390565b60006001600160a01b0382166107ad565b60006107ad8261414a565b60005b83811015614181578181015183820152602001614169565b838111156121725750506000910152565b6000816141a1576141a1614226565b506000190190565b6002810460018216806141bd57607f821691505b602082108114156141d0576141d0614252565b50919050565b6000816107ad565b601f19601f830116810181811067ffffffffffffffff8211171561420457614204614268565b6040525050565b600060001982141561421f5761421f614226565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b60006107ad82546141d6565b6142938161414a565b8114610e9457600080fd5b801515614293565b80614293565b6001600160e01b0319811661429356fea2646970667358221220d6ac4fc5f28409f0d461e63de8c3d945286486aa0a28b0aa03be2ccbb2c6a71264736f6c63430008040033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061034c5760003560e01c80638119c065116101bd578063c305f5dd116100f9578063dbae9b0f116100a2578063f84afd481161007c578063f84afd48146106fe578063f887ea4014610711578063f9a0be6814610724578063fd3865e11461073757600080fd5b8063dbae9b0f1461069d578063dd62ed3e146106a5578063f79ed94b146106de57600080fd5b8063c9ce0e8c116100d3578063c9ce0e8c1461066e578063d484064114610681578063d547741f1461068a57600080fd5b8063c305f5dd14610644578063c7493abb1461065d578063c838b0741461066557600080fd5b80639b26360711610166578063a457c2d711610140578063a457c2d7146105f8578063a9059cbb1461060b578063b6b55f251461061e578063b6d0dcd81461063157600080fd5b80639b263607146105cb5780639f27a6e9146105dd578063a217fddf146105f057600080fd5b80638c00ca9d116101975780638c00ca9d1461057757806391d148541461058a57806395d89b41146105c357600080fd5b80638119c065146105545780638456cb5914610567578063853828b61461056f57600080fd5b8063313ce5671161028c5780634fb5cd4c11610235578063684cb2741161020f578063684cb274146104de57806370a082311461050557806372f702f31461052e5780637aca573c1461054157600080fd5b80634fb5cd4c146104b35780635c975abb146104c05780635f8e9e91146104cb57600080fd5b80633950935111610266578063395093511461048f5780633f4ba83a146104a25780634a1510b4146104aa57600080fd5b8063313ce5671461046357806336568abe146104735780633902cbff1461048657600080fd5b806318160ddd116102f957806327b74a5d116102d357806327b74a5d146104295780632e1a7d4d146104325780632e5bd7ab146104475780632f2ff15d1461045057600080fd5b806318160ddd146103eb57806323b872dd146103f3578063248a9ca31461040657600080fd5b8063095ea7b31161032a578063095ea7b3146103af5780630ab8985b146103c2578063147bd3af146103d557600080fd5b806301ffc9a71461035157806306fdde031461037a578063075461721461038f575b600080fd5b61036461035f3660046131cd565b61074a565b6040516103719190613daa565b60405180910390f35b6103826107b3565b6040516103719190613dd4565b6014546103a2906001600160a01b031681565b6040516103719190613dc6565b6103646103bd366004613069565b610845565b6010546103a2906001600160a01b031681565b6103de600b5481565b6040516103719190613db8565b6002546103de565b61036461040136600461301c565b61085b565b6103de610414366004613190565b60009081526005602052604090206001015490565b6103de60075481565b610445610440366004613190565b6108d6565b005b6103de61271081565b61044561045e3660046131ae565b610cc4565b60125b604051610371919061406a565b6104456104813660046131ae565b610d39565b6103de600a5481565b61036461049d366004613069565b610d6f565b610445610da6565b6103de6103e881565b6012546104669060ff1681565b60065460ff16610364565b6103de6104d9366004613190565b610e4b565b6103de7f29944e936a0f6e1cbaa227df218d7d6025c2a2785db840e42a3425f24e9e68ac81565b6103de610513366004612fc4565b6001600160a01b031660009081526020819052604090205490565b6008546103a2906001600160a01b031681565b600d546103a2906001600160a01b031681565b6016546103a2906001600160a01b031681565b610445610e81565b610445610e97565b610445610585366004613209565b610ee8565b6103646105983660046131ae565b60009182526005602090815260408084206001600160a01b0393909316845291905290205460ff1690565b610382610f3e565b60125461046690610100900460ff1681565b6104456105eb366004613099565b610f4d565b6103de600081565b610364610606366004613069565b6117f1565b610364610619366004613069565b61184e565b61044561062c366004613190565b61185b565b6103a261063f366004613190565b611a19565b6012546103a2906201000090046001600160a01b031681565b6103de601981565b6103de60095481565b6103de61067c366004613190565b611a43565b6103de600c5481565b6104456106983660046131ae565b611a64565b6103de602881565b6103de6106b3366004612fe2565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600e546106f1906001600160a01b031681565b6040516103719190613d1e565b61044561070c366004612fc4565b611a8e565b6015546103a2906001600160a01b031681565b6013546103a2906001600160a01b031681565b600f546103a2906001600160a01b031681565b60006001600160e01b031982167f7965db0b0000000000000000000000000000000000000000000000000000000014806107ad57507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b92915050565b6060600380546107c2906141a9565b80601f01602080910402602001604051908101604052809291908181526020018280546107ee906141a9565b801561083b5780601f106108105761010080835404028352916020019161083b565b820191906000526020600020905b81548152906001019060200180831161081e57829003601f168201915b5050505050905090565b6000610852338484611b24565b50600192915050565b6000610868848484611bcb565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156108b55760405162461bcd60e51b81526004016108ac90613ee5565b60405180910390fd5b6108c985336108c48685614133565b611b24565b60019150505b9392505050565b60405163327383a360e21b8152600090309063c9ce0e8c906108fc908590600401613db8565b60206040518083038186803b15801561091457600080fd5b505afa158015610928573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094c91906131eb565b3360009081526020819052604090205490915081111561097e5760405162461bcd60e51b81526004016108ac90613f45565b6008546040516370a0823160e01b81526000916001600160a01b0316906370a08231906109af903090600401613d1e565b60206040518083038186803b1580156109c757600080fd5b505afa1580156109db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ff91906131eb565b905080831115610a1b57610a1b610a168285614133565b611ce8565b600d54600954600a546040517f4ae2859c00000000000000000000000000000000000000000000000000000000815260009384936001600160a01b0390911692634ae2859c92610a6f929190600401613fd5565b604080518083038186803b158015610a8657600080fd5b505afa158015610a9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610abe9190613228565b9092509050600081610ad08785614114565b610ada9190614100565b905060006103e8610aec886028614114565b610af69190614100565b905080821115610b04578091505b600854600e5460405163a9059cbb60e01b81526000926001600160a01b039081169263a9059cbb92610b3e92909116908790600401613d6f565b602060405180830381600087803b158015610b5857600080fd5b505af1158015610b6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b909190613172565b905080610baf5760405162461bcd60e51b81526004016108ac90613f85565b6008546000906001600160a01b031663a9059cbb33610bce878d614133565b6040518363ffffffff1660e01b8152600401610beb929190613d6f565b602060405180830381600087803b158015610c0557600080fd5b505af1158015610c19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c3d9190613172565b905080610c5c5760405162461bcd60e51b81526004016108ac90613f05565b610c663389611d66565b8860076000828254610c789190614133565b909155505060405133907ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b56890610cb1908c908890613fd5565b60405180910390a2505050505050505050565b600082815260056020526040902060010154610cdf81611e40565b610ce98383611e4a565b816001600160a01b0316336001600160a01b03167fe7442843a65013dba5eebc77d5a00f5fafa588af0da4bf39250936d4783bb55385604051610d2c9190613db8565b60405180910390a3505050565b6001600160a01b0381163314610d615760405162461bcd60e51b81526004016108ac90613fb5565b610d6b8282611e6f565b5050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916108529185906108c49086906140e8565b6000610db181611e40565b610db9611ef2565b6008546040516370a0823160e01b81526000916001600160a01b0316906370a0823190610dea903090600401613d1e565b60206040518083038186803b158015610e0257600080fd5b505afa158015610e16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3a91906131eb565b90508015610d6b57610d6b81611f58565b6000610e5660025490565b610e6257506000919050565b600254600754610e729084614114565b6107ad9190614100565b919050565b6000610e8c81611e40565b610e94612001565b50565b3360009081526020819052604081205411610ec45760405162461bcd60e51b81526004016108ac90613ec5565b33600090815260208190526040812054610edd90610e4b565b9050610e94816108d6565b6000610ef381611e40565b600b839055600c82905560405133907fe8a0df875bece805d1b6bd1bf60bdf2abc88b51be72ed2bb5cd590532bc446a890610f319086908690613fd5565b60405180910390a2505050565b6060600480546107c2906141a9565b8042811015610f6e5760405162461bcd60e51b81526004016108ac90613e65565b7f29944e936a0f6e1cbaa227df218d7d6025c2a2785db840e42a3425f24e9e68ac610f9881611e40565b60065460ff1615610fbb5760405162461bcd60e51b81526004016108ac90613ea5565b601154875114610fdd5760405162461bcd60e51b81526004016108ac90613f25565b601154865114610fff5760405162461bcd60e51b81526004016108ac90613e85565b60005b8751811015611196576011818154811061102c57634e487b7160e01b600052603260045260246000fd5b60009182526020909120015488516001600160a01b039091169089908390811061106657634e487b7160e01b600052603260045260246000fd5b602002602001015160008151811061108e57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b0316146110bc5760405162461bcd60e51b81526004016108ac90613f55565b601260029054906101000a90046001600160a01b03166001600160a01b03168882815181106110fb57634e487b7160e01b600052603260045260246000fd5b602002602001015160018a848151811061112557634e487b7160e01b600052603260045260246000fd5b6020026020010151516111389190614133565b8151811061115657634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b0316146111845760405162461bcd60e51b81526004016108ac90613e95565b8061118e8161420b565b915050611002565b5061119f612059565b60115460009067ffffffffffffffff8111156111cb57634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156111f4578160200160208202803683370190505b50905060005b6011548110156112eb576011818154811061122557634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546040516370a0823160e01b81526001600160a01b03909116906370a082319061125e903090600401613d1e565b60206040518083038186803b15801561127657600080fd5b505afa15801561128a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ae91906131eb565b8282815181106112ce57634e487b7160e01b600052603260045260246000fd5b6020908102919091010152806112e38161420b565b9150506111fa565b5060005b6011548110156113dc5760155489516113c9916001600160a01b0316908b908490811061132c57634e487b7160e01b600052603260045260246000fd5b602002602001015184848151811061135457634e487b7160e01b600052603260045260246000fd5b60200260200101516011858154811061137d57634e487b7160e01b600052603260045260246000fd5b9060005260206000200160009054906101000a90046001600160a01b03168c86815181106113bb57634e487b7160e01b600052603260045260246000fd5b60200260200101518a612178565b50806113d48161420b565b9150506112ef565b506012546040516370a0823160e01b8152600091600291620100009091046001600160a01b0316906370a0823190611418903090600401613d1e565b60206040518083038186803b15801561143057600080fd5b505afa158015611444573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061146891906131eb565b6114729190614100565b601654601254919250611498916201000090046001600160a01b03908116911683612297565b6016546012546040517f916955860000000000000000000000000000000000000000000000000000000081526001600160a01b03909216916391695586916114f59160ff808316926101009004169086908d908c90600401614078565b602060405180830381600087803b15801561150f57600080fd5b505af1158015611523573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061154791906131eb565b50600f546040516370a0823160e01b81526000916001600160a01b0316906370a0823190611579903090600401613d1e565b60206040518083038186803b15801561159157600080fd5b505afa1580156115a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115c991906131eb565b6010546040516370a0823160e01b81529192506000916001600160a01b03909116906370a08231906115ff903090600401613d1e565b60206040518083038186803b15801561161757600080fd5b505afa15801561162b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061164f91906131eb565b905061165d60176000612d4a565b601780546001818101835560008390527fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c15918201859055825490810190925501819055601654600f546116bd916001600160a01b03918216911684612297565b6016546010546116da916001600160a01b03918216911683612297565b6016546040517f4d49e87d0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690634d49e87d90611728906017908c908c90600401613d8a565b602060405180830381600087803b15801561174257600080fd5b505af1158015611756573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177a91906131eb565b50600080600061178861238f565b92509250925061179783611f58565b6117a08361278b565b60075460405133917f36c54fe3f6742709ba65ab76880ce98cbacfc0e2f273d55f4e4d50d8830c2600916117d99187918790879061402c565b60405180910390a25050505050505050505050505050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156118355760405162461bcd60e51b81526004016108ac90613fa5565b61184433856108c48685614133565b5060019392505050565b6000610852338484611bcb565b60065460ff161561187e5760405162461bcd60e51b81526004016108ac90613ea5565b6008546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526000916001600160a01b0316906323b872dd906118cc90339030908790600401613d47565b602060405180830381600087803b1580156118e657600080fd5b505af11580156118fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061191e9190613172565b90508061193d5760405162461bcd60e51b81526004016108ac90613ef5565b60405163327383a360e21b8152600090309063c9ce0e8c90611963908690600401613db8565b60206040518083038186803b15801561197b57600080fd5b505afa15801561198f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119b391906131eb565b90506119bf33826127e5565b82600760008282546119d191906140e8565b909155506119e0905083611f58565b336001600160a01b03167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c84604051610f319190613db8565b60118181548110611a2957600080fd5b6000918252602090912001546001600160a01b0316905081565b600060075460001415611a54575090565b600754600254610e729084614114565b600082815260056020526040902060010154611a7f81611e40565b611a898383611e6f565b505050565b6000611a9981611e40565b6001600160a01b038216611abf5760405162461bcd60e51b81526004016108ac90613e35565b600e80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03841690811790915560405133907fbd45c5f5d28e3962d234f9fa4e443f6f92e4525b10556e441307306fab9f9e0390600090a35050565b6001600160a01b038316611b4a5760405162461bcd60e51b81526004016108ac90613f65565b6001600160a01b038216611b705760405162461bcd60e51b81526004016108ac90613e25565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610d2c908590613db8565b6001600160a01b038316611bf15760405162461bcd60e51b81526004016108ac90613f35565b6001600160a01b038216611c175760405162461bcd60e51b81526004016108ac90613df5565b6001600160a01b03831660009081526020819052604090205481811015611c505760405162461bcd60e51b81526004016108ac90613e45565b611c5a8282614133565b6001600160a01b038086166000908152602081905260408082209390935590851681529081208054849290611c909084906140e8565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611cda9190613db8565b60405180910390a350505050565b6013546040517f2e1a7d4d0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690632e1a7d4d90611d31908490600401613db8565b600060405180830381600087803b158015611d4b57600080fd5b505af1158015611d5f573d6000803e3d6000fd5b5050505050565b6001600160a01b038216611d8c5760405162461bcd60e51b81526004016108ac90613f15565b6001600160a01b03821660009081526020819052604090205481811015611dc55760405162461bcd60e51b81526004016108ac90613e15565b611dcf8282614133565b6001600160a01b03841660009081526020819052604081209190915560028054849290611dfd908490614133565b90915550506040516000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610d2c908690613db8565b610e948133612899565b600082815260056020526040902060010154611e6581611e40565b611a898383612919565b60008281526005602090815260408083206001600160a01b038516845290915290205460ff1615610d6b5760008281526005602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60065460ff16611f145760405162461bcd60e51b81526004016108ac90613e05565b6006805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b604051611f4e9190613d1e565b60405180910390a1565b60065460ff1615611f7b5760405162461bcd60e51b81526004016108ac90613ea5565b60008111611f9b5760405162461bcd60e51b81526004016108ac90613eb5565b601354600854611fb8916001600160a01b03918216911683612297565b6013546040517fb6b55f250000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063b6b55f2590611d31908490600401613db8565b60065460ff16156120245760405162461bcd60e51b81526004016108ac90613ea5565b6006805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611f413390565b60065460ff161561207c5760405162461bcd60e51b81526004016108ac90613ea5565b6014546013546040517f6a6278420000000000000000000000000000000000000000000000000000000081526001600160a01b0392831692636a627842926120c992911690600401613d1e565b600060405180830381600087803b1580156120e357600080fd5b505af11580156120f7573d6000803e3d6000fd5b50506013546040517f84e9bd7e0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506384e9bd7e9150612144903090600401613d1e565b600060405180830381600087803b15801561215e57600080fd5b505af1158015612172573d6000803e3d6000fd5b50505050565b6000600286511015801561218c5750600085115b1561228a576121a56001600160a01b0385168887612297565b6040517f38ed17390000000000000000000000000000000000000000000000000000000081526000906001600160a01b038916906338ed1739906121f590899088908c9030908a90600401613fe3565b600060405180830381600087803b15801561220f57600080fd5b505af1158015612223573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261224b919081019061313d565b9050806001825161225c9190614133565b8151811061227a57634e487b7160e01b600052603260045260246000fd5b602002602001015191505061228d565b50835b9695505050505050565b600081846001600160a01b031663dd62ed3e30866040518363ffffffff1660e01b81526004016122c8929190613d2c565b60206040518083038186803b1580156122e057600080fd5b505afa1580156122f4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231891906131eb565b61232291906140e8565b90506121728463095ea7b360e01b8584604051602401612343929190613d6f565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b0319909316929092179091526129bb565b60008060006123a060065460ff1690565b156123bd5760405162461bcd60e51b81526004016108ac90613ea5565b6008546040516370a0823160e01b81526000916001600160a01b0316906370a08231906123ee903090600401613d1e565b60206040518083038186803b15801561240657600080fd5b505afa15801561241a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061243e91906131eb565b600d546040517f92ce27f80000000000000000000000000000000000000000000000000000000081529192506001600160a01b0316906392ce27f890612488908490600401613db8565b60206040518083038186803b1580156124a057600080fd5b505afa1580156124b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124d891906131eb565b600d546040517f1deae18c0000000000000000000000000000000000000000000000000000000081529194506001600160a01b031690631deae18c90612522908490600401613db8565b60206040518083038186803b15801561253a57600080fd5b505afa15801561254e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061257291906131eb565b91506103e8612582602883614114565b61258c9190614100565b61259683856140e8565b11156125b45760405162461bcd60e51b81526004016108ac90613e55565b60085460405163a9059cbb60e01b81526000916001600160a01b03169063a9059cbb906125e79033908890600401613d6f565b602060405180830381600087803b15801561260157600080fd5b505af1158015612615573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126399190613172565b600854600e5460405163a9059cbb60e01b81529293506000926001600160a01b039283169263a9059cbb92612675929116908890600401613d6f565b602060405180830381600087803b15801561268f57600080fd5b505af11580156126a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126c79190613172565b90508180156126d35750805b6126ef5760405162461bcd60e51b81526004016108ac90613ed5565b600d546040517f2a5649920000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690632a56499290612738903390600401613d1e565b600060405180830381600087803b15801561275257600080fd5b505af1158015612766573d6000803e3d6000fd5b505050508385846127779190614133565b6127819190614133565b9550505050909192565b60065460ff16156127ae5760405162461bcd60e51b81526004016108ac90613ea5565b80600760008282546127c091906140e8565b9091555050600754600a546127d59083614114565b6127df9190614100565b60095550565b6001600160a01b03821661280b5760405162461bcd60e51b81526004016108ac90613fc5565b806002600082825461281d91906140e8565b90915550506001600160a01b0382166000908152602081905260408120805483929061284a9084906140e8565b90915550506040516001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061288d908590613db8565b60405180910390a35050565b60008281526005602090815260408083206001600160a01b038516845290915290205460ff16610d6b576128d7816001600160a01b03166014612a4a565b6128e2836020612a4a565b6040516020016128f3929190613cba565b60408051601f198184030181529082905262461bcd60e51b82526108ac91600401613dd4565b60008281526005602090815260408083206001600160a01b038516845290915290205460ff16610d6b5760008281526005602090815260408083206001600160a01b03851684529091529020805460ff191660011790556129773390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000612a10826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612c419092919063ffffffff16565b805190915015611a895780806020019051810190612a2e9190613172565b611a895760405162461bcd60e51b81526004016108ac90613f95565b60606000612a59836002614114565b612a649060026140e8565b67ffffffffffffffff811115612a8a57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612ab4576020820181803683370190505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110612af957634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110612b5257634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053506000612b76846002614114565b612b819060016140e8565b90505b6001811115612c22577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110612bd057634e487b7160e01b600052603260045260246000fd5b1a60f81b828281518110612bf457634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535060049490941c93612c1b81614192565b9050612b84565b5083156108cf5760405162461bcd60e51b81526004016108ac90613de5565b6060612c508484600085612c58565b949350505050565b606082471015612c7a5760405162461bcd60e51b81526004016108ac90613e75565b843b612c985760405162461bcd60e51b81526004016108ac90613f75565b600080866001600160a01b03168587604051612cb49190613cae565b60006040518083038185875af1925050503d8060008114612cf1576040519150601f19603f3d011682016040523d82523d6000602084013e612cf6565b606091505b5091509150612d06828286612d11565b979650505050505050565b60608315612d205750816108cf565b825115612d305782518084602001fd5b8160405162461bcd60e51b81526004016108ac9190613dd4565b5080546000825590600052602060002090810190610e9491905b80821115612d785760008155600101612d64565b5090565b6000612d8f612d8a846140c4565b6140ad565b90508083825260208201905082856020860282011115612dae57600080fd5b60005b85811015612dda5781612dc48882612f09565b8452506020928301929190910190600101612db1565b5050509392505050565b6000612df2612d8a846140c4565b90508083825260208201905082856020860282011115612e1157600080fd5b60005b85811015612dda57813567ffffffffffffffff811115612e3357600080fd5b808601612e408982612f14565b855250506020928301929190910190600101612e14565b6000612e65612d8a846140c4565b90508083825260208201905082856020860282011115612e8457600080fd5b60005b85811015612dda5781612e9a8882612fa3565b8452506020928301929190910190600101612e87565b6000612ebe612d8a846140c4565b90508083825260208201905082856020860282011115612edd57600080fd5b60005b85811015612dda5781612ef38882612fb9565b8452506020928301929190910190600101612ee0565b80356107ad8161428a565b600082601f830112612f2557600080fd5b8135612c50848260208601612d7c565b600082601f830112612f4657600080fd5b8135612c50848260208601612de4565b600082601f830112612f6757600080fd5b8135612c50848260208601612e57565b600082601f830112612f8857600080fd5b8151612c50848260208601612eb0565b80516107ad8161429e565b80356107ad816142a6565b80356107ad816142ac565b80516107ad816142a6565b600060208284031215612fd657600080fd5b6000612c508484612f09565b60008060408385031215612ff557600080fd5b60006130018585612f09565b925050602061301285828601612f09565b9150509250929050565b60008060006060848603121561303157600080fd5b600061303d8686612f09565b935050602061304e86828701612f09565b925050604061305f86828701612fa3565b9150509250925092565b6000806040838503121561307c57600080fd5b60006130888585612f09565b925050602061301285828601612fa3565b600080600080600060a086880312156130b157600080fd5b853567ffffffffffffffff8111156130c857600080fd5b6130d488828901612f35565b955050602086013567ffffffffffffffff8111156130f157600080fd5b6130fd88828901612f56565b945050604061310e88828901612fa3565b935050606061311f88828901612fa3565b925050608061313088828901612fa3565b9150509295509295909350565b60006020828403121561314f57600080fd5b815167ffffffffffffffff81111561316657600080fd5b612c5084828501612f77565b60006020828403121561318457600080fd5b6000612c508484612f98565b6000602082840312156131a257600080fd5b6000612c508484612fa3565b600080604083850312156131c157600080fd5b60006130018585612fa3565b6000602082840312156131df57600080fd5b6000612c508484612fae565b6000602082840312156131fd57600080fd5b6000612c508484612fb9565b6000806040838503121561321c57600080fd5b60006130888585612fa3565b6000806040838503121561323b57600080fd5b60006132478585612fb9565b925050602061301285828601612fb9565b60006132648383613278565b505060200190565b60006132648383613320565b6132818161414a565b82525050565b6000613291825190565b80845260209384019383018060005b838110156132c55781516132b48882613258565b9750602083019250506001016132a0565b509495945050505050565b60006132da825490565b808452600083815260208082209501949081905b838110156132c5576132ff8261427e565b613309888261326c565b975050600191820191016132ee565b801515613281565b80613281565b6000613330825190565b61333e818560208601614166565b9290920192915050565b6132818161415b565b600061335b825190565b808452602084019350613372818560208601614166565b601f01601f19169290920192915050565b60208082527f537472696e67733a20686578206c656e67746820696e73756666696369656e74910190815260005b5060200190565b602381526000602082017f45524332303a207472616e7366657220746f20746865207a65726f206164647281527f6573730000000000000000000000000000000000000000000000000000000000602082015291505b5060400190565b601481526000602082017f5061757361626c653a206e6f7420706175736564000000000000000000000000815291506133b1565b602281526000602082017f45524332303a206275726e20616d6f756e7420657863656564732062616c616e81527f63650000000000000000000000000000000000000000000000000000000000006020820152915061340e565b602281526000602082017f45524332303a20617070726f766520746f20746865207a65726f20616464726581527f73730000000000000000000000000000000000000000000000000000000000006020820152915061340e565b601f81526000602082017f43616e6e6f74207365742072657365727665206164647265737320746f203000815291506133b1565b602681526000602082017f45524332303a207472616e7366657220616d6f756e742065786365656473206281527f616c616e636500000000000000000000000000000000000000000000000000006020820152915061340e565b601881526000602082017f506572666f726d616e63652066656520746f6f20686967680000000000000000815291506133b1565b601081526000602082017f4661726d426f743a204558504952454400000000000000000000000000000000815291506133b1565b602681526000602082017f416464726573733a20696e73756666696369656e742062616c616e636520666f81527f722063616c6c00000000000000000000000000000000000000000000000000006020820152915061340e565b604081526000602082017f506172616d65746572205f6d696e416d6f756e74734f7574206d75737420686181527f7665206c656e67746820657175616c20746f2072657761726473546f6b656e736020820152915061340e565b603a81526000602082017f4561636820737761702070617468206d75737420656e6420776974682074686581527f2043656c6f2d6e6174697665207374616b696e6720746f6b656e0000000000006020820152915061340e565b601081526000602082017f5061757361626c653a2070617573656400000000000000000000000000000000815291506133b1565b602b81526000602082017f43616e6e6f7420696e7665737420696e206661726d2062656361757365206c7081527f416d6f756e7420697320300000000000000000000000000000000000000000006020820152915061340e565b601c81526000602082017f43616e6e6f74207769746864726177207a65726f2062616c616e636500000000815291506133b1565b601381526000602082017f53656e64696e672066656573206661696c656400000000000000000000000000815291506133b1565b602881526000602082017f45524332303a207472616e7366657220616d6f756e742065786365656473206181527f6c6c6f77616e63650000000000000000000000000000000000000000000000006020820152915061340e565b602181526000602082017f5472616e73666572206661696c65642c2061626f7274696e67206465706f736981527f74000000000000000000000000000000000000000000000000000000000000006020820152915061340e565b602481526000602082017f5472616e73666572206661696c65642c2061626f7274696e672077697468647281527f6177616c000000000000000000000000000000000000000000000000000000006020820152915061340e565b602181526000602082017f45524332303a206275726e2066726f6d20746865207a65726f2061646472657381527f73000000000000000000000000000000000000000000000000000000000000006020820152915061340e565b603881526000602082017f506172616d65746572205f7061746873206d7573742068617665206c656e677481527f6820657175616c20746f2072657761726473546f6b656e7300000000000000006020820152915061340e565b602581526000602082017f45524332303a207472616e736665722066726f6d20746865207a65726f20616481527f64726573730000000000000000000000000000000000000000000000000000006020820152915061340e565b603881526000602082017f43616e6e6f74207769746864726177206d6f7265207468616e2074686520746f81527f74616c2062616c616e6365206f6620746865206f776e657200000000000000006020820152915061340e565b601281526000602082017f496e76616c696420706174682073746172740000000000000000000000000000815291506133b1565b602481526000602082017f45524332303a20617070726f76652066726f6d20746865207a65726f2061646481527f72657373000000000000000000000000000000000000000000000000000000006020820152915061340e565b601d81526000602082017f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000815291506133b1565b601f81526000602082017f466565206661696c65642c2061626f7274696e67207769746864726177616c00815291506133b1565b602a81526000602082017f5361666545524332303a204552433230206f7065726174696f6e20646964206e81527f6f742073756363656564000000000000000000000000000000000000000000006020820152915061340e565b602581526000602082017f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7781527f207a65726f0000000000000000000000000000000000000000000000000000006020820152915061340e565b602f81526000602082017f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636581527f20726f6c657320666f722073656c6600000000000000000000000000000000006020820152915061340e565b601f81526000602082017f45524332303a206d696e7420746f20746865207a65726f206164647265737300815291506133b1565b60ff8116613281565b60006108cf8284613326565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526017016000613cec8285613326565b7f206973206d697373696e6720726f6c652000000000000000000000000000000081526011019150612c508284613326565b602081016107ad8284613278565b60408101613d3a8285613278565b6108cf6020830184613278565b60608101613d558286613278565b613d626020830185613278565b612c506040830184613320565b60408101613d7d8285613278565b6108cf6020830184613320565b60608082528101613d9b81866132d0565b9050613d626020830185613320565b602081016107ad8284613318565b602081016107ad8284613320565b602081016107ad8284613348565b602080825281016108cf8184613351565b602080825281016107ad81613383565b602080825281016107ad816133b8565b602080825281016107ad81613415565b602080825281016107ad81613449565b602080825281016107ad816134a3565b602080825281016107ad816134fd565b602080825281016107ad81613531565b602080825281016107ad8161358b565b602080825281016107ad816135bf565b602080825281016107ad816135f3565b602080825281016107ad8161364d565b602080825281016107ad816136a7565b602080825281016107ad81613701565b602080825281016107ad81613735565b602080825281016107ad8161378f565b602080825281016107ad816137c3565b602080825281016107ad816137f7565b602080825281016107ad81613851565b602080825281016107ad816138ab565b602080825281016107ad81613905565b602080825281016107ad8161395f565b602080825281016107ad816139b9565b602080825281016107ad81613a13565b602080825281016107ad81613a6d565b602080825281016107ad81613aa1565b602080825281016107ad81613afb565b602080825281016107ad81613b2f565b602080825281016107ad81613b63565b602080825281016107ad81613bbd565b602080825281016107ad81613c17565b602080825281016107ad81613c71565b60408101613d7d8285613320565b60a08101613ff18288613320565b613ffe6020830187613320565b81810360408301526140108186613287565b905061401f6060830185613278565b61228d6080830184613320565b6080810161403a8287613320565b6140476020830186613320565b6140546040830185613320565b6140616060830184613320565b95945050505050565b602081016107ad8284613ca5565b60a081016140868288613ca5565b6140936020830187613ca5565b6140a06040830186613320565b61401f6060830185613320565b60006140b860405190565b9050610e7c82826141de565b600067ffffffffffffffff8211156140de576140de614268565b5060209081020190565b600082198211156140fb576140fb614226565b500190565b60008261410f5761410f61423c565b500490565b600081600019048311821515161561412e5761412e614226565b500290565b60008282101561414557614145614226565b500390565b60006001600160a01b0382166107ad565b60006107ad8261414a565b60005b83811015614181578181015183820152602001614169565b838111156121725750506000910152565b6000816141a1576141a1614226565b506000190190565b6002810460018216806141bd57607f821691505b602082108114156141d0576141d0614252565b50919050565b6000816107ad565b601f19601f830116810181811067ffffffffffffffff8211171561420457614204614268565b6040525050565b600060001982141561421f5761421f614226565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b60006107ad82546141d6565b6142938161414a565b8114610e9457600080fd5b801515614293565b80614293565b6001600160e01b0319811661429356fea2646970667358221220d6ac4fc5f28409f0d461e63de8c3d945286486aa0a28b0aa03be2ccbb2c6a71264736f6c63430008040033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/src/pages/Compound/useFarmBotRegistry.ts b/src/pages/Compound/useFarmBotRegistry.ts index 9b01879624a..45fcbeff5de 100644 --- a/src/pages/Compound/useFarmBotRegistry.ts +++ b/src/pages/Compound/useFarmBotRegistry.ts @@ -1,13 +1,23 @@ import { useContractKit } from '@celo-tools/use-contractkit' import IUniswapV2Pair from '@ubeswap/core/build/abi/IUniswapV2Pair.json' import { useCallback, useEffect, useState } from 'react' -import { useSelector } from 'react-redux' -import { AppState } from 'state' import { AbiItem } from 'web3-utils' import { ERC20_ABI } from '../../constants/abis/erc20' import farmBotAbi from '../../constants/abis/FarmBot.json' +import LIQUIDITY_GAUGE_ABI from '../../constants/abis/LiquidityGauge.json' import MOOLA_STAKING_REWARDS_ABI from '../../constants/abis/moola/MoolaStakingRewards.json' +import mobiusFarmBotAbi from '../../constants/abis/RevoMobiusFarmBot' + +export enum FarmBotType { + Ubeswap, + Mobius, +} + +export interface FarmBotInfo { + address: string + type: FarmBotType +} export interface FarmBotSummary { token0Address: string @@ -21,21 +31,53 @@ export interface FarmBotSummary { amountUserLP: number totalFP: number exchangeRate: number - // userLPValue: number - stakingRewardsAddress: string + stakingRewardsAddress?: string totalLPInFarm: number totalLPSupply: number + type: FarmBotType } -export const useFarmBotRegistry = (farmBotAddresses: string[]) => { - const { address, kit, network } = useContractKit() - const [botSummaries, setBotSummaries] = useState([]) - const transactions = useSelector((state: AppState) => state.transactions[network.chainId]) +async function getUbeswapFarmInfo(kit, stakingTokenAddress, farmBotInfo: FarmBotInfo) { + const farmBot = new kit.web3.eth.Contract(farmBotAbi.abi as AbiItem[], farmBotInfo.address) + const stakingTokenContract = new kit.web3.eth.Contract(IUniswapV2Pair as AbiItem[], stakingTokenAddress) + const stakingRewardsAddress = await farmBot.methods.stakingRewards().call() + + const stakingRewardsContract = new kit.web3.eth.Contract( + MOOLA_STAKING_REWARDS_ABI as AbiItem[], + stakingRewardsAddress + ) + + const totalLPInFarm = await stakingRewardsContract.methods.totalSupply().call() + const totalLPSupply = await stakingTokenContract.methods.totalSupply().call() + return { + stakingRewardsAddress, + totalLPInFarm, + totalLPSupply, + } +} + +async function getMobiusFarmInfo(kit, stakingTokenAddress, farmBotInfo: FarmBotInfo) { + const mobiusFarmBot = new kit.web3.eth.Contract(mobiusFarmBotAbi.abi as AbiItem[], farmBotInfo.address) + const stakingTokenContract = new kit.web3.eth.Contract(ERC20_ABI as AbiItem[], stakingTokenAddress) + const gaugeAddress = await mobiusFarmBot.methods.liquidityGauge().call() + const gaugeContract = new kit.web3.eth.Contract(LIQUIDITY_GAUGE_ABI as AbiItem[], gaugeAddress) + const stakingRewardsAddress = await gaugeContract.methods.reward_contract().call() + const totalLPInFarm = await stakingTokenContract.methods.balanceOf(stakingRewardsAddress).call() + const totalLPSupply = await stakingTokenContract.methods.totalSupply().call() + return { + stakingRewardsAddress, + totalLPInFarm, + totalLPSupply, + } +} +export const useFarmBotRegistry = (farmBotInfoList: FarmBotInfo[]) => { + const { address, kit } = useContractKit() + const [botSummaries, setBotSummaries] = useState([]) const call = useCallback(async () => { const botSummaries: FarmBotSummary[] = [] - for (const farmBotAddress of farmBotAddresses) { - const farmBot = new kit.web3.eth.Contract(farmBotAbi.abi as AbiItem[], farmBotAddress) + for (const farmBotInfo of farmBotInfoList) { + const farmBot = new kit.web3.eth.Contract(farmBotAbi.abi as AbiItem[], farmBotInfo.address) const totalFP = await farmBot.methods.totalSupply().call() const totalLP = await farmBot.methods.getLpAmount(totalFP).call() @@ -44,47 +86,52 @@ export const useFarmBotRegistry = (farmBotAddresses: string[]) => { let amountUserFP = address ? await farmBot.methods.balanceOf(address).call() : 0 amountUserFP = amountUserFP > 10 ? amountUserFP : 0 const amountUserLP = await farmBot.methods.getLpAmount(amountUserFP).call() - const stakingTokenAddress = await farmBot.methods.stakingToken().call() - const stakingTokenContract = new kit.web3.eth.Contract(IUniswapV2Pair as AbiItem[], stakingTokenAddress) - const token0Address = await stakingTokenContract.methods.token0().call() + const token0Address = await farmBot.methods.stakingToken0().call() const token0Contract = new kit.web3.eth.Contract(ERC20_ABI as AbiItem[], token0Address) const token0Name = await token0Contract.methods.symbol().call() - const token1Address = await stakingTokenContract.methods.token1().call() + const token1Address = await farmBot.methods.stakingToken1().call() const token1Contract = new kit.web3.eth.Contract(ERC20_ABI as AbiItem[], token1Address) const token1Name = await token1Contract.methods.symbol().call() - const stakingRewardsAddress = await farmBot.methods.stakingRewards().call() - - const stakingRewardsContract = new kit.web3.eth.Contract( - MOOLA_STAKING_REWARDS_ABI as AbiItem[], - stakingRewardsAddress - ) - const totalLPInFarm = await stakingRewardsContract.methods.totalSupply().call() - const totalLPSupply = await stakingTokenContract.methods.totalSupply().call() - - const botSummary: FarmBotSummary = { - address: farmBotAddress, + const botSummary = { + address: farmBotInfo.address, + amountUserFP, + amountUserLP, token0Name, token1Name, token0Address, token1Address, - amountUserFP, - amountUserLP, stakingTokenAddress, totalLP, totalFP, exchangeRate, - stakingRewardsAddress, - totalLPInFarm, - totalLPSupply, + type: farmBotInfo.type, + } + + switch (farmBotInfo.type) { + case FarmBotType.Ubeswap: { + const ubeswapFarmInfo = await getUbeswapFarmInfo(kit, stakingTokenAddress, farmBotInfo) + botSummaries.push({ + ...botSummary, + ...ubeswapFarmInfo, + }) + break + } + case FarmBotType.Mobius: { + const mobiusFarmInfo = await getMobiusFarmInfo(kit, stakingTokenAddress, farmBotInfo) + botSummaries.push({ + ...botSummary, + ...mobiusFarmInfo, + }) + break + } } - botSummaries.push(botSummary) } setBotSummaries(botSummaries) - }, [kit.web3.eth, address, transactions]) + }, [address, farmBotInfoList, kit]) useEffect(() => { call() diff --git a/src/pages/Compound/useFarmBotRewards.ts b/src/pages/Compound/useFarmBotRewards.ts index d300a94004a..21df7f11ce4 100644 --- a/src/pages/Compound/useFarmBotRewards.ts +++ b/src/pages/Compound/useFarmBotRewards.ts @@ -1,4 +1,5 @@ import { useContractKit } from '@celo-tools/use-contractkit' +import { FarmBotType } from 'pages/Compound/useFarmBotRegistry' import { useCallback, useEffect, useState } from 'react' import { AbiItem } from 'web3-utils' @@ -12,16 +13,19 @@ export interface FarmBotRewards { tvlUSD?: string } -export const useFarmBotRewards = (farmBotAddresses: string[]) => { - const { address, kit } = useContractKit() +export const useFarmBotRewards = (farmBotInfoList) => { + const { kit } = useContractKit() const [rewardSummaries, setRewardSummaries] = useState([]) const farmSummaries = useFarmRegistry() const call = useCallback(async () => { const botSummaries: FarmBotRewards[] = [] - for (const farmBotAddress of farmBotAddresses) { - const farmBot = new kit.web3.eth.Contract(farmBotAbi.abi as AbiItem[], farmBotAddress) + for (const farmBotInfo of farmBotInfoList) { + if (farmBotInfo.type !== FarmBotType.Ubeswap) { + continue + } + const farmBot = new kit.web3.eth.Contract(farmBotAbi.abi as AbiItem[], farmBotInfo.address) const stakingRewardsAddress = await farmBot.methods.stakingRewards().call() const farmSummary = farmSummaries.find((farm) => farm.stakingAddress == stakingRewardsAddress) @@ -30,7 +34,7 @@ export const useFarmBotRewards = (farmBotAddresses: string[]) => { const tvlUSD = farmSummary?.tvlUSD const botSummary: FarmBotRewards = { - address: farmBotAddress, + address: farmBotInfo.address, stakingRewardsAddress, rewardsUSDPerYear, tvlUSD, @@ -38,7 +42,7 @@ export const useFarmBotRewards = (farmBotAddresses: string[]) => { botSummaries.push(botSummary) } setRewardSummaries(botSummaries) - }, [kit.web3.eth, address, farmSummaries]) + }, [kit.web3.eth, farmSummaries, farmBotInfoList]) useEffect(() => { call() diff --git a/src/pages/Zap/index.tsx b/src/pages/Zap/index.tsx index 25297cce873..f9223a9be53 100644 --- a/src/pages/Zap/index.tsx +++ b/src/pages/Zap/index.tsx @@ -2,7 +2,7 @@ import { ErrorBoundary } from '@sentry/react' import ChangeNetworkModal from 'components/ChangeNetworkModal' import Loader from 'components/Loader' import { useIsSupportedNetwork } from 'hooks/useIsSupportedNetwork' -import { FarmBotSummary, useFarmBotRegistry } from 'pages/Compound/useFarmBotRegistry' +import { FarmBotInfo, FarmBotSummary, FarmBotType, useFarmBotRegistry } from 'pages/Compound/useFarmBotRegistry' import { useFarmBotRewards } from 'pages/Compound/useFarmBotRewards' import ZapCard from 'pages/Zap/ZapCard' import React, { useEffect, useState } from 'react' @@ -43,12 +43,27 @@ const Header: React.FC = ({ children }) => { ) } -export const farmBotAddresses = [ - '0xCB34fbfC3b9a73bc04D2eb43B62532c7918d9E81', // mcUSD-mcEUR - '0xec17fb85529a6a48cb6ed7e3c1d1a7cc57d742c1', // PACT-CELO - '0x1cEC3e5722CB0a2FFB78e299b9607ea7efA92090', // UBE-CELO - '0xC2402ADc740eFdC40C19fc384240481f11E35E8a', // CELO-mcUSD - '0x61e6b1C8AB35dcb7FE1B86f14D52A5A5820Be5d4', // cUSD-cUSDC +export const farmBotAddresses: FarmBotInfo[] = [ + { + address: '0xCB34fbfC3b9a73bc04D2eb43B62532c7918d9E81', // mcUSD-mcEUR + type: FarmBotType.Ubeswap, + }, + { + address: '0xec17fb85529a6a48cb6ed7e3c1d1a7cc57d742c1', // PACT-CELO + type: FarmBotType.Ubeswap, + }, + { + address: '0x1cEC3e5722CB0a2FFB78e299b9607ea7efA92090', // UBE-CELO + type: FarmBotType.Ubeswap, + }, + { + address: '0xC2402ADc740eFdC40C19fc384240481f11E35E8a', // CELO-mcUSD + type: FarmBotType.Ubeswap, + }, + { + address: '0x61e6b1C8AB35dcb7FE1B86f14D52A5A5820Be5d4', // cUSD-cUSDC + type: FarmBotType.Mobius, + }, ] export const RFP_TOKEN_LIST = { @@ -56,8 +71,8 @@ export const RFP_TOKEN_LIST = { logoURI: '', keywords: ['celo', 'ubeswap', 'defi'], timestamp: '2022-04-17T20:14:10.685Z', - tokens: farmBotAddresses.map((address) => ({ - address, + tokens: farmBotAddresses.map((info) => ({ + address: info.address, name: 'Revo Farm Point', symbol: 'RFP', chainId: 42220, @@ -78,6 +93,7 @@ export default function Zap() { const [unstakedFarms, setUnstakedFarms] = useState([]) const farmbotFarmSummaries = useFarmBotRegistry(farmBotAddresses) + console.log(farmbotFarmSummaries) const farmbotFarmRewards = useFarmBotRewards(farmBotAddresses) useEffect(() => { From ff33c5cb47a4a6136aba50e0191acf787863d4bf Mon Sep 17 00:00:00 2001 From: Joseph Bergeron Date: Tue, 21 Jun 2022 00:22:24 -0400 Subject: [PATCH 2/2] Remove console --- src/pages/Zap/index.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/pages/Zap/index.tsx b/src/pages/Zap/index.tsx index f9223a9be53..1c57962bee4 100644 --- a/src/pages/Zap/index.tsx +++ b/src/pages/Zap/index.tsx @@ -93,7 +93,6 @@ export default function Zap() { const [unstakedFarms, setUnstakedFarms] = useState([]) const farmbotFarmSummaries = useFarmBotRegistry(farmBotAddresses) - console.log(farmbotFarmSummaries) const farmbotFarmRewards = useFarmBotRewards(farmBotAddresses) useEffect(() => {