Overview ERC20
PRICE
n/a

ON-CHAIN MARKET CAP n/a

Total Supply:
1,239.00 2r3r

Holders:
1
Profile Summary
Blockchain:
Base (8453)


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

Compiler Version
v0.8.23+commit.f704f362

Optimization Enabled:
Yes with 20 runs

Created At:
Wed, 25 Sep 2024 23:10:39 GMT
IERC20.sol
contracts
eip
interface
IERC20.sol


Contract ABI
[
  {
    "inputs": [],
    "stateMutability": "nonpayable",
    "type": "constructor"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "recipient",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "value",
        "type": "uint256"
      }
    ],
    "name": "CurrencyTransferLibFailedNativeTransfer",
    "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": "delegator",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "fromDelegate",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "toDelegate",
        "type": "address"
      }
    ],
    "name": "DelegateChanged",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "delegate",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "previousBalance",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "newBalance",
        "type": "uint256"
      }
    ],
    "name": "DelegateVotesChanged",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [],
    "name": "EIP712DomainChanged",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "address",
        "name": "platformFeeRecipient",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "flatFee",
        "type": "uint256"
      }
    ],
    "name": "FlatPlatformFeeUpdated",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "uint8",
        "name": "version",
        "type": "uint8"
      }
    ],
    "name": "Initialized",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "platformFeeRecipient",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "platformFeeBps",
        "type": "uint256"
      }
    ],
    "name": "PlatformFeeInfoUpdated",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "enum IPlatformFee.PlatformFeeType",
        "name": "feeType",
        "type": "uint8"
      }
    ],
    "name": "PlatformFeeTypeUpdated",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "recipient",
        "type": "address"
      }
    ],
    "name": "PrimarySaleRecipientUpdated",
    "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": "mintedTo",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "quantityMinted",
        "type": "uint256"
      }
    ],
    "name": "TokensMinted",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "signer",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "mintedTo",
        "type": "address"
      },
      {
        "components": [
          {
            "internalType": "address",
            "name": "to",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "primarySaleRecipient",
            "type": "address"
          },
          {
            "internalType": "uint256",
            "name": "quantity",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "price",
            "type": "uint256"
          },
          {
            "internalType": "address",
            "name": "currency",
            "type": "address"
          },
          {
            "internalType": "uint128",
            "name": "validityStartTimestamp",
            "type": "uint128"
          },
          {
            "internalType": "uint128",
            "name": "validityEndTimestamp",
            "type": "uint128"
          },
          {
            "internalType": "bytes32",
            "name": "uid",
            "type": "bytes32"
          }
        ],
        "indexed": false,
        "internalType": "struct ITokenERC20.MintRequest",
        "name": "mintRequest",
        "type": "tuple"
      }
    ],
    "name": "TokensMintedWithSignature",
    "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": "CLOCK_MODE",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "DEFAULT_ADMIN_ROLE",
    "outputs": [
      {
        "internalType": "bytes32",
        "name": "",
        "type": "bytes32"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "DOMAIN_SEPARATOR",
    "outputs": [
      {
        "internalType": "bytes32",
        "name": "",
        "type": "bytes32"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "owner",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "spender",
        "type": "address"
      }
    ],
    "name": "allowance",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "spender",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "approve",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      }
    ],
    "name": "balanceOf",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "burn",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "burnFrom",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      },
      {
        "internalType": "uint32",
        "name": "pos",
        "type": "uint32"
      }
    ],
    "name": "checkpoints",
    "outputs": [
      {
        "components": [
          {
            "internalType": "uint32",
            "name": "fromBlock",
            "type": "uint32"
          },
          {
            "internalType": "uint224",
            "name": "votes",
            "type": "uint224"
          }
        ],
        "internalType": "struct ERC20VotesUpgradeable.Checkpoint",
        "name": "",
        "type": "tuple"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "clock",
    "outputs": [
      {
        "internalType": "uint48",
        "name": "",
        "type": "uint48"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "contractType",
    "outputs": [
      {
        "internalType": "bytes32",
        "name": "",
        "type": "bytes32"
      }
    ],
    "stateMutability": "pure",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "contractURI",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "contractVersion",
    "outputs": [
      {
        "internalType": "uint8",
        "name": "",
        "type": "uint8"
      }
    ],
    "stateMutability": "pure",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "decimals",
    "outputs": [
      {
        "internalType": "uint8",
        "name": "",
        "type": "uint8"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "spender",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "subtractedValue",
        "type": "uint256"
      }
    ],
    "name": "decreaseAllowance",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "delegatee",
        "type": "address"
      }
    ],
    "name": "delegate",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "delegatee",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "nonce",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "expiry",
        "type": "uint256"
      },
      {
        "internalType": "uint8",
        "name": "v",
        "type": "uint8"
      },
      {
        "internalType": "bytes32",
        "name": "r",
        "type": "bytes32"
      },
      {
        "internalType": "bytes32",
        "name": "s",
        "type": "bytes32"
      }
    ],
    "name": "delegateBySig",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      }
    ],
    "name": "delegates",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "eip712Domain",
    "outputs": [
      {
        "internalType": "bytes1",
        "name": "fields",
        "type": "bytes1"
      },
      {
        "internalType": "string",
        "name": "name",
        "type": "string"
      },
      {
        "internalType": "string",
        "name": "version",
        "type": "string"
      },
      {
        "internalType": "uint256",
        "name": "chainId",
        "type": "uint256"
      },
      {
        "internalType": "address",
        "name": "verifyingContract",
        "type": "address"
      },
      {
        "internalType": "bytes32",
        "name": "salt",
        "type": "bytes32"
      },
      {
        "internalType": "uint256[]",
        "name": "extensions",
        "type": "uint256[]"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "timepoint",
        "type": "uint256"
      }
    ],
    "name": "getPastTotalSupply",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "timepoint",
        "type": "uint256"
      }
    ],
    "name": "getPastVotes",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "getPlatformFeeInfo",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      },
      {
        "internalType": "uint16",
        "name": "",
        "type": "uint16"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes32",
        "name": "role",
        "type": "bytes32"
      }
    ],
    "name": "getRoleAdmin",
    "outputs": [
      {
        "internalType": "bytes32",
        "name": "",
        "type": "bytes32"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes32",
        "name": "role",
        "type": "bytes32"
      },
      {
        "internalType": "uint256",
        "name": "index",
        "type": "uint256"
      }
    ],
    "name": "getRoleMember",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes32",
        "name": "role",
        "type": "bytes32"
      }
    ],
    "name": "getRoleMemberCount",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      }
    ],
    "name": "getVotes",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes32",
        "name": "role",
        "type": "bytes32"
      },
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      }
    ],
    "name": "grantRole",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes32",
        "name": "role",
        "type": "bytes32"
      },
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      }
    ],
    "name": "hasRole",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "spender",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "addedValue",
        "type": "uint256"
      }
    ],
    "name": "increaseAllowance",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "_defaultAdmin",
        "type": "address"
      },
      {
        "internalType": "string",
        "name": "_name",
        "type": "string"
      },
      {
        "internalType": "string",
        "name": "_symbol",
        "type": "string"
      },
      {
        "internalType": "string",
        "name": "_contractURI",
        "type": "string"
      },
      {
        "internalType": "address[]",
        "name": "_trustedForwarders",
        "type": "address[]"
      },
      {
        "internalType": "address",
        "name": "_primarySaleRecipient",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "_platformFeeRecipient",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "_platformFeeBps",
        "type": "uint256"
      }
    ],
    "name": "initialize",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "forwarder",
        "type": "address"
      }
    ],
    "name": "isTrustedForwarder",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "mintTo",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "components": [
          {
            "internalType": "address",
            "name": "to",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "primarySaleRecipient",
            "type": "address"
          },
          {
            "internalType": "uint256",
            "name": "quantity",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "price",
            "type": "uint256"
          },
          {
            "internalType": "address",
            "name": "currency",
            "type": "address"
          },
          {
            "internalType": "uint128",
            "name": "validityStartTimestamp",
            "type": "uint128"
          },
          {
            "internalType": "uint128",
            "name": "validityEndTimestamp",
            "type": "uint128"
          },
          {
            "internalType": "bytes32",
            "name": "uid",
            "type": "bytes32"
          }
        ],
        "internalType": "struct ITokenERC20.MintRequest",
        "name": "_req",
        "type": "tuple"
      },
      {
        "internalType": "bytes",
        "name": "_signature",
        "type": "bytes"
      }
    ],
    "name": "mintWithSignature",
    "outputs": [],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes[]",
        "name": "data",
        "type": "bytes[]"
      }
    ],
    "name": "multicall",
    "outputs": [
      {
        "internalType": "bytes[]",
        "name": "results",
        "type": "bytes[]"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "name",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "owner",
        "type": "address"
      }
    ],
    "name": "nonces",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      }
    ],
    "name": "numCheckpoints",
    "outputs": [
      {
        "internalType": "uint32",
        "name": "",
        "type": "uint32"
      }
    ],
    "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": [],
    "name": "primarySaleRecipient",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes32",
        "name": "role",
        "type": "bytes32"
      },
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      }
    ],
    "name": "renounceRole",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes32",
        "name": "role",
        "type": "bytes32"
      },
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      }
    ],
    "name": "revokeRole",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "string",
        "name": "_uri",
        "type": "string"
      }
    ],
    "name": "setContractURI",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "_platformFeeRecipient",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "_platformFeeBps",
        "type": "uint256"
      }
    ],
    "name": "setPlatformFeeInfo",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "_saleRecipient",
        "type": "address"
      }
    ],
    "name": "setPrimarySaleRecipient",
    "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": "symbol",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "totalSupply",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "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": "amount",
        "type": "uint256"
      }
    ],
    "name": "transferFrom",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "components": [
          {
            "internalType": "address",
            "name": "to",
            "type": "address"
          },
          {
            "internalType": "address",
            "name": "primarySaleRecipient",
            "type": "address"
          },
          {
            "internalType": "uint256",
            "name": "quantity",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "price",
            "type": "uint256"
          },
          {
            "internalType": "address",
            "name": "currency",
            "type": "address"
          },
          {
            "internalType": "uint128",
            "name": "validityStartTimestamp",
            "type": "uint128"
          },
          {
            "internalType": "uint128",
            "name": "validityEndTimestamp",
            "type": "uint128"
          },
          {
            "internalType": "bytes32",
            "name": "uid",
            "type": "bytes32"
          }
        ],
        "internalType": "struct ITokenERC20.MintRequest",
        "name": "_req",
        "type": "tuple"
      },
      {
        "internalType": "bytes",
        "name": "_signature",
        "type": "bytes"
      }
    ],
    "name": "verify",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      },
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  }
]


