Overview ERC20
PRICE
n/a

ON-CHAIN MARKET CAP n/a

Total Supply:
0

Profile Summary
Blockchain:
Sepolia (11155111)


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

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 200 runs

Created At:
Thu, 11 Jan 2024 21:44:12 GMT
RWAToken.sol
src
RWAToken.sol


Contract ABI
[
  {
    "inputs": [],
    "stateMutability": "nonpayable",
    "type": "constructor"
  },
  {
    "inputs": [],
    "name": "AccessControlBadConfirmation",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      },
      {
        "internalType": "bytes32",
        "name": "neededRole",
        "type": "bytes32"
      }
    ],
    "name": "AccessControlUnauthorizedAccount",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      }
    ],
    "name": "Blacklisted",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "spender",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "allowance",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "needed",
        "type": "uint256"
      }
    ],
    "name": "ERC20InsufficientAllowance",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "sender",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "balance",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "needed",
        "type": "uint256"
      }
    ],
    "name": "ERC20InsufficientBalance",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "approver",
        "type": "address"
      }
    ],
    "name": "ERC20InvalidApprover",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "receiver",
        "type": "address"
      }
    ],
    "name": "ERC20InvalidReceiver",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "sender",
        "type": "address"
      }
    ],
    "name": "ERC20InvalidSender",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "spender",
        "type": "address"
      }
    ],
    "name": "ERC20InvalidSpender",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "InvalidInitialization",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "NotInitializing",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "ZeroAddress",
    "type": "error"
  },
  {
    "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": "bool",
        "name": "blacklisted",
        "type": "bool"
      }
    ],
    "name": "BlacklistModified",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "account",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "bool",
        "name": "isExcluded",
        "type": "bool"
      }
    ],
    "name": "ExcludedFromFees",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "totalFee",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint8",
        "name": "burnFee",
        "type": "uint8"
      },
      {
        "indexed": false,
        "internalType": "uint8",
        "name": "revShareFee",
        "type": "uint8"
      },
      {
        "indexed": false,
        "internalType": "uint8",
        "name": "lpFee",
        "type": "uint8"
      }
    ],
    "name": "FeesUpdated",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "uint64",
        "name": "version",
        "type": "uint64"
      }
    ],
    "name": "Initialized",
    "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": "pair",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "bool",
        "name": "value",
        "type": "bool"
      }
    ],
    "name": "SetAutomatedMarketMakerPair",
    "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"
  },
  {
    "inputs": [],
    "name": "BURNER_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": [],
    "name": "MAX_SUPPLY",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "MINTER_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": "value",
        "type": "uint256"
      }
    ],
    "name": "approve",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "pair",
        "type": "address"
      }
    ],
    "name": "automatedMarketMakerPairs",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      }
    ],
    "name": "balanceOf",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "burn",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "burnFee",
    "outputs": [
      {
        "internalType": "uint8",
        "name": "",
        "type": "uint8"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "who",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "burnFrom",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "decimals",
    "outputs": [
      {
        "internalType": "uint8",
        "name": "",
        "type": "uint8"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      },
      {
        "internalType": "bool",
        "name": "excluded",
        "type": "bool"
      }
    ],
    "name": "excludeFromFees",
    "outputs": [],
    "stateMutability": "nonpayable",
    "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": "_admin",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "_router",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "_revDist",
        "type": "address"
      }
    ],
    "name": "initialize",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      }
    ],
    "name": "isBlacklisted",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      }
    ],
    "name": "isExcludedFromFees",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "lpFee",
    "outputs": [
      {
        "internalType": "uint8",
        "name": "",
        "type": "uint8"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "mint",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "who",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "mintFor",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      },
      {
        "internalType": "bool",
        "name": "blacklisted",
        "type": "bool"
      }
    ],
    "name": "modifyBlacklist",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "name",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "pairTokensRecipient",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes32",
        "name": "role",
        "type": "bytes32"
      },
      {
        "internalType": "address",
        "name": "callerConfirmation",
        "type": "address"
      }
    ],
    "name": "renounceRole",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "revDistributor",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "revShareFee",
    "outputs": [
      {
        "internalType": "uint8",
        "name": "",
        "type": "uint8"
      }
    ],
    "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": "address",
        "name": "pair",
        "type": "address"
      },
      {
        "internalType": "bool",
        "name": "value",
        "type": "bool"
      }
    ],
    "name": "setAutomatedMarketMakerPair",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "recipient",
        "type": "address"
      }
    ],
    "name": "setPairTokensRecipient",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "revDist",
        "type": "address"
      }
    ],
    "name": "setRevenueDistributor",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "swapAmount",
        "type": "uint256"
      }
    ],
    "name": "setSwapTokensAtAmount",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes4",
        "name": "interfaceId",
        "type": "bytes4"
      }
    ],
    "name": "supportsInterface",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "swapTokensAtAmount",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "symbol",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "totalFees",
    "outputs": [
      {
        "internalType": "uint8",
        "name": "",
        "type": "uint8"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "totalSupply",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "value",
        "type": "uint256"
      }
    ],
    "name": "transfer",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "from",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "value",
        "type": "uint256"
      }
    ],
    "name": "transferFrom",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "uniswapV2Pair",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "uniswapV2Router",
    "outputs": [
      {
        "internalType": "contract IUniswapV2Router02",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint8",
        "name": "_burnFee",
        "type": "uint8"
      },
      {
        "internalType": "uint8",
        "name": "_revShareFee",
        "type": "uint8"
      },
      {
        "internalType": "uint8",
        "name": "_lpFee",
        "type": "uint8"
      }
    ],
    "name": "updateFees",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "stateMutability": "payable",
    "type": "receive"
  }
]


