Overview ERC20
PRICE
n/a

ON-CHAIN MARKET CAP n/a

Total Supply:
2.45 Moxie:rahmangledek-fc

Holders:
2
Profile Summary
Blockchain:
Base (8453)


Decimals:
18
Contract Source Code Verified (Exact Match)
Contract Name:
SubjectERC20

Compiler Version
v0.8.24+commit.e11b9ed9

Optimization Enabled:
No

Created At:
Thu, 25 Jul 2024 17:07:43 GMT
OwnableUpgradeable.sol
@openzeppelin
contracts-upgradeable
access
OwnableUpgradeable.sol


Contract ABI
[
  {
    "inputs": [],
    "name": "ECDSAInvalidSignature",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "length",
        "type": "uint256"
      }
    ],
    "name": "ECDSAInvalidSignatureLength",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "bytes32",
        "name": "s",
        "type": "bytes32"
      }
    ],
    "name": "ECDSAInvalidSignatureS",
    "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": [
      {
        "internalType": "uint256",
        "name": "deadline",
        "type": "uint256"
      }
    ],
    "name": "ERC2612ExpiredSignature",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "signer",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "owner",
        "type": "address"
      }
    ],
    "name": "ERC2612InvalidSigner",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "currentNonce",
        "type": "uint256"
      }
    ],
    "name": "InvalidAccountNonce",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "InvalidInitialization",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "NotInitializing",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "owner",
        "type": "address"
      }
    ],
    "name": "OwnableInvalidOwner",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      }
    ],
    "name": "OwnableUnauthorizedAccount",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "SubjectERC20_InvalidOwner",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "SubjectERC20_InvalidTransfer",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "SubjectERC20_NotAMoxiePassHolder",
    "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": [],
    "name": "EIP712DomainChanged",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "uint64",
        "name": "version",
        "type": "uint64"
      }
    ],
    "name": "Initialized",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "previousOwner",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "newOwner",
        "type": "address"
      }
    ],
    "name": "OwnershipTransferred",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": 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": "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": "value",
        "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": "value",
        "type": "uint256"
      }
    ],
    "name": "burn",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "value",
        "type": "uint256"
      }
    ],
    "name": "burnFrom",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "decimals",
    "outputs": [
      {
        "internalType": "uint8",
        "name": "",
        "type": "uint8"
      }
    ],
    "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": "address",
        "name": "_owner",
        "type": "address"
      },
      {
        "internalType": "string",
        "name": "_name",
        "type": "string"
      },
      {
        "internalType": "string",
        "name": "_symbol",
        "type": "string"
      },
      {
        "internalType": "uint256",
        "name": "_initialSupply",
        "type": "uint256"
      },
      {
        "internalType": "address",
        "name": "_moxiePassVerifier",
        "type": "address"
      }
    ],
    "name": "initialize",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "_to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "_amount",
        "type": "uint256"
      }
    ],
    "name": "mint",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "moxiePassVerifier",
    "outputs": [
      {
        "internalType": "contract IMoxiePassVerifier",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "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": [],
    "name": "owner",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "owner",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "spender",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "value",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "deadline",
        "type": "uint256"
      },
      {
        "internalType": "uint8",
        "name": "v",
        "type": "uint8"
      },
      {
        "internalType": "bytes32",
        "name": "r",
        "type": "bytes32"
      },
      {
        "internalType": "bytes32",
        "name": "s",
        "type": "bytes32"
      }
    ],
    "name": "permit",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "renounceOwnership",
    "outputs": [],
    "stateMutability": "nonpayable",
    "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": "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": [
      {
        "internalType": "address",
        "name": "newOwner",
        "type": "address"
      }
    ],
    "name": "transferOwnership",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  }
]