Contract Creation Code
60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b806200004f5750303b1580156200004f575060005460ff166001145b620000b75760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000db576000805461ff0019166101001790555b801562000122576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50614a3280620001336000396000f3fe6080604052600436106102495760003560e01c806384b0196e1161013557806384b0196e146105a05780638e539e8c146105c85780638f0fefbb146105e85780639010d07c146105fb57806391d148541461061b57806391ddadf41461063b578063938e3d7b1461066757806395d89b41146106875780639ab24eb01461069c578063a0a8e460146106bc578063a217fddf146106d0578063a457c2d7146106e5578063a9059cbb14610705578063ac9650d814610725578063c1b606e214610752578063c3cda52014610791578063ca15c873146107b1578063cb2ef6f7146107d1578063d45573f6146107f1578063d505accf14610828578063d547741f14610848578063dd62ed3e14610868578063dfad80a614610888578063e8a3d485146108a8578063f1127ed8146108bd57600080fd5b806301ffc9a71461024e57806306fdde0314610283578063079fe40e146102a5578063095ea7b3146102de57806318160ddd146102fe5780631e7ac4881461031d57806323b872dd1461033f578063248a9ca31461035f5780632f2ff15d1461037f578063313ce5671461039f5780633644e515146103c157806336568abe146103d657806339509351146103f65780633a46b1a81461041657806342966c6814610436578063449a52f8146104565780634bf5d7e914610476578063572b6c051461048b578063587cde1e146104ab5780635c19a95c146104cb5780636f4f2837146104eb5780636fcfff451461050b57806370a082311461054057806379cc6790146105605780637ecebe0014610580575b600080fd5b34801561025a57600080fd5b5061026e610269366004613cb4565b610907565b60405190151581526020015b60405180910390f35b34801561028f57600080fd5b50610298610932565b60405161027a9190613d2e565b3480156102b157600080fd5b5061022d546102c6906001600160a01b031681565b6040516001600160a01b03909116815260200161027a565b3480156102ea57600080fd5b5061026e6102f9366004613d5d565b6109c4565b34801561030a57600080fd5b506099545b60405190815260200161027a565b34801561032957600080fd5b5061033d610338366004613d5d565b6109e6565b005b34801561034b57600080fd5b5061026e61035a366004613d87565b610a90565b34801561036b57600080fd5b5061030f61037a366004613dc3565b610abe565b34801561038b57600080fd5b5061033d61039a366004613ddc565b610ad4565b3480156103ab57600080fd5b5060125b60405160ff909116815260200161027a565b3480156103cd57600080fd5b5061030f610af5565b3480156103e257600080fd5b5061033d6103f1366004613ddc565b610b04565b34801561040257600080fd5b5061026e610411366004613d5d565b610b92565b34801561042257600080fd5b5061030f610431366004613d5d565b610bbe565b34801561044257600080fd5b5061033d610451366004613dc3565b610c18565b34801561046257600080fd5b5061033d610471366004613d5d565b610c2c565b34801561048257600080fd5b50610298610c9b565b34801561049757600080fd5b5061026e6104a6366004613e08565b610d33565b3480156104b757600080fd5b506102c66104c6366004613e08565b610d51565b3480156104d757600080fd5b5061033d6104e6366004613e08565b610d70565b3480156104f757600080fd5b5061033d610506366004613e08565b610d81565b34801561051757600080fd5b5061052b610526366004613e08565b610dd8565b60405163ffffffff909116815260200161027a565b34801561054c57600080fd5b5061030f61055b366004613e08565b610dfb565b34801561056c57600080fd5b5061033d61057b366004613d5d565b610e16565b34801561058c57600080fd5b5061030f61059b366004613e08565b610e32565b3480156105ac57600080fd5b506105b5610e51565b60405161027a9796959493929190613e23565b3480156105d457600080fd5b5061030f6105e3366004613dc3565b610eef565b61033d6105f6366004613efd565b610f2b565b34801561060757600080fd5b506102c6610616366004613f59565b610fc0565b34801561062757600080fd5b5061026e610636366004613ddc565b610fd9565b34801561064757600080fd5b50610650611005565b60405165ffffffffffff909116815260200161027a565b34801561067357600080fd5b5061033d610682366004613f7b565b611010565b34801561069357600080fd5b5061029861102f565b3480156106a857600080fd5b5061030f6106b7366004613e08565b61103e565b3480156106c857600080fd5b5060016103af565b3480156106dc57600080fd5b5061030f600081565b3480156106f157600080fd5b5061026e610700366004613d5d565b6110c1565b34801561071157600080fd5b5061026e610720366004613d5d565b611147565b34801561073157600080fd5b50610745610740366004613fbc565b61115f565b60405161027a9190614030565b34801561075e57600080fd5b5061077261076d366004613efd565b6112db565b6040805192151583526001600160a01b0390911660208301520161027a565b34801561079d57600080fd5b5061033d6107ac3660046140a5565b611331565b3480156107bd57600080fd5b5061030f6107cc366004613dc3565b611463565b3480156107dd57600080fd5b50690546f6b656e45524332360b41b61030f565b3480156107fd57600080fd5b5061022c5461022b54604080516001600160a01b03909316835261ffff90911660208301520161027a565b34801561083457600080fd5b5061033d6108433660046140fd565b61147b565b34801561085457600080fd5b5061033d610863366004613ddc565b6115df565b34801561087457600080fd5b5061030f610883366004614167565b6115fb565b34801561089457600080fd5b5061033d6108a33660046142c1565b611626565b3480156108b457600080fd5b506102986118ab565b3480156108c957600080fd5b506108dd6108d83660046143a9565b61193a565b60408051825163ffffffff1681526020928301516001600160e01b0316928101929092520161027a565b60006001600160e01b03198216635a05180f60e01b148061092c575061092c826119be565b92915050565b6060609a8054610941906143e9565b80601f016020809104026020016040519081016040528092919081815260200182805461096d906143e9565b80156109ba5780601f1061098f576101008083540402835291602001916109ba565b820191906000526020600020905b81548152906001019060200180831161099d57829003601f168201915b5050505050905090565b6000806109cf6119f3565b90506109dc8185856119fd565b5060019392505050565b60006109f181611b21565b612710821115610a1c5760405162461bcd60e51b8152600401610a139061441d565b60405180910390fd5b61022b80546001600160801b0319166001600160401b03841617905561022c80546001600160a01b0385166001600160a01b031990911681179091556040518381527fe2497bd806ec41a6e0dd992c29a72efc0ef8fec9092d1978fd4a1e00b2f183049060200160405180910390a2505050565b600080610a9b6119f3565b9050610aa8858285611b32565b610ab3858585611ba6565b506001949350505050565b60009081526101c6602052604090206001015490565b610add82610abe565b610ae681611b21565b610af08383611d50565b505050565b6000610aff611d73565b905090565b610b0c6119f3565b6001600160a01b0316816001600160a01b031614610b845760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610a13565b610b8e8282611d7d565b5050565b600080610b9d6119f3565b90506109dc818585610baf85896115fb565b610bb9919061445c565b6119fd565b6000610bc8611005565b65ffffffffffff168210610bee5760405162461bcd60e51b8152600401610a139061446f565b6001600160a01b038316600090815261016360205260409020610c119083611da0565b9392505050565b610c29610c236119f3565b82611e88565b50565b610c34611e92565b610c4e6000805160206149bd8339815191526106366119f3565b610c885760405162461bcd60e51b815260206004820152600b60248201526a3737ba1036b4b73a32b91760a91b6044820152606401610a13565b610c928282611eeb565b610b8e60018055565b606043610ca6611005565b65ffffffffffff1614610cfb5760405162461bcd60e51b815260206004820152601d60248201527f4552433230566f7465733a2062726f6b656e20636c6f636b206d6f64650000006044820152606401610a13565b5060408051808201909152601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000602082015290565b6001600160a01b031660009081526065602052604090205460ff1690565b6001600160a01b03908116600090815261016260205260409020541690565b610c29610d7b6119f3565b82611f42565b6000610d8c81611b21565b61022d80546001600160a01b0319166001600160a01b0384169081179091556040517f299d17e95023f496e0ffc4909cff1a61f74bb5eb18de6f900f4155bfa1b3b33390600090a25050565b6001600160a01b0381166000908152610163602052604081205461092c90611fc3565b6001600160a01b031660009081526097602052604090205490565b610e2882610e226119f3565b83611b32565b610b8e8282611e88565b6001600160a01b038116600090815261012f602052604081205461092c565b60006060806000806000606060fb546000801b148015610e71575060fc54155b610eb55760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b6044820152606401610a13565b610ebd61202c565b610ec561203b565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b6000610ef9611005565b65ffffffffffff168210610f1f5760405162461bcd60e51b8152600401610a139061446f565b61092c61016483611da0565b610f33611e92565b6000610f4084848461204a565b90506000610f516020860186613e08565b9050610f5c856121e5565b610f6a818660400135611eeb565b806001600160a01b0316826001600160a01b03167fc4d88b1adde72eb5acf63f3e219ef5b223262233acf507c3b171277c91973c6787604051610fad91906144b9565b60405180910390a35050610af060018055565b60008281526101f860205260408120610c1190836123c0565b60009182526101c6602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6000610aff436123cc565b600061101b81611b21565b61022a6110298385836145b4565b50505050565b6060609b8054610941906143e9565b6001600160a01b0381166000908152610163602052604081205480156110ae576001600160a01b0383166000908152610163602052604090208054600019830190811061108d5761108d61466e565b600091825260209091200154600160201b90046001600160e01b03166110b1565b60005b6001600160e01b03169392505050565b6000806110cc6119f3565b905060006110da82866115fb565b90508381101561113a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a13565b610ab382868684036119fd565b6000806111526119f3565b90506109dc818585611ba6565b6060816001600160401b0381111561117957611179614191565b6040519080825280602002602001820160405280156111ac57816020015b60608152602001906001900390816111975790505b50905060006111b96119f3565b9050336001600160a01b038216141560005b848110156112d257811561124a57611228308787848181106111ef576111ef61466e565b90506020028101906112019190614684565b86604051602001611214939291906146ca565b604051602081830303815290604052612433565b84828151811061123a5761123a61466e565b60200260200101819052506112ca565b6112ac308787848181106112605761126061466e565b90506020028101906112729190614684565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061243392505050565b8482815181106112be576112be61466e565b60200260200101819052505b6001016111cb565b50505092915050565b60008060006112eb868686612458565b60e0870135600090815261022e602052604090205490915060ff1615801561132657506113266000805160206149bd83398151915282610fd9565b969095509350505050565b834211156113815760405162461bcd60e51b815260206004820152601d60248201527f4552433230566f7465733a207369676e617475726520657870697265640000006044820152606401610a13565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b0388169181019190915260608101869052608081018590526000906113fb906113f39060a001604051602081830303815290604052805190602001206124bc565b8585856124e9565b905061140681612511565b86146114505760405162461bcd60e51b81526020600482015260196024820152784552433230566f7465733a20696e76616c6964206e6f6e636560381b6044820152606401610a13565b61145a8188611f42565b50505050505050565b60008181526101f86020526040812061092c9061253a565b834211156114cb5760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e650000006044820152606401610a13565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886114fa8c612511565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506000611555826124bc565b90506000611565828787876124e9565b9050896001600160a01b0316816001600160a01b0316146115c85760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e617475726500006044820152606401610a13565b6115d38a8a8a6119fd565b50505050505050505050565b6115e882610abe565b6115f181611b21565b610af08383611d7d565b6001600160a01b03918216600090815260986020908152604080832093909416825291909152205490565b600054610100900460ff16158080156116465750600054600160ff909116105b80611667575061165530612544565b158015611667575060005460ff166001145b6116ca5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610a13565b6000805460ff1916600117905580156116ed576000805461ff0019166101001790555b6116f5612553565b6116fe85612584565b61170788612609565b6117118888612653565b61022a61171e87826146eb565b5061022d80546001600160a01b038087166001600160a01b03199283161790925561022c8054928616929091169190911790556127108211156117735760405162461bcd60e51b8152600401610a139061441d565b61022b80546001600160801b0319166001600160801b03841617905561179a60008a612693565b6117b26000805160206149768339815191528a612693565b6117ca6000805160206149bd8339815191528a612693565b6117e36000805160206149768339815191526000612693565b6040516001600160a01b038516907f299d17e95023f496e0ffc4909cff1a61f74bb5eb18de6f900f4155bfa1b3b33390600090a2826001600160a01b03167fe2497bd806ec41a6e0dd992c29a72efc0ef8fec9092d1978fd4a1e00b2f183048360405161185291815260200190565b60405180910390a280156118a0576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b61022a80546118b9906143e9565b80601f01602080910402602001604051908101604052809291908181526020018280546118e5906143e9565b80156119325780601f1061190757610100808354040283529160200191611932565b820191906000526020600020905b81548152906001019060200180831161191557829003601f168201915b505050505081565b60408051808201909152600080825260208201526001600160a01b038316600090815261016360205260409020805463ffffffff841690811061197f5761197f61466e565b60009182526020918290206040805180820190915291015463ffffffff81168252600160201b90046001600160e01b0316918101919091529392505050565b60006001600160e01b03198216637965db0b60e01b148061092c57506301ffc9a760e01b6001600160e01b031983161461092c565b6000610aff61269d565b6001600160a01b038316611a5f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a13565b6001600160a01b038216611ac05760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a13565b6001600160a01b0383811660008181526098602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b610c2981611b2d6119f3565b6126bf565b6000611b3e84846115fb565b905060001981146110295781811015611b995760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610a13565b61102984848484036119fd565b6001600160a01b038316611c0a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a13565b6001600160a01b038216611c6c5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610a13565b611c77838383612718565b6001600160a01b03831660009081526097602052604090205481811015611cef5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610a13565b6001600160a01b0380851660008181526097602052604080822086860390559286168082529083902080548601905591516000805160206149dd83398151915290611d3d9086815260200190565b60405180910390a36110298484846127d9565b611d5a82826127e4565b60008281526101f860205260409020610af0908261286c565b6000610aff612881565b611d8782826128f5565b60008281526101f860205260409020610af0908261297b565b815460009081816005811115611dfa576000611dbb84612990565b611dc590856147a4565b600088815260209020909150869082015463ffffffff161115611dea57809150611df8565b611df581600161445c565b92505b505b80821015611e47576000611e0e8383612a78565b600088815260209020909150869082015463ffffffff161115611e3357809150611e41565b611e3e81600161445c565b92505b50611dfa565b8015611e725760008681526020902081016000190154600160201b90046001600160e01b0316611e75565b60005b6001600160e01b03169695505050505050565b610b8e8282612a93565b600260015403611ee45760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610a13565b6002600155565b611ef58282612aac565b816001600160a01b03167f3f2c9d57c068687834f0de942a9babb9e5acab57d516d3480a3c16ee165a427382604051611f3091815260200190565b60405180910390a25050565b60018055565b6000611f4d83610d51565b90506000611f5a84610dfb565b6001600160a01b038581166000818152610162602052604080822080546001600160a01b031916898616908117909155905194955093928616927f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4611029828483612ab6565b600063ffffffff8211156120285760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203360448201526532206269747360d01b6064820152608401610a13565b5090565b606060fd8054610941906143e9565b606060fe8054610941906143e9565b600080600061205a8686866112db565b915091508161209f5760405162461bcd60e51b8152602060048201526011602482015270696e76616c6964207369676e617475726560781b6044820152606401610a13565b426120b060c0880160a089016147b7565b6001600160801b0316111580156120df5750426120d360e0880160c089016147b7565b6001600160801b031610155b61211d5760405162461bcd60e51b815260206004820152600f60248201526e1c995c5d595cdd08195e1c1a5c9959608a1b6044820152606401610a13565b600061212c6020880188613e08565b6001600160a01b0316036121785760405162461bcd60e51b81526020600482015260136024820152721c9958da5c1a595b9d081d5b9919599a5b9959606a1b6044820152606401610a13565b60008660400135116121bc5760405162461bcd60e51b815260206004820152600d60248201526c7a65726f207175616e7469747960981b6044820152606401610a13565b60e0860135600090815261022e60205260409020805460ff191660011790559150509392505050565b8060600135600003612228573415610c295760405162461bcd60e51b81526020600482015260066024820152652156616c756560d01b6044820152606401610a13565b61022b546000906127109061224a906001600160801b031660608501356147d2565b61225491906147ff565b905073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee61227b60a0840160808501613e08565b6001600160a01b0316036122da57816060013534146122d55760405162461bcd60e51b815260206004820152601660248201527536bab9ba1039b2b732103a37ba30b610383934b1b29760511b6044820152606401610a13565b61231d565b341561231d5760405162461bcd60e51b81526020600482015260126024820152716d73672076616c7565206e6f74207a65726f60701b6044820152606401610a13565b6000806123306040850160208601613e08565b6001600160a01b0316146123535761234e6040840160208501613e08565b612361565b61022d546001600160a01b03165b905061239161237660a0850160808601613e08565b61237e6119f3565b61022c546001600160a01b031685612bf5565b610af06123a460a0850160808601613e08565b6123ac6119f3565b836123bb8660608901356147a4565b612bf5565b6000610c118383612c3b565b600065ffffffffffff8211156120285760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203460448201526538206269747360d01b6064820152608401610a13565b6060610c11838360405180606001604052806027815260200161499660279139612c65565b60006124b483838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506124ae92506124a29150889050612cdd565b805190602001206124bc565b90612dd1565b949350505050565b600061092c6124c9611d73565b8360405161190160f01b8152600281019290925260228201526042902090565b60008060006124fa87878787612df5565b9150915061250781612eaf565b5095945050505050565b6001600160a01b038116600090815261012f602052604090208054600181018255905b50919050565b600061092c825490565b6001600160a01b03163b151590565b600054610100900460ff1661257a5760405162461bcd60e51b8152600401610a1390614821565b612582612ff4565b565b600054610100900460ff166125ab5760405162461bcd60e51b8152600401610a1390614821565b60005b8151811015610b8e576001606560008484815181106125cf576125cf61466e565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790556001016125ae565b600054610100900460ff166126305760405162461bcd60e51b8152600401610a1390614821565b610c2981604051806040016040528060018152602001603160f81b81525061301b565b600054610100900460ff1661267a5760405162461bcd60e51b8152600401610a1390614821565b609a61268683826146eb565b50609b610af082826146eb565b610b8e8282611d50565b60006126a833610d33565b156126ba575060131936013560601c90565b503390565b6126c98282610fd9565b610b8e576126d68161306a565b6126e183602061307c565b6040516020016126f292919061486c565b60408051601f198184030181529082905262461bcd60e51b8252610a1391600401613d2e565b6127316000805160206149768339815191526000610fd9565b15801561274657506001600160a01b03831615155b801561275a57506001600160a01b03821615155b15610af05761277760008051602061497683398151915284610fd9565b80612795575061279560008051602061497683398151915283610fd9565b610af05760405162461bcd60e51b81526020600482015260156024820152743a3930b739b332b939903932b9ba3934b1ba32b21760591b6044820152606401610a13565b610af0838383613217565b6127ee8282610fd9565b610b8e5760008281526101c6602090815260408083206001600160a01b03851684529091529020805460ff191660011790556128286119f3565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000610c11836001600160a01b038416613232565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6128ac613281565b6128b46132da565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6128ff8282610fd9565b15610b8e5760008281526101c6602090815260408083206001600160a01b03851684529091529020805460ff191690556129376119f3565b6001600160a01b0316816001600160a01b0316837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45050565b6000610c11836001600160a01b03841661330b565b6000816000036129a257506000919050565b600060016129af846133fe565b901c6001901b905060018184816129c8576129c86147e9565b048201901c905060018184816129e0576129e06147e9565b048201901c905060018184816129f8576129f86147e9565b048201901c90506001818481612a1057612a106147e9565b048201901c90506001818481612a2857612a286147e9565b048201901c90506001818481612a4057612a406147e9565b048201901c90506001818481612a5857612a586147e9565b048201901c9050610c1181828581612a7257612a726147e9565b04613492565b6000612a8760028484186147ff565b610c119084841661445c565b612a9d82826134a8565b6110296101646135dd836135e9565b610b8e828261375b565b816001600160a01b0316836001600160a01b031614158015612ad85750600081115b15610af0576001600160a01b03831615612b67576001600160a01b0383166000908152610163602052604081208190612b14906135dd856135e9565b91509150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051612b5c929190918252602082015260400190565b60405180910390a250505b6001600160a01b03821615610af0576001600160a01b0382166000908152610163602052604081208190612b9e906137e6856135e9565b91509150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051612be6929190918252602082015260400190565b60405180910390a25050505050565b80156110295773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeed196001600160a01b03851601612c2f57612c2a82826137f2565b611029565b6110298484848461386a565b6000826000018281548110612c5257612c5261466e565b9060005260206000200154905092915050565b6060600080856001600160a01b031685604051612c8291906148db565b600060405180830381855af49150503d8060008114612cbd576040519150601f19603f3d011682016040523d82523d6000602084013e612cc2565b606091505b5091509150612cd3868383876138bd565b9695505050505050565b60607fbac245dbd9b8b2bb334c0675db20a7a7a8506de563990c4ce3207f4c3c5b75e1612d0d6020840184613e08565b612d1d6040850160208601613e08565b60408501356060860135612d3760a0880160808901613e08565b612d4760c0890160a08a016147b7565b612d5760e08a0160c08b016147b7565b6040805160208101999099526001600160a01b03978816908901529486166060880152608087019390935260a086019190915290921660c08401526001600160801b0391821660e0808501919091529116610100830152830135610120820152610140016040516020818303038152906040529050919050565b6000806000612de08585613934565b91509150612ded81612eaf565b509392505050565b6000806fa2a8918ca85bafe22016d0b997e4df60600160ff1b03831115612e225750600090506003612ea6565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612e76573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116612e9f57600060019250925050612ea6565b9150600090505b94509492505050565b6000816004811115612ec357612ec36148f7565b03612ecb5750565b6001816004811115612edf57612edf6148f7565b03612f275760405162461bcd60e51b815260206004820152601860248201527745434453413a20696e76616c6964207369676e617475726560401b6044820152606401610a13565b6002816004811115612f3b57612f3b6148f7565b03612f885760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610a13565b6003816004811115612f9c57612f9c6148f7565b03610c295760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610a13565b600054610100900460ff16611f3c5760405162461bcd60e51b8152600401610a1390614821565b600054610100900460ff166130425760405162461bcd60e51b8152600401610a1390614821565b60fd61304e83826146eb565b5060fe61305b82826146eb565b5050600060fb81905560fc5550565b606061092c6001600160a01b03831660145b6060600061308b8360026147d2565b61309690600261445c565b6001600160401b038111156130ad576130ad614191565b6040519080825280601f01601f1916602001820160405280156130d7576020820181803683370190505b509050600360fc1b816000815181106130f2576130f261466e565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106131215761312161466e565b60200101906001600160f81b031916908160001a90535060006131458460026147d2565b61315090600161445c565b90505b60018111156131c8576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106131845761318461466e565b1a60f81b82828151811061319a5761319a61466e565b60200101906001600160f81b031916908160001a90535060049490941c936131c18161490d565b9050613153565b508315610c115760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610a13565b610af061322384610d51565b61322c84610d51565b83612ab6565b60008181526001830160205260408120546132795750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561092c565b50600061092c565b60008061328c61202c565b8051909150156132a3578051602090910120919050565b60fb5480156132b25792915050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4709250505090565b6000806132e561203b565b8051909150156132fc578051602090910120919050565b60fc5480156132b25792915050565b600081815260018301602052604081205480156133f457600061332f6001836147a4565b8554909150600090613343906001906147a4565b90508181146133a85760008660000182815481106133635761336361466e565b90600052602060002001549050808760000184815481106133865761338661466e565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806133b9576133b9614924565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061092c565b600091505061092c565b600080608083901c1561341357608092831c92015b604083901c1561342557604092831c92015b602083901c1561343757602092831c92015b601083901c1561344957601092831c92015b600883901c1561345b57600892831c92015b600483901c1561346d57600492831c92015b600283901c1561347f57600292831c92015b600183901c1561092c5760010192915050565b60008183106134a15781610c11565b5090919050565b6001600160a01b0382166135085760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610a13565b61351482600083612718565b6001600160a01b038216600090815260976020526040902054818110156135885760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610a13565b6001600160a01b03831660008181526097602090815260408083208686039055609980548790039055518581529192916000805160206149dd833981519152910160405180910390a3610af0836000846127d9565b6000610c1182846147a4565b825460009081908181156136355760008781526020902082016000190160408051808201909152905463ffffffff81168252600160201b90046001600160e01b0316602082015261364a565b60408051808201909152600080825260208201525b905080602001516001600160e01b0316935061366a84868863ffffffff16565b9250600082118015613694575061367f611005565b65ffffffffffff16816000015163ffffffff16145b156136d8576136a283613979565b60008881526020902083016000190180546001600160e01b0392909216600160201b0263ffffffff909216919091179055613751565b8660405180604001604052806136fc6136ef611005565b65ffffffffffff16611fc3565b63ffffffff16815260200161371086613979565b6001600160e01b039081169091528254600181018455600093845260209384902083519490930151909116600160201b0263ffffffff909316929092179101555b5050935093915050565b61376582826139e2565b6099546001600160e01b0310156137d75760405162461bcd60e51b815260206004820152603060248201527f4552433230566f7465733a20746f74616c20737570706c79207269736b73206f60448201526f766572666c6f77696e6720766f74657360801b6064820152608401610a13565b6110296101646137e6836135e9565b6000610c11828461445c565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461383f576040519150601f19603f3d011682016040523d82523d6000602084013e613844565b606091505b5050905080610af0578282604051635fdc4ec160e11b8152600401610a1392919061493a565b816001600160a01b0316836001600160a01b0316031561102957306001600160a01b038416036138a857612c2a6001600160a01b0385168383613aa5565b6110296001600160a01b038516848484613afb565b6060831561392a578251600003613923576138d785612544565b6139235760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a13565b50816124b4565b6124b48383613b33565b600080825160410361396a5760208301516040840151606085015160001a61395e87828585612df5565b94509450505050613972565b506000905060025b9250929050565b60006001600160e01b038211156120285760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20326044820152663234206269747360c81b6064820152608401610a13565b6001600160a01b038216613a385760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610a13565b613a4460008383612718565b8060996000828254613a56919061445c565b90915550506001600160a01b0382166000818152609760209081526040808320805486019055518481526000805160206149dd833981519152910160405180910390a3610b8e600083836127d9565b610af08363a9059cbb60e01b8484604051602401613ac492919061493a565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613b5d565b6040516001600160a01b03808516602483015283166044820152606481018290526110299085906323b872dd60e01b90608401613ac4565b815115613b435781518083602001fd5b8060405162461bcd60e51b8152600401610a139190613d2e565b6000613bb2826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613c2f9092919063ffffffff16565b805190915015610af05780806020019051810190613bd09190614953565b610af05760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610a13565b60606124b4848460008585600080866001600160a01b03168587604051613c5691906148db565b60006040518083038185875af1925050503d8060008114613c93576040519150601f19603f3d011682016040523d82523d6000602084013e613c98565b606091505b5091509150613ca9878383876138bd565b979650505050505050565b600060208284031215613cc657600080fd5b81356001600160e01b031981168114610c1157600080fd5b60005b83811015613cf9578181015183820152602001613ce1565b50506000910152565b60008151808452613d1a816020860160208601613cde565b601f01601f19169290920160200192915050565b602081526000610c116020830184613d02565b80356001600160a01b0381168114613d5857600080fd5b919050565b60008060408385031215613d7057600080fd5b613d7983613d41565b946020939093013593505050565b600080600060608486031215613d9c57600080fd5b613da584613d41565b9250613db360208501613d41565b9150604084013590509250925092565b600060208284031215613dd557600080fd5b5035919050565b60008060408385031215613def57600080fd5b82359150613dff60208401613d41565b90509250929050565b600060208284031215613e1a57600080fd5b610c1182613d41565b60ff60f81b881681526000602060e06020840152613e4460e084018a613d02565b8381036040850152613e56818a613d02565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015613eaa57835183529284019291840191600101613e8e565b50909c9b505050505050505050505050565b60008083601f840112613ece57600080fd5b5081356001600160401b03811115613ee557600080fd5b60208301915083602082850101111561397257600080fd5b6000806000838503610120811215613f1457600080fd5b61010080821215613f2457600080fd5b85945084013590506001600160401b03811115613f4057600080fd5b613f4c86828701613ebc565b9497909650939450505050565b60008060408385031215613f6c57600080fd5b50508035926020909101359150565b60008060208385031215613f8e57600080fd5b82356001600160401b03811115613fa457600080fd5b613fb085828601613ebc565b90969095509350505050565b60008060208385031215613fcf57600080fd5b82356001600160401b0380821115613fe657600080fd5b818501915085601f830112613ffa57600080fd5b81358181111561400957600080fd5b8660208260051b850101111561401e57600080fd5b60209290920196919550909350505050565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b8281101561408757603f19888603018452614075858351613d02565b94509285019290850190600101614059565b5092979650505050505050565b803560ff81168114613d5857600080fd5b60008060008060008060c087890312156140be57600080fd5b6140c787613d41565b955060208701359450604087013593506140e360608801614094565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a03121561411857600080fd5b61412188613d41565b965061412f60208901613d41565b9550604088013594506060880135935061414b60808901614094565b925060a0880135915060c0880135905092959891949750929550565b6000806040838503121561417a57600080fd5b61418383613d41565b9150613dff60208401613d41565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156141cf576141cf614191565b604052919050565b600082601f8301126141e857600080fd5b81356001600160401b0381111561420157614201614191565b614214601f8201601f19166020016141a7565b81815284602083860101111561422957600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f83011261425757600080fd5b813560206001600160401b0382111561427257614272614191565b8160051b6142818282016141a7565b928352848101820192828101908785111561429b57600080fd5b83870192505b84831015613ca9576142b283613d41565b825291830191908301906142a1565b600080600080600080600080610100898b0312156142de57600080fd5b6142e789613d41565b975060208901356001600160401b038082111561430357600080fd5b61430f8c838d016141d7565b985060408b013591508082111561432557600080fd5b6143318c838d016141d7565b975060608b013591508082111561434757600080fd5b6143538c838d016141d7565b965060808b013591508082111561436957600080fd5b506143768b828c01614246565b94505061438560a08a01613d41565b925061439360c08a01613d41565b915060e089013590509295985092959890939650565b600080604083850312156143bc57600080fd5b6143c583613d41565b9150602083013563ffffffff811681146143de57600080fd5b809150509250929050565b600181811c908216806143fd57607f821691505b60208210810361253457634e487b7160e01b600052602260045260246000fd5b6020808252600f908201526e65786365656473204d41585f42505360881b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561092c5761092c614446565b60208082526019908201527804552433230566f7465733a20667574757265206c6f6f6b757603c1b604082015260600190565b80356001600160801b0381168114613d5857600080fd5b61010081016001600160a01b03806144d085613d41565b168352806144e060208601613d41565b16602084015260408401356040840152606084013560608401528061450760808601613d41565b1660808401525061451a60a084016144a2565b6001600160801b0381811660a08501528061453760c087016144a2565b1660c0850152505060e083013560e083015292915050565b601f821115610af0576000816000526020600020601f850160051c810160208610156145785750805b601f850160051c820191505b8181101561459757828155600101614584565b505050505050565b600019600383901b1c191660019190911b1790565b6001600160401b038311156145cb576145cb614191565b6145df836145d983546143e9565b8361454f565b6000601f84116001811461460d57600085156145fb5750838201355b614605868261459f565b845550614667565b600083815260209020601f19861690835b8281101561463e578685013582556020948501946001909201910161461e565b508682101561465b5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261469b57600080fd5b8301803591506001600160401b038211156146b557600080fd5b60200191503681900382131561397257600080fd5b8284823760609190911b6001600160601b0319169101908152601401919050565b81516001600160401b0381111561470457614704614191565b6147188161471284546143e9565b8461454f565b602080601f83116001811461474757600084156147355750858301515b61473f858261459f565b865550614597565b600085815260208120601f198616915b8281101561477657888601518255948401946001909101908401614757565b50858210156147945787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8181038181111561092c5761092c614446565b6000602082840312156147c957600080fd5b610c11826144a2565b808202811582820484141761092c5761092c614446565b634e487b7160e01b600052601260045260246000fd5b60008261481c57634e487b7160e01b600052601260045260246000fd5b500490565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b81526000835161489e816017850160208801613cde565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516148cf816028840160208801613cde565b01602801949350505050565b600082516148ed818460208701613cde565b9190910192915050565b634e487b7160e01b600052602160045260246000fd5b60008161491c5761491c614446565b506000190190565b634e487b7160e01b600052603160045260246000fd5b6001600160a01b03929092168252602082015260400190565b60006020828403121561496557600080fd5b81518015158114610c1157600080fdfe8502233096d909befbda0999bb8ea2f3a6be3c138b9fbf003752a4c8bce86f6c416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65649f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220c132a00cda0b46f2922db05f5073b97d8e3c6cce0f7dd92f12cb0fa0211d028164736f6c63430008170033