Contract Creation Code
60806040523480156200001157600080fd5b506200001c62000022565b620000d6565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000735760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620000d35780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6126a780620000e66000396000f3fe6080604052600436106102605760003560e01c806372cacded11610144578063c0246668116100b6578063da1919b31161007a578063da1919b314610795578063dd62ed3e146107b5578063e2f45605146107d5578063fce589d8146107eb578063fddfc63c1461080c578063fe575a871461082c57600080fd5b8063c0246668146106e1578063c0c53b8b14610701578063cc6df13814610721578063d539139314610741578063d547741f1461077557600080fd5b80639a7a23d6116101085780639a7a23d61461061c578063a0712d681461063c578063a217fddf1461065c578063a9059cbb14610671578063afa4f3b214610691578063b62496f5146106b157600080fd5b806372cacded1461058657806379cc6790146105a7578063823a59a7146105c757806391d14854146105e757806395d89b411461060757600080fd5b8063248a9ca3116101dd57806336568abe116101a157806336568abe146104b557806342966c68146104d557806349bd5a5e146104f55780634fbee19314610515578063704ce43e1461054557806370a082311461056657600080fd5b8063248a9ca31461040e578063282c51f31461042e5780632f2ff15d14610462578063313ce5671461048257806332cb6b0c1461049657600080fd5b80631694505e116102245780631694505e14610338578063179f9e651461037057806318160ddd146103905780631bd019c1146103ce57806323b872dd146103ee57600080fd5b806301ffc9a71461026c57806306fdde03146102a1578063095ea7b3146102c35780630f85c67c146102e357806313114a9d1461030557600080fd5b3661026757005b600080fd5b34801561027857600080fd5b5061028c610287366004611f56565b61085c565b60405190151581526020015b60405180910390f35b3480156102ad57600080fd5b506102b6610893565b6040516102989190611f87565b3480156102cf57600080fd5b5061028c6102de366004611fea565b610956565b3480156102ef57600080fd5b506103036102fe366004612016565b61096e565b005b34801561031157600080fd5b5060075461032690600160b81b900460ff1681565b60405160ff9091168152602001610298565b34801561034457600080fd5b50600454610358906001600160a01b031681565b6040516001600160a01b039091168152602001610298565b34801561037c57600080fd5b5061030361038b366004612016565b6109c3565b34801561039c57600080fd5b507f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02545b604051908152602001610298565b3480156103da57600080fd5b50600654610358906001600160a01b031681565b3480156103fa57600080fd5b5061028c610409366004612033565b610a18565b34801561041a57600080fd5b506103c0610429366004612074565b610a3c565b34801561043a57600080fd5b506103c07f9667e80708b6eeeb0053fa0cca44e028ff548e2a9f029edfeac87c118b08b7c881565b34801561046e57600080fd5b5061030361047d36600461208d565b610a5e565b34801561048e57600080fd5b506012610326565b3480156104a257600080fd5b506103c06a1b929b9a4d1cb51434000081565b3480156104c157600080fd5b506103036104d036600461208d565b610a80565b3480156104e157600080fd5b506103036104f0366004612074565b610ab8565b34801561050157600080fd5b50600554610358906001600160a01b031681565b34801561052157600080fd5b5061028c610530366004612016565b60016020526000908152604090205460ff1681565b34801561055157600080fd5b5060075461032690600160b01b900460ff1681565b34801561057257600080fd5b506103c0610581366004612016565b610aef565b34801561059257600080fd5b5060075461032690600160a81b900460ff1681565b3480156105b357600080fd5b506103036105c2366004611fea565b610b17565b3480156105d357600080fd5b50600754610358906001600160a01b031681565b3480156105f357600080fd5b5061028c61060236600461208d565b610b4b565b34801561061357600080fd5b506102b6610b83565b34801561062857600080fd5b506103036106373660046120bd565b610bc2565b34801561064857600080fd5b50610303610657366004612074565b610bfe565b34801561066857600080fd5b506103c0600081565b34801561067d57600080fd5b5061028c61068c366004611fea565b610c32565b34801561069d57600080fd5b506103036106ac366004612074565b610c40565b3480156106bd57600080fd5b5061028c6106cc366004612016565b60036020526000908152604090205460ff1681565b3480156106ed57600080fd5b506103036106fc3660046120bd565b610c68565b34801561070d57600080fd5b5061030361071c3660046120f0565b610cd4565b34801561072d57600080fd5b5061030361073c3660046120bd565b6110d3565b34801561074d57600080fd5b506103c07ff0887ba65ee2024ea881d91b74c2450ef19e1557f03bed3ea9f16b037cbe2dc981565b34801561078157600080fd5b5061030361079036600461208d565b61115d565b3480156107a157600080fd5b506103036107b0366004611fea565b611179565b3480156107c157600080fd5b506103c06107d036600461213b565b6111ad565b3480156107e157600080fd5b506103c060005481565b3480156107f757600080fd5b5060075461032690600160a01b900460ff1681565b34801561081857600080fd5b5061030361082736600461217f565b6111f7565b34801561083857600080fd5b5061028c610847366004612016565b60026020526000908152604090205460ff1681565b60006001600160e01b03198216637965db0b60e01b148061088d57506301ffc9a760e01b6001600160e01b03198316145b92915050565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace038054606091600080516020612632833981519152916108d2906121c2565b80601f01602080910402602001604051908101604052809291908181526020018280546108fe906121c2565b801561094b5780601f106109205761010080835404028352916020019161094b565b820191906000526020600020905b81548152906001019060200180831161092e57829003601f168201915b505050505091505090565b600033610964818585611335565b5060019392505050565b600061097981611342565b6001600160a01b0382166109a05760405163d92e233d60e01b815260040160405180910390fd5b50600780546001600160a01b0319166001600160a01b0392909216919091179055565b60006109ce81611342565b6001600160a01b0382166109f55760405163d92e233d60e01b815260040160405180910390fd5b50600680546001600160a01b0319166001600160a01b0392909216919091179055565b600033610a2685828561134f565b610a318585856113af565b506001949350505050565b6000908152600080516020612652833981519152602052604090206001015490565b610a6782610a3c565b610a7081611342565b610a7a838361140e565b50505050565b6001600160a01b0381163314610aa95760405163334bd91960e11b815260040160405180910390fd5b610ab382826114b3565b505050565b7f9667e80708b6eeeb0053fa0cca44e028ff548e2a9f029edfeac87c118b08b7c8610ae281611342565b610aeb8261152f565b5050565b6001600160a01b03166000908152600080516020612632833981519152602052604090205490565b7f9667e80708b6eeeb0053fa0cca44e028ff548e2a9f029edfeac87c118b08b7c8610b4181611342565b610ab38383611539565b6000918252600080516020612652833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace048054606091600080516020612632833981519152916108d2906121c2565b6000610bcd81611342565b6001600160a01b038316610bf45760405163d92e233d60e01b815260040160405180910390fd5b610ab3838361154e565b7ff0887ba65ee2024ea881d91b74c2450ef19e1557f03bed3ea9f16b037cbe2dc9610c2881611342565b610aeb338361160b565b6000336109648185856113af565b6000610c4b81611342565b610c576012600a6122f6565b610c619083612305565b6000555050565b6000610c7381611342565b6001600160a01b038316600081815260016020908152604091829020805460ff191686151590811790915591519182527f3499bfcf9673677ba552f3fe2ea274ec7e6246da31c3c87e115b45a9b0db2efb91015b60405180910390a2505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff16600081158015610d1a5750825b905060008267ffffffffffffffff166001148015610d375750303b155b905081158015610d45575080155b15610d635760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610d8d57845460ff60401b1916600160401b1785555b610dcf604051806040016040528060058152602001641c994b985b60da1b8152506040518060400160405280600381526020016252574160e81b815250611641565b610dda60008961140e565b50600780546001600160a01b03808b166001600160a01b03199283168117909355600680548a8316931683179055306000908152600160208190526040808320805460ff1990811684179091559583528083208054871683179055938252928120805485168417905580527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49805490931690911790915587161561101357600480546001600160a01b0319166001600160a01b03891690811782556040805163c45a015560e01b81529051919263c45a01559282820192602092908290030181865afa158015610ece573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef2919061231c565b6001600160a01b031663c9c6539630600460009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f78919061231c565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015610fc5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe9919061231c565b600580546001600160a01b0319166001600160a01b0392909216918217905561101390600161154e565b683635c9adc5dea000006000556007805462ffffff60a01b191661810160a11b179081905560ff600160b01b820481169161105f91600160a81b8204811691600160a01b900416612339565b6110699190612339565b600760176101000a81548160ff021916908360ff16021790555083156110c957845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b60006110de81611342565b6001600160a01b0383166111055760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b038316600081815260026020908152604091829020805460ff191686151590811790915591519182527f2b7046b0c3f1d2cfa561874048b25b501ea267e88ea19420c5509b4aba05831d9101610cc7565b61116682610a3c565b61116f81611342565b610a7a83836114b3565b7ff0887ba65ee2024ea881d91b74c2450ef19e1557f03bed3ea9f16b037cbe2dc96111a381611342565b610ab3838361160b565b6001600160a01b0391821660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b600061120281611342565b8161120d8486612339565b6112179190612339565b6007805460ff60b81b1916600160b81b60ff93841681029190911791829055600a910490911611156112905760405162461bcd60e51b815260206004820152601c60248201527f73756d206f6620666565732063616e6e6f74206578636565642031300000000060448201526064015b60405180910390fd5b6007805461ffff60a01b1916600160a01b60ff87811691820260ff60a81b191692909217600160a81b8784169081029190911760ff60b01b1916600160b01b878516908102919091179485905560408051600160b81b909604909416855260208501929092529183019190915260608201527f34041fd42a95545ae13aea34e40ecb892a54f18be9fbf0688a9cc179910770449060800160405180910390a150505050565b610ab38383836001611653565b61134c813361173b565b50565b600061135b84846111ad565b90506000198114610a7a57818110156113a057604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401611287565b610a7a84848484036000611653565b6001600160a01b0383166113d957604051634b637e8f60e11b815260006004820152602401611287565b6001600160a01b0382166114035760405163ec442f0560e01b815260006004820152602401611287565b610ab3838383611774565b60006000805160206126528339815191526114298484610b4b565b6114a9576000848152602082815260408083206001600160a01b03871684529091529020805460ff1916600117905561145f3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600191505061088d565b600091505061088d565b60006000805160206126528339815191526114ce8484610b4b565b156114a9576000848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4600191505061088d565b61134c3382611abd565b61154482338361134f565b610aeb8282611abd565b6001600160a01b03821660009081526003602052604090205481151560ff9091161515036115ac5760405162461bcd60e51b815260206004820152600b60248201526a105b1c9958591e481cd95d60aa1b6044820152606401611287565b6001600160a01b038216600081815260036020908152604091829020805460ff191685151590811790915591519182527fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab910160405180910390a25050565b6001600160a01b0382166116355760405163ec442f0560e01b815260006004820152602401611287565b610aeb60008383611774565b611649611af3565b610aeb8282611b3e565b6000805160206126328339815191526001600160a01b03851661168c5760405163e602df0560e01b815260006004820152602401611287565b6001600160a01b0384166116b657604051634a1406b160e11b815260006004820152602401611287565b6001600160a01b0380861660009081526001830160209081526040808320938816835292905220839055811561173457836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258560405161172b91815260200190565b60405180910390a35b5050505050565b6117458282610b4b565b610aeb5760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401611287565b6001600160a01b03831660009081526001602052604081205460ff16806117b357506001600160a01b03831660009081526001602052604090205460ff165b90508061198e576001600160a01b03841660009081526002602052604090205460ff1615611802576040516001620b633d60e31b031981526001600160a01b0385166004820152602401611287565b6001600160a01b03831660009081526002602052604090205460ff161561184a576040516001620b633d60e31b031981526001600160a01b0384166004820152602401611287565b6001600160a01b03841660009081526003602052604090205460ff1661198e57600061187530610aef565b60005460075491925082101590600160c01b900460ff161580156118965750805b1561198b576007805460ff60c01b1916600160c01b1790819055600090600160b81b810460ff908116916118d391600160a01b9091041685612305565b6118dd9190612352565b60075490915060009060ff600160b81b820481169161190591600160a81b9091041686612305565b61190f9190612352565b905060008161191e8487612374565b6119289190612374565b90506119343084611abd565b60065461194c9030906001600160a01b031684611b8f565b6000611959600283612352565b90506119658183612374565b91506119798261197483611ccd565b611e7d565b50506007805460ff60c01b1916905550505b50505b600754600090600160c01b900460ff161580156119a9575081155b90508080156119f257506001600160a01b03851660009081526003602052604090205460ff16806119f257506001600160a01b03841660009081526003602052604090205460ff165b15611a3957600754600090606490611a1490600160b81b900460ff1686612305565b611a1e9190612352565b9050611a2a8185612374565b9350611a37863083611b8f565b505b611a44858585611b8f565b6a1b929b9a4d1cb514340000611a787f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace025490565b11156117345760405162461bcd60e51b81526020600482015260146024820152731b585e0b881cdd5c1c1b1e48195e18d95959195960621b6044820152606401611287565b6001600160a01b038216611ae757604051634b637e8f60e11b815260006004820152602401611287565b610aeb82600083611774565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16611b3c57604051631afcd79f60e31b815260040160405180910390fd5b565b611b46611af3565b6000805160206126328339815191527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace03611b8084826123eb565b5060048101610a7a83826123eb565b6000805160206126328339815191526001600160a01b038416611bcb5781816002016000828254611bc091906124ab565b90915550611c3d9050565b6001600160a01b03841660009081526020829052604090205482811015611c1e5760405163391434e360e21b81526001600160a01b03861660048201526024810182905260448101849052606401611287565b6001600160a01b03851660009081526020839052604090209083900390555b6001600160a01b038316611c5b576002810180548390039055611c7a565b6001600160a01b03831660009081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611cbf91815260200190565b60405180910390a350505050565b604080516002808252606082018352600092839291906020830190803683370190505090503081600081518110611d0657611d066124be565b60200260200101906001600160a01b031690816001600160a01b031681525050600460009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d9d919061231c565b81600181518110611db057611db06124be565b6001600160a01b039283166020918202929092010152600454611dd69130911685611335565b600480546040516318cbafe560e01b81526000926001600160a01b03909216916318cbafe591611e109188918691889130914291016124d4565b6000604051808303816000875af1158015611e2f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611e579190810190612545565b905080600181518110611e6c57611e6c6124be565b602002602001015192505050919050565b600454611e959030906001600160a01b031684611335565b6004546007546001600160a01b039182169163f305d71991849130918791600091829116611ec44260646124ab565b60405160e089901b6001600160e01b03191681526001600160a01b039687166004820152602481019590955260448501939093526064840191909152909216608482015260a481019190915260c40160606040518083038185885af1158015611f31573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906117349190612603565b600060208284031215611f6857600080fd5b81356001600160e01b031981168114611f8057600080fd5b9392505050565b600060208083528351808285015260005b81811015611fb457858101830151858201604001528201611f98565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461134c57600080fd5b60008060408385031215611ffd57600080fd5b823561200881611fd5565b946020939093013593505050565b60006020828403121561202857600080fd5b8135611f8081611fd5565b60008060006060848603121561204857600080fd5b833561205381611fd5565b9250602084013561206381611fd5565b929592945050506040919091013590565b60006020828403121561208657600080fd5b5035919050565b600080604083850312156120a057600080fd5b8235915060208301356120b281611fd5565b809150509250929050565b600080604083850312156120d057600080fd5b82356120db81611fd5565b9150602083013580151581146120b257600080fd5b60008060006060848603121561210557600080fd5b833561211081611fd5565b9250602084013561212081611fd5565b9150604084013561213081611fd5565b809150509250925092565b6000806040838503121561214e57600080fd5b823561215981611fd5565b915060208301356120b281611fd5565b803560ff8116811461217a57600080fd5b919050565b60008060006060848603121561219457600080fd5b61219d84612169565b92506121ab60208501612169565b91506121b960408501612169565b90509250925092565b600181811c908216806121d657607f821691505b6020821081036121f657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111561224d578160001904821115612233576122336121fc565b8085161561224057918102915b93841c9390800290612217565b509250929050565b6000826122645750600161088d565b816122715750600061088d565b81600181146122875760028114612291576122ad565b600191505061088d565b60ff8411156122a2576122a26121fc565b50506001821b61088d565b5060208310610133831016604e8410600b84101617156122d0575081810a61088d565b6122da8383612212565b80600019048211156122ee576122ee6121fc565b029392505050565b6000611f8060ff841683612255565b808202811582820484141761088d5761088d6121fc565b60006020828403121561232e57600080fd5b8151611f8081611fd5565b60ff818116838216019081111561088d5761088d6121fc565b60008261236f57634e487b7160e01b600052601260045260246000fd5b500490565b8181038181111561088d5761088d6121fc565b634e487b7160e01b600052604160045260246000fd5b601f821115610ab357600081815260208120601f850160051c810160208610156123c45750805b601f850160051c820191505b818110156123e3578281556001016123d0565b505050505050565b815167ffffffffffffffff81111561240557612405612387565b6124198161241384546121c2565b8461239d565b602080601f83116001811461244e57600084156124365750858301515b600019600386901b1c1916600185901b1785556123e3565b600085815260208120601f198616915b8281101561247d5788860151825594840194600190910190840161245e565b508582101561249b5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8082018082111561088d5761088d6121fc565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156125245784516001600160a01b0316835293830193918301916001016124ff565b50506001600160a01b03969096166060850152505050608001529392505050565b6000602080838503121561255857600080fd5b825167ffffffffffffffff8082111561257057600080fd5b818501915085601f83011261258457600080fd5b81518181111561259657612596612387565b8060051b604051601f19603f830116810181811085821117156125bb576125bb612387565b6040529182528482019250838101850191888311156125d957600080fd5b938501935b828510156125f7578451845293850193928501926125de565b98975050505050505050565b60008060006060848603121561261857600080fd5b835192506020840151915060408401519050925092509256fe52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0002dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800a2646970667358221220043e395846206588e7be17f9ecb9bebf4a44f4c5b9f3173c5c1f4920ef9b347764736f6c63430008140033