Contract Creation Code
608060405234801561001057600080fd5b50612f79806100206000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c8063715018a6116100b85780638da5cb5b1161007c5780638da5cb5b1461033057806395d89b411461034e578063a9059cbb1461036c578063d505accf1461039c578063dd62ed3e146103b8578063f2fde38b146103e857610137565b8063715018a61461029a578063747b8a1c146102a457806379cc6790146102c05780637ecebe00146102dc57806384b0196e1461030c57610137565b80633644e515116100ff5780633644e515146101f657806340c10f191461021457806342966c6814610230578063685ba4181461024c57806370a082311461026a57610137565b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461018a57806323b872dd146101a8578063313ce567146101d8575b600080fd5b610144610404565b6040516101519190612190565b60405180910390f35b610174600480360381019061016f919061225a565b6104a5565b60405161018191906122b5565b60405180910390f35b6101926104c8565b60405161019f91906122df565b60405180910390f35b6101c260048036038101906101bd91906122fa565b6104e0565b6040516101cf91906122b5565b60405180910390f35b6101e061050f565b6040516101ed9190612369565b60405180910390f35b6101fe610518565b60405161020b919061239d565b60405180910390f35b61022e6004803603810190610229919061225a565b610527565b005b61024a600480360381019061024591906123b8565b61053d565b005b610254610551565b6040516102619190612444565b60405180910390f35b610284600480360381019061027f919061245f565b610575565b60405161029191906122df565b60405180910390f35b6102a26105cc565b005b6102be60048036038101906102b991906125c1565b6105e0565b005b6102da60048036038101906102d5919061225a565b61083e565b005b6102f660048036038101906102f1919061245f565b61085e565b60405161030391906122df565b60405180910390f35b610314610870565b604051610327979695949392919061277c565b60405180910390f35b610338610982565b6040516103459190612800565b60405180910390f35b6103566109ba565b6040516103639190612190565b60405180910390f35b6103866004803603810190610381919061225a565b610a5b565b60405161039391906122b5565b60405180910390f35b6103b660048036038101906103b19190612873565b610a7e565b005b6103d260048036038101906103cd9190612915565b610bc6565b6040516103df91906122df565b60405180910390f35b61040260048036038101906103fd919061245f565b610c5b565b005b60606000610410610ce1565b905080600301805461042190612984565b80601f016020809104026020016040519081016040528092919081815260200182805461044d90612984565b801561049a5780601f1061046f5761010080835404028352916020019161049a565b820191906000526020600020905b81548152906001019060200180831161047d57829003601f168201915b505050505091505090565b6000806104b0610d09565b90506104bd818585610d11565b600191505092915050565b6000806104d3610ce1565b9050806002015491505090565b6000806104eb610d09565b90506104f8858285610d23565b610503858585610db7565b60019150509392505050565b60006012905090565b6000610522610eab565b905090565b61052f610eba565b6105398282610f41565b5050565b61054e610548610d09565b82610fc3565b50565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080610580610ce1565b90508060000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054915050919050565b6105d4610eba565b6105de6000611045565b565b60006105ea61111c565b905060008160000160089054906101000a900460ff1615905060008260000160009054906101000a900467ffffffffffffffff1690506000808267ffffffffffffffff161480156106385750825b9050600060018367ffffffffffffffff1614801561066d575060003073ffffffffffffffffffffffffffffffffffffffff163b145b90508115801561067b575080155b156106b2576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018560000160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083156107025760018560000160086101000a81548160ff0219169083151502179055505b600073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff1603610768576040517fe4818e8700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107728989611144565b61077a61115a565b6107838a611164565b61078c89611178565b856000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506107d68a88610f41565b83156108325760008560000160086101000a81548160ff0219169083151502179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d260016040516108299190612a04565b60405180910390a15b50505050505050505050565b6108508261084a610d09565b83610d23565b61085a8282610fc3565b5050565b6000610869826111c2565b9050919050565b6000606080600080600060606000610886611219565b90506000801b81600001541480156108a457506000801b8160010154145b6108e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108da90612a6b565b60405180910390fd5b6108eb611241565b6108f36112e2565b46306000801b600067ffffffffffffffff81111561091457610913612496565b5b6040519080825280602002602001820160405280156109425781602001602082028036833780820191505090505b507f0f0000000000000000000000000000000000000000000000000000000000000095949392919097509750975097509750975097505090919293949596565b60008061098d611383565b90508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691505090565b606060006109c6610ce1565b90508060040180546109d790612984565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0390612984565b8015610a505780601f10610a2557610100808354040283529160200191610a50565b820191906000526020600020905b815481529060010190602001808311610a3357829003601f168201915b505050505091505090565b600080610a66610d09565b9050610a73818585610db7565b600191505092915050565b83421115610ac357836040517f62791302000000000000000000000000000000000000000000000000000000008152600401610aba91906122df565b60405180910390fd5b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9888888610af28c6113ab565b89604051602001610b0896959493929190612a8b565b6040516020818303038152906040528051906020012090506000610b2b82611410565b90506000610b3b8287878761142a565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610baf57808a6040517f4b800e46000000000000000000000000000000000000000000000000000000008152600401610ba6929190612aec565b60405180910390fd5b610bba8a8a8a610d11565b50505050505050505050565b600080610bd1610ce1565b90508060010160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205491505092915050565b610c63610eba565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610cd55760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610ccc9190612800565b60405180910390fd5b610cde81611045565b50565b60007f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00905090565b600033905090565b610d1e838383600161145a565b505050565b6000610d2f8484610bc6565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610db15781811015610da1578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401610d9893929190612b15565b60405180910390fd5b610db08484848403600061145a565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610e295760006040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610e209190612800565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e9b5760006040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610e929190612800565b60405180910390fd5b610ea6838383611640565b505050565b6000610eb5611815565b905090565b610ec2610d09565b73ffffffffffffffffffffffffffffffffffffffff16610ee0610982565b73ffffffffffffffffffffffffffffffffffffffff1614610f3f57610f03610d09565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610f369190612800565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610fb35760006040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610faa9190612800565b60405180910390fd5b610fbf60008383611640565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110355760006040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260040161102c9190612800565b60405180910390fd5b61104182600083611640565b5050565b600061104f611383565b905060008160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050828260000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505050565b60007ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00905090565b61114c611879565b61115682826118b9565b5050565b611162611879565b565b61116c611879565b611175816118f6565b50565b611180611879565b6111bf816040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525061197c565b50565b6000806111cd6119d1565b90508060000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054915050919050565b60007fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100905090565b6060600061124d611219565b905080600201805461125e90612984565b80601f016020809104026020016040519081016040528092919081815260200182805461128a90612984565b80156112d75780601f106112ac576101008083540402835291602001916112d7565b820191906000526020600020905b8154815290600101906020018083116112ba57829003601f168201915b505050505091505090565b606060006112ee611219565b90508060030180546112ff90612984565b80601f016020809104026020016040519081016040528092919081815260200182805461132b90612984565b80156113785780601f1061134d57610100808354040283529160200191611378565b820191906000526020600020905b81548152906001019060200180831161135b57829003601f168201915b505050505091505090565b60007f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300905090565b6000806113b66119d1565b90508060000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919060010191905055915050919050565b600061142361141d610eab565b836119f9565b9050919050565b60008060008061143c88888888611a3a565b92509250925061144c8282611b2e565b829350505050949350505050565b6000611464610ce1565b9050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036114d85760006040517fe602df050000000000000000000000000000000000000000000000000000000081526004016114cf9190612800565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361154a5760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016115419190612800565b60405180910390fd5b828160010160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508115611639578373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258560405161163091906122df565b60405180910390a35b5050505050565b81600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015611715575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637c563611826040518263ffffffff1660e01b81526004016116d29190612800565b602060405180830381865afa1580156116ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117139190612b78565b155b1561174c576040517f7f9a487100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8383600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156117b85750600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b80156117cb57506117c98282611c92565b155b15611802576040517f100f732600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61180d868686611da9565b505050505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f611840611fe8565b611848612064565b463060405160200161185e959493929190612ba5565b60405160208183030381529060405280519060200120905090565b6118816120e0565b6118b7576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6118c1611879565b60006118cb610ce1565b9050828160030190816118de9190612d9a565b50818160040190816118f09190612d9a565b50505050565b6118fe611879565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036119705760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016119679190612800565b60405180910390fd5b61197981611045565b50565b611984611879565b600061198e611219565b9050828160020190816119a19190612d9a565b50818160030190816119b39190612d9a565b506000801b81600001819055506000801b8160010181905550505050565b60007f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb00905090565b60006040517f190100000000000000000000000000000000000000000000000000000000000081528360028201528260228201526042812091505092915050565b60008060007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08460001c1115611a7a576000600385925092509250611b24565b600060018888888860405160008152602001604052604051611a9f9493929190612e6c565b6020604051602081039080840390855afa158015611ac1573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611b1557600060016000801b93509350935050611b24565b8060008060001b935093509350505b9450945094915050565b60006003811115611b4257611b41612eb1565b5b826003811115611b5557611b54612eb1565b5b0315611c8e5760016003811115611b6f57611b6e612eb1565b5b826003811115611b8257611b81612eb1565b5b03611bb9576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60026003811115611bcd57611bcc612eb1565b5b826003811115611be057611bdf612eb1565b5b03611c25578060001c6040517ffce698f7000000000000000000000000000000000000000000000000000000008152600401611c1c91906122df565b60405180910390fd5b600380811115611c3857611c37612eb1565b5b826003811115611c4b57611c4a612eb1565b5b03611c8d57806040517fd78bce0c000000000000000000000000000000000000000000000000000000008152600401611c84919061239d565b60405180910390fd5b5b5050565b6000611c9c610982565b73ffffffffffffffffffffffffffffffffffffffff166301277920846040518263ffffffff1660e01b8152600401611cd49190612800565b6020604051808303816000875af1158015611cf3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d179190612b78565b80611da15750611d25610982565b73ffffffffffffffffffffffffffffffffffffffff166301277920836040518263ffffffff1660e01b8152600401611d5d9190612800565b6020604051808303816000875af1158015611d7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611da09190612b78565b5b905092915050565b6000611db3610ce1565b9050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611e095781816002016000828254611dfd9190612f0f565b92505081905550611ee2565b60008160000160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611e98578481846040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401611e8f93929190612b15565b60405180910390fd5b8281038260000160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f2d57818160020160008282540392505081905550611f7d565b818160000160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611fda91906122df565b60405180910390a350505050565b600080611ff3611219565b90506000611fff611241565b905060008151111561201c57808051906020012092505050612061565b6000826000015490506000801b811461203a57809350505050612061565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47093505050505b90565b60008061206f611219565b9050600061207b6112e2565b9050600081511115612098578080519060200120925050506120dd565b6000826001015490506000801b81146120b6578093505050506120dd565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47093505050505b90565b60006120ea61111c565b60000160089054906101000a900460ff16905090565b600081519050919050565b600082825260208201905092915050565b60005b8381101561213a57808201518184015260208101905061211f565b60008484015250505050565b6000601f19601f8301169050919050565b600061216282612100565b61216c818561210b565b935061217c81856020860161211c565b61218581612146565b840191505092915050565b600060208201905081810360008301526121aa8184612157565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006121f1826121c6565b9050919050565b612201816121e6565b811461220c57600080fd5b50565b60008135905061221e816121f8565b92915050565b6000819050919050565b61223781612224565b811461224257600080fd5b50565b6000813590506122548161222e565b92915050565b60008060408385031215612271576122706121bc565b5b600061227f8582860161220f565b925050602061229085828601612245565b9150509250929050565b60008115159050919050565b6122af8161229a565b82525050565b60006020820190506122ca60008301846122a6565b92915050565b6122d981612224565b82525050565b60006020820190506122f460008301846122d0565b92915050565b600080600060608486031215612313576123126121bc565b5b60006123218682870161220f565b93505060206123328682870161220f565b925050604061234386828701612245565b9150509250925092565b600060ff82169050919050565b6123638161234d565b82525050565b600060208201905061237e600083018461235a565b92915050565b6000819050919050565b61239781612384565b82525050565b60006020820190506123b2600083018461238e565b92915050565b6000602082840312156123ce576123cd6121bc565b5b60006123dc84828501612245565b91505092915050565b6000819050919050565b600061240a612405612400846121c6565b6123e5565b6121c6565b9050919050565b600061241c826123ef565b9050919050565b600061242e82612411565b9050919050565b61243e81612423565b82525050565b60006020820190506124596000830184612435565b92915050565b600060208284031215612475576124746121bc565b5b60006124838482850161220f565b91505092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6124ce82612146565b810181811067ffffffffffffffff821117156124ed576124ec612496565b5b80604052505050565b60006125006121b2565b905061250c82826124c5565b919050565b600067ffffffffffffffff82111561252c5761252b612496565b5b61253582612146565b9050602081019050919050565b82818337600083830152505050565b600061256461255f84612511565b6124f6565b9050828152602081018484840111156125805761257f612491565b5b61258b848285612542565b509392505050565b600082601f8301126125a8576125a761248c565b5b81356125b8848260208601612551565b91505092915050565b600080600080600060a086880312156125dd576125dc6121bc565b5b60006125eb8882890161220f565b955050602086013567ffffffffffffffff81111561260c5761260b6121c1565b5b61261888828901612593565b945050604086013567ffffffffffffffff811115612639576126386121c1565b5b61264588828901612593565b935050606061265688828901612245565b92505060806126678882890161220f565b9150509295509295909350565b60007fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b6126a981612674565b82525050565b6126b8816121e6565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6126f381612224565b82525050565b600061270583836126ea565b60208301905092915050565b6000602082019050919050565b6000612729826126be565b61273381856126c9565b935061273e836126da565b8060005b8381101561276f57815161275688826126f9565b975061276183612711565b925050600181019050612742565b5085935050505092915050565b600060e082019050612791600083018a6126a0565b81810360208301526127a38189612157565b905081810360408301526127b78188612157565b90506127c660608301876122d0565b6127d360808301866126af565b6127e060a083018561238e565b81810360c08301526127f2818461271e565b905098975050505050505050565b600060208201905061281560008301846126af565b92915050565b6128248161234d565b811461282f57600080fd5b50565b6000813590506128418161281b565b92915050565b61285081612384565b811461285b57600080fd5b50565b60008135905061286d81612847565b92915050565b600080600080600080600060e0888a031215612892576128916121bc565b5b60006128a08a828b0161220f565b97505060206128b18a828b0161220f565b96505060406128c28a828b01612245565b95505060606128d38a828b01612245565b94505060806128e48a828b01612832565b93505060a06128f58a828b0161285e565b92505060c06129068a828b0161285e565b91505092959891949750929550565b6000806040838503121561292c5761292b6121bc565b5b600061293a8582860161220f565b925050602061294b8582860161220f565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061299c57607f821691505b6020821081036129af576129ae612955565b5b50919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b60006129ee6129e96129e4846129b5565b6123e5565b6129bf565b9050919050565b6129fe816129d3565b82525050565b6000602082019050612a1960008301846129f5565b92915050565b7f4549503731323a20556e696e697469616c697a65640000000000000000000000600082015250565b6000612a5560158361210b565b9150612a6082612a1f565b602082019050919050565b60006020820190508181036000830152612a8481612a48565b9050919050565b600060c082019050612aa0600083018961238e565b612aad60208301886126af565b612aba60408301876126af565b612ac760608301866122d0565b612ad460808301856122d0565b612ae160a08301846122d0565b979650505050505050565b6000604082019050612b0160008301856126af565b612b0e60208301846126af565b9392505050565b6000606082019050612b2a60008301866126af565b612b3760208301856122d0565b612b4460408301846122d0565b949350505050565b612b558161229a565b8114612b6057600080fd5b50565b600081519050612b7281612b4c565b92915050565b600060208284031215612b8e57612b8d6121bc565b5b6000612b9c84828501612b63565b91505092915050565b600060a082019050612bba600083018861238e565b612bc7602083018761238e565b612bd4604083018661238e565b612be160608301856122d0565b612bee60808301846126af565b9695505050505050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302612c5a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612c1d565b612c648683612c1d565b95508019841693508086168417925050509392505050565b6000612c97612c92612c8d84612224565b6123e5565b612224565b9050919050565b6000819050919050565b612cb183612c7c565b612cc5612cbd82612c9e565b848454612c2a565b825550505050565b600090565b612cda612ccd565b612ce5818484612ca8565b505050565b5b81811015612d0957612cfe600082612cd2565b600181019050612ceb565b5050565b601f821115612d4e57612d1f81612bf8565b612d2884612c0d565b81016020851015612d37578190505b612d4b612d4385612c0d565b830182612cea565b50505b505050565b600082821c905092915050565b6000612d7160001984600802612d53565b1980831691505092915050565b6000612d8a8383612d60565b9150826002028217905092915050565b612da382612100565b67ffffffffffffffff811115612dbc57612dbb612496565b5b612dc68254612984565b612dd1828285612d0d565b600060209050601f831160018114612e045760008415612df2578287015190505b612dfc8582612d7e565b865550612e64565b601f198416612e1286612bf8565b60005b82811015612e3a57848901518255600182019150602085019450602081019050612e15565b86831015612e575784890151612e53601f891682612d60565b8355505b6001600288020188555050505b505050505050565b6000608082019050612e81600083018761238e565b612e8e602083018661235a565b612e9b604083018561238e565b612ea8606083018461238e565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612f1a82612224565b9150612f2583612224565b9250828201905080821115612f3d57612f3c612ee0565b5b9291505056fea2646970667358221220bfe1ea53c4b362bf8a57f269f59b4d431a45733621c0ddaa24333d7b124e018464736f6c63430008180033