Overview ERC20
PRICE
n/a

ON-CHAIN MARKET CAP n/a

Total Supply:
19,455.96 cJOE

Holders:
702
Profile Summary
Blockchain:
C-Chain (43114)


Decimals:
18
Contract Source Code Verified (Partial Match)
Contract Name:
CompoundingJoe

Compiler Version
v0.7.3+commit.9bfce1f6

Optimization Enabled:
Yes with 999 runs

Created At:
Thu, 26 Aug 2021 17:12:33 GMT
CompoundingJoe.sol
contracts
strategies
CompoundingJoe.sol


Contract ABI
[
  {
    "inputs": [
      {
        "internalType": "string",
        "name": "_name",
        "type": "string"
      },
      {
        "internalType": "string",
        "name": "_symbol",
        "type": "string"
      },
      {
        "internalType": "address",
        "name": "_depositToken",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "_rewardToken",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "_stakingContract",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "_conversionContract",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "_timelock",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "_pid",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_minTokensToReinvest",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_adminFeeBips",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_devFeeBips",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_reinvestRewardBips",
        "type": "uint256"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "constructor"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "account",
        "type": "address"
      }
    ],
    "name": "AllowDepositor",
    "type": "event"
  },
  {
    "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": "account",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "Deposit",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "bool",
        "name": "newValue",
        "type": "bool"
      }
    ],
    "name": "DepositsEnabled",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "previousOwner",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "newOwner",
        "type": "address"
      }
    ],
    "name": "OwnershipTransferred",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "address",
        "name": "token",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "Recovered",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "newTotalDeposits",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "newTotalSupply",
        "type": "uint256"
      }
    ],
    "name": "Reinvest",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "account",
        "type": "address"
      }
    ],
    "name": "RemoveDepositor",
    "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": "uint256",
        "name": "oldValue",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "newValue",
        "type": "uint256"
      }
    ],
    "name": "UpdateAdminFee",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "address",
        "name": "oldValue",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "address",
        "name": "newValue",
        "type": "address"
      }
    ],
    "name": "UpdateDevAddr",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "oldValue",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "newValue",
        "type": "uint256"
      }
    ],
    "name": "UpdateDevFee",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "oldValue",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "newValue",
        "type": "uint256"
      }
    ],
    "name": "UpdateMaxTokensToDepositWithoutReinvest",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "oldValue",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "newValue",
        "type": "uint256"
      }
    ],
    "name": "UpdateMinTokensToReinvest",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "oldValue",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "newValue",
        "type": "uint256"
      }
    ],
    "name": "UpdateReinvestReward",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "account",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "Withdraw",
    "type": "event"
  },
  {
    "inputs": [],
    "name": "ADMIN_FEE_BIPS",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "DEPOSITS_ENABLED",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "DEV_FEE_BIPS",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "DOMAIN_TYPEHASH",
    "outputs": [
      {
        "internalType": "bytes32",
        "name": "",
        "type": "bytes32"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "MAX_TOKENS_TO_DEPOSIT_WITHOUT_REINVEST",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "MIN_TOKENS_TO_REINVEST",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "PERMIT_TYPEHASH",
    "outputs": [
      {
        "internalType": "bytes32",
        "name": "",
        "type": "bytes32"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "PID",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "REINVEST_REWARD_BIPS",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "VERSION_HASH",
    "outputs": [
      {
        "internalType": "bytes32",
        "name": "",
        "type": "bytes32"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "depositor",
        "type": "address"
      }
    ],
    "name": "allowDepositor",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "spender",
        "type": "address"
      }
    ],
    "name": "allowance",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "name": "allowedDepositors",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "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": "checkReward",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "conversionContract",
    "outputs": [
      {
        "internalType": "contract IJoeBar",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "decimals",
    "outputs": [
      {
        "internalType": "uint8",
        "name": "",
        "type": "uint8"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "deposit",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "depositFor",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "depositToken",
    "outputs": [
      {
        "internalType": "contract IERC20",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "deadline",
        "type": "uint256"
      },
      {
        "internalType": "uint8",
        "name": "v",
        "type": "uint8"
      },
      {
        "internalType": "bytes32",
        "name": "r",
        "type": "bytes32"
      },
      {
        "internalType": "bytes32",
        "name": "s",
        "type": "bytes32"
      }
    ],
    "name": "depositWithPermit",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "devAddr",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "estimateDeployedBalance",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "estimateReinvestReward",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "getDepositTokensForShares",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "getDomainSeparator",
    "outputs": [
      {
        "internalType": "bytes32",
        "name": "",
        "type": "bytes32"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "getSharesForDepositTokens",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "name",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "name": "nonces",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "numberOfAllowedDepositors",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "owner",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "owner",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "spender",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "value",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "deadline",
        "type": "uint256"
      },
      {
        "internalType": "uint8",
        "name": "v",
        "type": "uint8"
      },
      {
        "internalType": "bytes32",
        "name": "r",
        "type": "bytes32"
      },
      {
        "internalType": "bytes32",
        "name": "s",
        "type": "bytes32"
      }
    ],
    "name": "permit",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "recoverAVAX",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "tokenAddress",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "tokenAmount",
        "type": "uint256"
      }
    ],
    "name": "recoverERC20",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "reinvest",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "depositor",
        "type": "address"
      }
    ],
    "name": "removeDepositor",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "renounceOwnership",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "minReturnAmountAccepted",
        "type": "uint256"
      },
      {
        "internalType": "bool",
        "name": "disableDeposits",
        "type": "bool"
      }
    ],
    "name": "rescueDeployedFunds",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "token",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "spender",
        "type": "address"
      }
    ],
    "name": "revokeAllowance",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "rewardToken",
    "outputs": [
      {
        "internalType": "contract IERC20",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "setAllowances",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "stakingContract",
    "outputs": [
      {
        "internalType": "contract IJoeChef",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "symbol",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "totalDeposits",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "totalSupply",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "dst",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "transfer",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "src",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "dst",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "transferFrom",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "newOwner",
        "type": "address"
      }
    ],
    "name": "transferOwnership",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "newValue",
        "type": "uint256"
      }
    ],
    "name": "updateAdminFee",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bool",
        "name": "newValue",
        "type": "bool"
      }
    ],
    "name": "updateDepositsEnabled",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "newValue",
        "type": "address"
      }
    ],
    "name": "updateDevAddr",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "newValue",
        "type": "uint256"
      }
    ],
    "name": "updateDevFee",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "newValue",
        "type": "uint256"
      }
    ],
    "name": "updateMaxTokensToDepositWithoutReinvest",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "newValue",
        "type": "uint256"
      }
    ],
    "name": "updateMinTokensToReinvest",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "newValue",
        "type": "uint256"
      }
    ],
    "name": "updateReinvestReward",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "withdraw",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "xJoe",
    "outputs": [
      {
        "internalType": "contract IERC20",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  }
]


Contract Creation Code
60c060405260096080819052685969656c642059616b60b81b60a09081526200002c916000919062000ab0565b506040805180820190915260038082526216549560ea1b6020909201918252620000599160019162000ab0565b503480156200006757600080fd5b50604051620046c2380380620046c283398181016040526101808110156200008e57600080fd5b8101908080516040519392919084640100000000821115620000af57600080fd5b908301906020820185811115620000c557600080fd5b8251640100000000811182820188101715620000e057600080fd5b82525081516020918201929091019080838360005b838110156200010f578181015183820152602001620000f5565b50505050905090810190601f1680156200013d5780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200016157600080fd5b9083019060208201858111156200017757600080fd5b82516401000000008111828201881017156200019257600080fd5b82525081516020918201929091019080838360005b83811015620001c1578181015183820152602001620001a7565b50505050905090810190601f168015620001ef5780820380516001836020036101000a031916815260200191505b5060409081526020820151908201516060830151608084015160a085015160c086015160e087015161010088015161012089015161014090990151979a509598509396929591949093929091600062000247620003ad565b600680546001600160a01b0319166001600160a01b03831690811790915560405191925090600090600080516020620046a2833981519152908290a3508b51620002999060009060208f019062000ab0565b508a51620002af9060019060208e019062000ab0565b50600a80546001600160a01b03808d166001600160a01b031992831617909255600b80548c8416908316179055601380548b841690831617905560148054928a16928216831790556015805482169092179091556016869055600c8054909116331790556200031d620003b1565b62000328846200052d565b6200033383620005d7565b6200033e82620006c7565b6200034981620007a3565b6200035560016200087f565b620003608662000945565b604080516000808252602082015281517fc7606d21ac05cd309191543e409f0845c016120563783d70e4f41419dc0ef234929181900390910190a150505050505050505050505062000b4c565b3390565b620003bb620003ad565b6001600160a01b0316620003ce62000a3f565b6001600160a01b03161462000419576040805162461bcd60e51b8152602060048201819052602482015260008051602062004682833981519152604482015290519081900360640190fd5b600a546014546040805163095ea7b360e01b81526001600160a01b03928316600482015260001960248201529051919092169163095ea7b39160448083019260209291908290030181600087803b1580156200047457600080fd5b505af115801562000489573d6000803e3d6000fd5b505050506040513d6020811015620004a057600080fd5b50506015546013546040805163095ea7b360e01b81526001600160a01b03928316600482015260001960248201529051919092169163095ea7b39160448083019260209291908290030181600087803b158015620004fd57600080fd5b505af115801562000512573d6000803e3d6000fd5b505050506040513d60208110156200052957600080fd5b5050565b62000537620003ad565b6001600160a01b03166200054a62000a3f565b6001600160a01b03161462000595576040805162461bcd60e51b8152602060048201819052602482015260008051602062004682833981519152604482015290519081900360640190fd5b600d54604080519182526020820183905280517f481f79ac3a523b6d6db3c5a720e190e986d1cc1b41adcdf50f9caef8499011009281900390910190a1600d55565b620005e1620003ad565b6001600160a01b0316620005f462000a3f565b6001600160a01b0316146200063f576040805162461bcd60e51b8152602060048201819052602482015260008051602062004682833981519152604482015290519081900360640190fd5b61271062000679601054620006656012548562000a4e60201b620026fb1790919060201c565b62000a4e60201b620026fb1790919060201c565b11156200068557600080fd5b601154604080519182526020820183905280517f3cc372f330f95ac9540626dc8a25f5bf21ba607215a5d58304cb804d446f104a9281900390910190a1601155565b620006d1620003ad565b6001600160a01b0316620006e462000a3f565b6001600160a01b0316146200072f576040805162461bcd60e51b8152602060048201819052602482015260008051602062004682833981519152604482015290519081900360640190fd5b61271062000755601054620006656011548562000a4e60201b620026fb1790919060201c565b11156200076157600080fd5b601254604080519182526020820183905280517f2a42303d002f0ba6cfe8259c91d4684443fb0b3de286ba74991175d6517261319281900390910190a1601255565b620007ad620003ad565b6001600160a01b0316620007c062000a3f565b6001600160a01b0316146200080b576040805162461bcd60e51b8152602060048201819052602482015260008051602062004682833981519152604482015290519081900360640190fd5b61271062000831601254620006656011548562000a4e60201b620026fb1790919060201c565b11156200083d57600080fd5b601054604080519182526020820183905280517fe7f97d51d307dc44045597c9978bec0f842e6bb40d19b9444084cfa30d9ed4f29281900390910190a1601055565b62000889620003ad565b6001600160a01b03166200089c62000a3f565b6001600160a01b031614620008e7576040805162461bcd60e51b8152602060048201819052602482015260008051602062004682833981519152604482015290519081900360640190fd5b600f5460ff1615158115151415620008fe57600080fd5b600f805482151560ff19909116811790915560408051918252517f7b014ed3854e7f5cb0218d58b3c6ae7d53a68bb0af2f67bfb029ea42c38a7e859181900360200190a150565b6200094f620003ad565b6001600160a01b03166200096262000a3f565b6001600160a01b031614620009ad576040805162461bcd60e51b8152602060048201819052602482015260008051602062004682833981519152604482015290519081900360640190fd5b6001600160a01b038116620009f45760405162461bcd60e51b81526004018080602001828103825260268152602001806200465c6026913960400191505060405180910390fd5b6006546040516001600160a01b03808416921690600080516020620046a283398151915290600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6006546001600160a01b031690565b60008282018381101562000aa9576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1062000af357805160ff191683800117855562000b23565b8280016001018555821562000b23579182015b8281111562000b2357825182559160200191906001019062000b06565b5062000b3192915062000b35565b5090565b5b8082111562000b31576000815560010162000b36565b613b008062000b5c6000396000f3fe608060405234801561001057600080fd5b506004361061038e5760003560e01c80638aff733d116101de578063c4b24a461161010f578063dd8ce4d6116100ad578063ee99205c1161007c578063ee99205c1461094f578063f2fde38b14610957578063f7c618c11461097d578063fdb5a03e146109855761038e565b8063dd8ce4d6146108f0578063e21ac8251461090d578063eab89a5a1461092a578063ed24911d146109475761038e565b8063d505accf116100e9578063d505accf14610861578063da09c72c146108b2578063dbd9a4d4146108ba578063dd62ed3e146108c25761038e565b8063c4b24a4614610834578063c89039c51461083c578063cff1b6ef146108445761038e565b8063a8ae2b7c1161017c578063b52a321f11610156578063b52a321f146107ff578063b6b55f2514610807578063b9e57b8014610824578063bd079f551461082c5761038e565b8063a8ae2b7c14610791578063a9059cbb146107ae578063ac0d31ff146107da5761038e565b80639291d563116101b85780639291d5631461073e57806395d89b411461076457806399729ec11461076c5780639e4e7318146107895761038e565b80638aff733d146107085780638b73e606146107105780638da5cb5b146107365761038e565b80634bebd1e7116102c357806370a08231116102615780637d882097116102305780637d882097146106915780637ecebe001461069957806381837230146106bf5780638980f11f146106dc5761038e565b806370a082311461062d578063715018a614610653578063789139bc1461065b5780637ae26773146106635761038e565b80634f8406dc1161029d5780634f8406dc146105f15780635ea682ea146106155780635eaec0e41461061d57806360384fdf146106255761038e565b80634bebd1e71461058f5780634e77ace5146105b55780634ebb7916146105d45761038e565b80632e1a7d4d11610330578063313ce5671161030a578063313ce5671461050b5780633bdc6e7214610529578063483c2ef0146105315780634a970be7146105575761038e565b80632e1a7d4d146104b85780632f4f21e2146104d757806330adf81f146105035761038e565b80630f23475d1161036c5780630f23475d1461046a57806318160ddd1461047257806320606b701461047a57806323b872dd146104825761038e565b806306fdde03146103935780630767711114610410578063095ea7b31461042a575b600080fd5b61039b61098d565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103d55781810151838201526020016103bd565b50505050905090810190601f1680156104025780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610418610a1b565b60408051918252519081900360200190f35b6104566004803603604081101561044057600080fd5b506001600160a01b038135169060200135610a21565b604080519115158252519081900360200190f35b610418610a38565b610418610ae4565b610418610aea565b6104566004803603606081101561049857600080fd5b506001600160a01b03813581169160208101359091169060400135610b0e565b6104d5600480360360208110156104ce57600080fd5b5035610bf0565b005b6104d5600480360360408110156104ed57600080fd5b506001600160a01b038135169060200135610d32565b610418610d3c565b610513610d60565b6040805160ff9092168252519081900360200190f35b610418610d65565b6104566004803603602081101561054757600080fd5b50356001600160a01b0316610d6b565b6104d5600480360360a081101561056d57600080fd5b5080359060208101359060ff6040820135169060608101359060800135610d80565b6104d5600480360360208110156105a557600080fd5b50356001600160a01b0316610e39565b6104d5600480360360208110156105cb57600080fd5b50351515610f75565b6104d5600480360360208110156105ea57600080fd5b5035611034565b6105f9611110565b604080516001600160a01b039092168252519081900360200190f35b61041861111f565b610418611125565b6105f961112b565b6104186004803603602081101561064357600080fd5b50356001600160a01b031661113a565b6104d5611159565b610418611212565b6104d56004803603604081101561067957600080fd5b506001600160a01b0381358116916020013516611218565b610418611307565b610418600480360360208110156106af57600080fd5b50356001600160a01b031661130d565b6104d5600480360360208110156106d557600080fd5b503561131f565b6104d5600480360360408110156106f257600080fd5b506001600160a01b0381351690602001356113c3565b6104186114fe565b6104d56004803603602081101561072657600080fd5b50356001600160a01b0316611504565b6105f961166b565b6104d56004803603602081101561075457600080fd5b50356001600160a01b031661167a565b61039b611750565b6104d56004803603602081101561078257600080fd5b50356117aa565b61041861187d565b6104d5600480360360208110156107a757600080fd5b50356118a1565b610456600480360360408110156107c457600080fd5b506001600160a01b03813516906020013561196e565b6104d5600480360360408110156107f057600080fd5b5080359060200135151561197b565b610456611cfe565b6104d56004803603602081101561081d57600080fd5b5035611d07565b610418611d14565b610418611d5b565b610418611d61565b6105f9611f5b565b6104d56004803603602081101561085a57600080fd5b5035611f6a565b6104d5600480360360e081101561087757600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135612037565b6105f9612137565b6104d5612146565b610418600480360360408110156108d857600080fd5b506001600160a01b03813581169160200135166122b2565b6104186004803603602081101561090657600080fd5b50356122dd565b6104d56004803603602081101561092357600080fd5b503561231c565b6104186004803603602081101561094057600080fd5b50356123c0565b610418612400565b6105f961250d565b6104d56004803603602081101561096d57600080fd5b50356001600160a01b031661251c565b6105f961262c565b6104d561263b565b6000805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610a135780601f106109e857610100808354040283529160200191610a13565b820191906000526020600020905b8154815290600101906020018083116109f657829003601f168201915b505050505081565b60115481565b6000610a2e33848461275c565b5060015b92915050565b601354601654604080517f93f1a40b0000000000000000000000000000000000000000000000000000000081526004810192909252306024830152805160009384936001600160a01b03909116926393f1a40b92604480840193829003018186803b158015610aa657600080fd5b505afa158015610aba573d6000803e3d6000fd5b505050506040513d6040811015610ad057600080fd5b50519050610add81612874565b9150505b90565b60025481565b7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6001600160a01b038316600081815260036020908152604080832033808552925282205491929091908214801590610b4857506000198114155b15610bd9576000610b74856040518060600160405280602f8152602001613a21602f9139849190612999565b6001600160a01b0380891660008181526003602090815260408083209489168084529482529182902085905581518581529151949550929391927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92592918290030190a3505b610be4868686612a30565b50600195945050505050565b6000610bfb826123c0565b90508015610d2e57610c0c81612b3d565b600a546040805163a9059cbb60e01b81523360048201526024810184905290516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b158015610c6057600080fd5b505af1158015610c74573d6000803e3d6000fd5b505050506040513d6020811015610c8a57600080fd5b5051610cdd576040805162461bcd60e51b815260206004820152601860248201527f436f6d706f756e64696e674a6f653a3a77697468647261770000000000000000604482015290519081900360640190fd5b610ce73383612c94565b600954610cf49082612d69565b60095560408051828152905133917f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364919081900360200190a25b5050565b610d2e8282612dab565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60075481565b60086020526000908152604090205460ff1681565b600a54604080517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018890526064810187905260ff8616608482015260a4810185905260c4810184905290516001600160a01b039092169163d505accf9160e48082019260009290919082900301818387803b158015610e1057600080fd5b505af1158015610e24573d6000803e3d6000fd5b50505050610e323386612dab565b5050505050565b610e41612f46565b6001600160a01b0316610e5261166b565b6001600160a01b031614610e9b576040805162461bcd60e51b815260206004820181905260248201526000805160206139cd833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526008602052604090205460ff1615610f09576040805162461bcd60e51b815260206004820152601c60248201527f5065726d697373696f6e65643a3a616c6c6f774465706f7369746f7200000000604482015290519081900360640190fd5b6001600160a01b0381166000908152600860205260409020805460ff19166001908117909155600754610f3b916126fb565b6007556040516001600160a01b038216907fc0a1035c16faf8d1304056d92c00edf028f87e62b8235a938f00af9e3c0312c590600090a250565b610f7d612f46565b6001600160a01b0316610f8e61166b565b6001600160a01b031614610fd7576040805162461bcd60e51b815260206004820181905260248201526000805160206139cd833981519152604482015290519081900360640190fd5b600f5460ff1615158115151415610fed57600080fd5b600f805482151560ff19909116811790915560408051918252517f7b014ed3854e7f5cb0218d58b3c6ae7d53a68bb0af2f67bfb029ea42c38a7e859181900360200190a150565b61103c612f46565b6001600160a01b031661104d61166b565b6001600160a01b031614611096576040805162461bcd60e51b815260206004820181905260248201526000805160206139cd833981519152604482015290519081900360640190fd5b600081116110a357600080fd5b604051339082156108fc029083906000818181858888f193505050501580156110d0573d6000803e3d6000fd5b5060408051600081526020810183905281517f8c1256b8896378cd5044f80c202f9772b9d77dc85c8a6eb51967210b09bfaa28929181900390910190a150565b6014546001600160a01b031681565b60125481565b60165481565b6015546001600160a01b031681565b6001600160a01b0381166000908152600460205260409020545b919050565b611161612f46565b6001600160a01b031661117261166b565b6001600160a01b0316146111bb576040805162461bcd60e51b815260206004820181905260248201526000805160206139cd833981519152604482015290519081900360640190fd5b6006546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a36006805473ffffffffffffffffffffffffffffffffffffffff19169055565b600e5481565b611220612f46565b6001600160a01b031661123161166b565b6001600160a01b03161461127a576040805162461bcd60e51b815260206004820181905260248201526000805160206139cd833981519152604482015290519081900360640190fd5b816001600160a01b031663095ea7b38260006040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156112d257600080fd5b505af11580156112e6573d6000803e3d6000fd5b505050506040513d60208110156112fc57600080fd5b5051610d2e57600080fd5b60095481565b60056020526000908152604090205481565b611327612f46565b6001600160a01b031661133861166b565b6001600160a01b031614611381576040805162461bcd60e51b815260206004820181905260248201526000805160206139cd833981519152604482015290519081900360640190fd5b600d54604080519182526020820183905280517f481f79ac3a523b6d6db3c5a720e190e986d1cc1b41adcdf50f9caef8499011009281900390910190a1600d55565b6113cb612f46565b6001600160a01b03166113dc61166b565b6001600160a01b031614611425576040805162461bcd60e51b815260206004820181905260248201526000805160206139cd833981519152604482015290519081900360640190fd5b6000811161143257600080fd5b6040805163a9059cbb60e01b81523360048201526024810183905290516001600160a01b0384169163a9059cbb9160448083019260209291908290030181600087803b15801561148157600080fd5b505af1158015611495573d6000803e3d6000fd5b505050506040513d60208110156114ab57600080fd5b50516114b657600080fd5b604080516001600160a01b03841681526020810183905281517f8c1256b8896378cd5044f80c202f9772b9d77dc85c8a6eb51967210b09bfaa28929181900390910190a15050565b60105481565b61150c612f46565b6001600160a01b031661151d61166b565b6001600160a01b031614611566576040805162461bcd60e51b815260206004820181905260248201526000805160206139cd833981519152604482015290519081900360640190fd5b6000600754116115a75760405162461bcd60e51b81526004018080602001828103825260348152602001806138c16034913960400191505060405180910390fd5b6001600160a01b03811660009081526008602052604090205460ff1615156001146116035760405162461bcd60e51b815260040180806020018281038252602a81526020018061393a602a913960400191505060405180910390fd5b6001600160a01b0381166000908152600860205260409020805460ff19169055600754611631906001612d69565b6007556040516001600160a01b038216907f0e86f6608b536e5339a25b65ff531f5ea91e1313d056ecd4752b35cbd16137d490600090a250565b6006546001600160a01b031690565b600c546001600160a01b031633146116d9576040805162461bcd60e51b815260206004820152601460248201527f59616b53747261746567793a3a6f6e6c79446576000000000000000000000000604482015290519081900360640190fd5b600c54604080516001600160a01b039283168152918316602083015280517fa8e91499ed37682f43cffb045fcc7d379a91e8c9a14e6321877ee34dee564c009281900390910190a1600c805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b60018054604080516020600284861615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610a135780601f106109e857610100808354040283529160200191610a13565b6117b2612f46565b6001600160a01b03166117c361166b565b6001600160a01b03161461180c576040805162461bcd60e51b815260206004820181905260248201526000805160206139cd833981519152604482015290519081900360640190fd5b61271061183060105461182a601154856126fb90919063ffffffff16565b906126fb565b111561183b57600080fd5b601254604080519182526020820183905280517f2a42303d002f0ba6cfe8259c91d4684443fb0b3de286ba74991175d6517261319281900390910190a1601255565b7fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc681565b6118a9612f46565b6001600160a01b03166118ba61166b565b6001600160a01b031614611903576040805162461bcd60e51b815260206004820181905260248201526000805160206139cd833981519152604482015290519081900360640190fd5b61271061192160125461182a601154856126fb90919063ffffffff16565b111561192c57600080fd5b601054604080519182526020820183905280517fe7f97d51d307dc44045597c9978bec0f842e6bb40d19b9444084cfa30d9ed4f29281900390910190a1601055565b6000610a2e338484612a30565b611983612f46565b6001600160a01b031661199461166b565b6001600160a01b0316146119dd576040805162461bcd60e51b815260206004820181905260248201526000805160206139cd833981519152604482015290519081900360640190fd5b600a54604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015611a2857600080fd5b505afa158015611a3c573d6000803e3d6000fd5b505050506040513d6020811015611a5257600080fd5b5051601354601654604080517f5312ea8e0000000000000000000000000000000000000000000000000000000081526004810192909252519293506001600160a01b0390911691635312ea8e9160248082019260009290919082900301818387803b158015611ac057600080fd5b505af1158015611ad4573d6000803e3d6000fd5b5050601454601554604080516370a0823160e01b815230600482015290516001600160a01b0393841695506367dfd4c9945091909216916370a08231916024808301926020929190829003018186803b158015611b3057600080fd5b505afa158015611b44573d6000803e3d6000fd5b505050506040513d6020811015611b5a57600080fd5b5051604080517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168152600481019290925251602480830192600092919082900301818387803b158015611bb257600080fd5b505af1158015611bc6573d6000803e3d6000fd5b5050600a54604080516370a0823160e01b81523060048201529051600094506001600160a01b0390921692506370a08231916024808301926020929190829003018186803b158015611c1757600080fd5b505afa158015611c2b573d6000803e3d6000fd5b505050506040513d6020811015611c4157600080fd5b5051905083611c508284612d69565b1015611c8d5760405162461bcd60e51b81526004018080602001828103825260238152602001806138786023913960400191505060405180910390fd5b600981905560025460408051838152602081019290925280517fc7606d21ac05cd309191543e409f0845c016120563783d70e4f41419dc0ef2349281900390910190a1600f5460ff1615156001148015611ce957506001831515145b15611cf857611cf86000610f75565b50505050565b600f5460ff1681565b611d113382612dab565b50565b600080611d1f611d61565b9050600d548110611d5357611d4b612710611d4560105484612f4a90919063ffffffff16565b90612fa3565b915050610ae1565b600091505090565b600d5481565b601354601654604080517fffcd426300000000000000000000000000000000000000000000000000000000815260048101929092523060248301525160009283926001600160a01b039091169163ffcd4263916044808201928692909190829003018186803b158015611dd357600080fd5b505afa158015611de7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526080811015611e1057600080fd5b81516020830151604080850180519151939592948301929184640100000000821115611e3b57600080fd5b908301906020820185811115611e5057600080fd5b8251640100000000811182820188101715611e6a57600080fd5b82525081516020918201929091019080838360005b83811015611e97578181015183820152602001611e7f565b50505050905090810190601f168015611ec45780820380516001836020036101000a031916815260200191505b506040818152600b546370a0823160e01b835230600484015290519798506000976001600160a01b0390911696506370a082319550602480830195506020945090925090829003018186803b158015611f1c57600080fd5b505afa158015611f30573d6000803e3d6000fd5b505050506040513d6020811015611f4657600080fd5b50519050611f5482826126fb565b9250505090565b600a546001600160a01b031681565b611f72612f46565b6001600160a01b0316611f8361166b565b6001600160a01b031614611fcc576040805162461bcd60e51b815260206004820181905260248201526000805160206139cd833981519152604482015290519081900360640190fd5b612710611fea60105461182a601254856126fb90919063ffffffff16565b1115611ff557600080fd5b601154604080519182526020820183905280517f3cc372f330f95ac9540626dc8a25f5bf21ba607215a5d58304cb804d446f104a9281900390910190a1601155565b4284101561208c576040805162461bcd60e51b815260206004820152600f60248201527f7065726d69743a3a657870697265640000000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b0380881660008181526005602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938a1660608401526080830189905260a083019390935260c08083018890528151808403909101815260e0909201905280519101206121228882868686612fe5565b61212d88888861275c565b5050505050505050565b600c546001600160a01b031681565b61214e612f46565b6001600160a01b031661215f61166b565b6001600160a01b0316146121a8576040805162461bcd60e51b815260206004820181905260248201526000805160206139cd833981519152604482015290519081900360640190fd5b600a546014546040805163095ea7b360e01b81526001600160a01b03928316600482015260001960248201529051919092169163095ea7b39160448083019260209291908290030181600087803b15801561220257600080fd5b505af1158015612216573d6000803e3d6000fd5b505050506040513d602081101561222c57600080fd5b50506015546013546040805163095ea7b360e01b81526001600160a01b03928316600482015260001960248201529051919092169163095ea7b39160448083019260209291908290030181600087803b15801561228857600080fd5b505af115801561229c573d6000803e3d6000fd5b505050506040513d6020811015610d2e57600080fd5b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b60006122f6600954600254612f4a90919063ffffffff16565b612301575080611154565b610a32600954611d4560025485612f4a90919063ffffffff16565b612324612f46565b6001600160a01b031661233561166b565b6001600160a01b03161461237e576040805162461bcd60e51b815260206004820181905260248201526000805160206139cd833981519152604482015290519081900360640190fd5b600e54604080519182526020820183905280517fa5dae50539d56dfe1fb5273d883b0c39bc76750a25d036fc5fbd09ad8fd5f57f9281900390910190a1600e55565b60006123d9600954600254612f4a90919063ffffffff16565b6123e557506000611154565b610a32600254611d4560095485612f4a90919063ffffffff16565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60001b600060405180828054600181600116156101000203166002900480156124835780601f10612461576101008083540402835291820191612483565b820191906000526020600020905b81548152906001019060200180831161246f575b505091505060405180910390207fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660001b6124bc61311d565b3060405160200180868152602001858152602001848152602001838152602001826001600160a01b031681526020019550505050505060405160208183030381529060405280519060200120905090565b6013546001600160a01b031681565b612524612f46565b6001600160a01b031661253561166b565b6001600160a01b03161461257e576040805162461bcd60e51b815260206004820181905260248201526000805160206139cd833981519152604482015290519081900360640190fd5b6001600160a01b0381166125c35760405162461bcd60e51b815260040180806020018281038252602681526020018061389b6026913960400191505060405180910390fd5b6006546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36006805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b600b546001600160a01b031681565b32331461268f576040805162461bcd60e51b815260206004820152601460248201527f59616b53747261746567793a3a6f6e6c79454f41000000000000000000000000604482015290519081900360640190fd5b6000612699611d61565b9050600d548110156126f2576040805162461bcd60e51b815260206004820152601860248201527f436f6d706f756e64696e674a6f653a3a7265696e766573740000000000000000604482015290519081900360640190fd5b611d1181613121565b600082820183811015612755576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b0383166127b7576040805162461bcd60e51b815260206004820152601c60248201527f5f617070726f76653a3a6f776e6572207a65726f206164647265737300000000604482015290519081900360640190fd5b6001600160a01b038216612812576040805162461bcd60e51b815260206004820152601e60248201527f5f617070726f76653a3a7370656e646572207a65726f20616464726573730000604482015290519081900360640190fd5b6001600160a01b03808416600081815260036020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b600a54601454604080516370a0823160e01b81526001600160a01b0392831660048201529051600093849316916370a08231916024808301926020929190829003018186803b1580156128c657600080fd5b505afa1580156128da573d6000803e3d6000fd5b505050506040513d60208110156128f057600080fd5b5051601554604080516318160ddd60e01b815290519293506000926001600160a01b03909216916318160ddd91600480820192602092909190829003018186803b15801561293d57600080fd5b505afa158015612951573d6000803e3d6000fd5b505050506040513d602081101561296757600080fd5b505190506129758282612f4a565b612983578392505050611154565b61299181611d458685612f4a565b949350505050565b60008184841115612a285760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156129ed5781810151838201526020016129d5565b50505050905090810190601f168015612a1a5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6001600160a01b038216612a755760405162461bcd60e51b81526004018080602001828103825260348152602001806139ed6034913960400191505060405180910390fd5b612ab2816040518060600160405280602e8152602001613a9d602e91396001600160a01b0386166000908152600460205260409020549190612999565b6001600160a01b038085166000908152600460205260408082209390935590841681522054612ae190826126fb565b6001600160a01b0380841660008181526004602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008111612b7c5760405162461bcd60e51b8152600401808060200182810382526026815260200180613a506026913960400191505060405180910390fd5b6000612b87826134e6565b601354601654604080517f441a3e70000000000000000000000000000000000000000000000000000000008152600481019290925260248201849052519293506001600160a01b039091169163441a3e709160448082019260009290919082900301818387803b158015612bfa57600080fd5b505af1158015612c0e573d6000803e3d6000fd5b5050601454604080517f67dfd4c90000000000000000000000000000000000000000000000000000000081526004810186905290516001600160a01b0390921693506367dfd4c9925060248082019260009290919082900301818387803b158015612c7857600080fd5b505af1158015612c8c573d6000803e3d6000fd5b505050505050565b612cd181604051806060016040528060278152602001613a76602791396001600160a01b0385166000908152600460205260409020549190612999565b60046000846001600160a01b03166001600160a01b0316815260200190815260200160002081905550612d2181604051806060016040528060278152602001613964602791396002549190612999565b6002556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b600061275583836040518060400160405280601f81526020017f536166654d6174683a207375627472616374696f6e20756e646572666c6f7700815250612999565b600f5460ff161515600114612e07576040805162461bcd60e51b815260206004820152601860248201527f436f6d706f756e64696e674a6f653a3a5f6465706f7369740000000000000000604482015290519081900360640190fd5b600e5415612e30576000612e19611d61565b9050600e54811115612e2e57612e2e81613121565b505b600a54604080517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201523060248201526044810184905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b158015612ea357600080fd5b505af1158015612eb7573d6000803e3d6000fd5b505050506040513d6020811015612ecd57600080fd5b5051612ed857600080fd5b612ee181613603565b612ef382612eee836122dd565b613622565b600954612f0090826126fb565b6009556040805182815290516001600160a01b038416917fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c919081900360200190a25050565b3390565b600082612f5957506000610a32565b82820282848281612f6657fe5b04146127555760405162461bcd60e51b81526004018080602001828103825260218152602001806139ac6021913960400191505060405180910390fd5b600061275583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506136ad565b6000612fef612400565b8560405160200180807f190100000000000000000000000000000000000000000000000000000000000081525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050600060018286868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156130a3573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906130d95750866001600160a01b0316816001600160a01b0316145b6131145760405162461bcd60e51b81526004018080602001828103825260248152602001806138f56024913960400191505060405180910390fd5b50505050505050565b4690565b60135460165460408051631c57762b60e31b8152600481019290925260006024830181905290516001600160a01b039093169263e2bbb15892604480820193929182900301818387803b15801561317757600080fd5b505af115801561318b573d6000803e3d6000fd5b5050505060006131ac612710611d4560125485612f4a90919063ffffffff16565b9050801561328a57600b54600c546040805163a9059cbb60e01b81526001600160a01b039283166004820152602481018590529051919092169163a9059cbb9160448083019260209291908290030181600087803b15801561320d57600080fd5b505af1158015613221573d6000803e3d6000fd5b505050506040513d602081101561323757600080fd5b505161328a576040805162461bcd60e51b815260206004820152601e60248201527f436f6d706f756e64696e674a6f653a3a5f7265696e766573742c206465760000604482015290519081900360640190fd5b60006132a7612710611d4560115486612f4a90919063ffffffff16565b9050801561338c57600b546001600160a01b031663a9059cbb6132c861166b565b836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561330f57600080fd5b505af1158015613323573d6000803e3d6000fd5b505050506040513d602081101561333957600080fd5b505161338c576040805162461bcd60e51b815260206004820181905260248201527f436f6d706f756e64696e674a6f653a3a5f7265696e766573742c2061646d696e604482015290519081900360640190fd5b60006133a9612710611d4560105487612f4a90919063ffffffff16565b9050801561346c57600b546040805163a9059cbb60e01b81523360048201526024810184905290516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b15801561340557600080fd5b505af1158015613419573d6000803e3d6000fd5b505050506040513d602081101561342f57600080fd5b505161346c5760405162461bcd60e51b81526004018080602001828103825260218152602001806139196021913960400191505060405180910390fd5b60006134848261347e85818989612d69565b90612d69565b905061348f81613603565b60095461349c90826126fb565b600981905560025460408051928352602083019190915280517fc7606d21ac05cd309191543e409f0845c016120563783d70e4f41419dc0ef2349281900390910190a15050505050565b600a54601454604080516370a0823160e01b81526001600160a01b0392831660048201529051600093849316916370a08231916024808301926020929190829003018186803b15801561353857600080fd5b505afa15801561354c573d6000803e3d6000fd5b505050506040513d602081101561356257600080fd5b5051601554604080516318160ddd60e01b815290519293506000926001600160a01b03909216916318160ddd91600480820192602092909190829003018186803b1580156135af57600080fd5b505afa1580156135c3573d6000803e3d6000fd5b505050506040513d60208110156135d957600080fd5b505190506135e78282612f4a565b6135f5578392505050611154565b61299182611d458684612f4a565b600061360e826134e6565b905061361982613712565b610d2e816137cb565b60025461362f90826126fb565b6002556001600160a01b03821660009081526004602052604090205461365590826126fb565b6001600160a01b03831660008181526004602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b600081836136fc5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156129ed5781810151838201526020016129d5565b50600083858161370857fe5b0495945050505050565b600081116137515760405162461bcd60e51b815260040180806020018281038252602181526020018061398b6021913960400191505060405180910390fd5b601454604080517fa59f3e0c0000000000000000000000000000000000000000000000000000000081526004810184905290516001600160a01b039092169163a59f3e0c9160248082019260009290919082900301818387803b1580156137b757600080fd5b505af1158015610e32573d6000803e3d6000fd5b60008111613820576040805162461bcd60e51b815260206004820152601a60248201527f436f6d706f756e64696e674a6f653a3a5f7374616b65584a6f65000000000000604482015290519081900360640190fd5b60135460165460408051631c57762b60e31b8152600481019290925260248201849052516001600160a01b039092169163e2bbb1589160448082019260009290919082900301818387803b1580156137b757600080fdfe436f6d706f756e64696e674a6f653a3a7265736375654465706c6f79656446756e64734f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573735065726d697373696f6e65643a3a72656d6f76654465706f7369746f722c206e6f20616c6c6f776564206465706f7369746f7273417263683a3a76616c69646174655369673a20696e76616c6964207369676e6174757265436f6d706f756e64696e674a6f653a3a5f7265696e766573742c207265776172645065726d697373696f6e65643a3a72656d6f76654465706f7369746f722c206e6f7420616c6c6f7765645f6275726e3a206275726e20616d6f756e74206578636565647320746f74616c20737570706c79436f6d706f756e64696e674a6f653a3a5f636f6e766572744a6f65546f584a6f65536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f7472616e73666572546f6b656e733a2063616e6e6f74207472616e7366657220746f20746865207a65726f20616464726573737472616e7366657246726f6d3a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365436f6d706f756e64696e674a6f653a3a5f77697468647261774465706f736974546f6b656e735f6275726e3a206275726e20616d6f756e7420657863656564732066726f6d2062616c616e63655f7472616e73666572546f6b656e733a207472616e7366657220657863656564732066726f6d2062616c616e6365a26469706673582212206b139e7f458c63e2b4d80f1729d89caa791645bc471818d9607c98cf6681fdae64736f6c634300070300334f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000006e84a6216ea6dacc71ee8e6b0a5b7322eebc0fdd0000000000000000000000006e84a6216ea6dacc71ee8e6b0a5b7322eebc0fdd000000000000000000000000d6a4f121ca35509af06a0be99093d08462f5305200000000000000000000000057319d41f71e81f3c65f2a47ca4e001ebafd4f330000000000000000000000008d36c5c6947adccd25ef49ea1aac2ceacfff0bd70000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000000258000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c8000000000000000000000000000000000000000000000000000000000000000f436f6d706f756e64696e67204a4f4500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004634a4f4500000000000000000000000000000000000000000000000000000000