Overview ERC721
Total Supply:
0 N2MOwners

Holders:
32,056
Profile Summary
Blockchain:
Taiko (167000)

Contract Source Code Verified (Exact Match)
Contract Name:
N2MFactory

Compiler Version
v0.8.26+commit.8a97fa7a

Optimization Enabled:
Yes with 151 runs

Created At:
Mon, 27 May 2024 14:17:35 GMT
README.sol
contracts
important
README.sol


Contract ABI
[
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "owner",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "delegatedCreationSigner",
        "type": "address"
      },
      {
        "internalType": "bytes32",
        "name": "type1",
        "type": "bytes32"
      },
      {
        "internalType": "bytes32",
        "name": "type2",
        "type": "bytes32"
      },
      {
        "internalType": "address",
        "name": "type1Address",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "type2Address",
        "type": "address"
      }
    ],
    "stateMutability": "payable",
    "type": "constructor"
  },
  {
    "inputs": [],
    "name": "BalanceInvariant",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "sender",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      },
      {
        "internalType": "address",
        "name": "owner",
        "type": "address"
      }
    ],
    "name": "ERC721IncorrectOwner",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "operator",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "ERC721InsufficientApproval",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "approver",
        "type": "address"
      }
    ],
    "name": "ERC721InvalidApprover",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "operator",
        "type": "address"
      }
    ],
    "name": "ERC721InvalidOperator",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "owner",
        "type": "address"
      }
    ],
    "name": "ERC721InvalidOwner",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "receiver",
        "type": "address"
      }
    ],
    "name": "ERC721InvalidReceiver",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "sender",
        "type": "address"
      }
    ],
    "name": "ERC721InvalidSender",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "ERC721NonexistentToken",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "FactoryBalanceDecreased",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "FailedToDeploy",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "InvalidLengths",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "InvalidSignature",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "NewOwnerIsZeroAddress",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "Unauthorized",
    "type": "error"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "owner",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "approved",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "Approval",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "owner",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "operator",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "bool",
        "name": "approved",
        "type": "bool"
      }
    ],
    "name": "ApprovalForAll",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "pendingOwner",
        "type": "address"
      }
    ],
    "name": "OwnershipHandoverCanceled",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "pendingOwner",
        "type": "address"
      }
    ],
    "name": "OwnershipHandoverRequested",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "oldOwner",
        "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": true,
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "Transfer",
    "type": "event"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "approve",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "owner",
        "type": "address"
      }
    ],
    "name": "balanceOf",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes32",
        "name": "salt",
        "type": "bytes32"
      },
      {
        "internalType": "bytes",
        "name": "initCode",
        "type": "bytes"
      }
    ],
    "name": "create3",
    "outputs": [],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes",
        "name": "collectionInformation",
        "type": "bytes"
      },
      {
        "internalType": "bytes32",
        "name": "collectionId",
        "type": "bytes32"
      },
      {
        "internalType": "bytes32",
        "name": "implementationType",
        "type": "bytes32"
      }
    ],
    "name": "createCollection",
    "outputs": [],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes",
        "name": "collectionInformation",
        "type": "bytes"
      },
      {
        "internalType": "bytes32",
        "name": "collectionId",
        "type": "bytes32"
      },
      {
        "internalType": "bytes32",
        "name": "implementationType",
        "type": "bytes32"
      }
    ],
    "name": "createCollectionN2M_000oEFvt",
    "outputs": [],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes",
        "name": "collectionInformation",
        "type": "bytes"
      },
      {
        "internalType": "bytes32",
        "name": "collectionId",
        "type": "bytes32"
      },
      {
        "internalType": "bytes32",
        "name": "implementationType",
        "type": "bytes32"
      }
    ],
    "name": "createCrossCollection",
    "outputs": [],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "dynamicAddress",
        "type": "address"
      },
      {
        "internalType": "bytes32",
        "name": "salt",
        "type": "bytes32"
      },
      {
        "internalType": "bytes",
        "name": "initData",
        "type": "bytes"
      }
    ],
    "name": "createNewDynamic",
    "outputs": [],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes",
        "name": "collectionInformation",
        "type": "bytes"
      },
      {
        "internalType": "address",
        "name": "owner",
        "type": "address"
      },
      {
        "internalType": "bytes32",
        "name": "collectionId",
        "type": "bytes32"
      },
      {
        "internalType": "bytes32",
        "name": "implementationType",
        "type": "bytes32"
      },
      {
        "internalType": "bytes",
        "name": "signature",
        "type": "bytes"
      }
    ],
    "name": "delegatedCreation",
    "outputs": [],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "getApproved",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes32",
        "name": "CIDHash",
        "type": "bytes32"
      }
    ],
    "name": "getIPFSURI",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "pure",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes32",
        "name": "implementationType",
        "type": "bytes32"
      }
    ],
    "name": "getImplementation",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "owner",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "operator",
        "type": "address"
      }
    ],
    "name": "isApprovedForAll",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "collectionAndSelfcalls",
        "type": "uint256"
      },
      {
        "internalType": "bytes[]",
        "name": "data",
        "type": "bytes[]"
      }
    ],
    "name": "multicall",
    "outputs": [],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256[]",
        "name": "collectionsAndCalls",
        "type": "uint256[]"
      },
      {
        "internalType": "uint256[]",
        "name": "collectionsValues",
        "type": "uint256[]"
      },
      {
        "internalType": "bytes[]",
        "name": "data",
        "type": "bytes[]"
      }
    ],
    "name": "multicallMulticollection",
    "outputs": [],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "collectionAndSelfcalls",
        "type": "uint256"
      },
      {
        "internalType": "bytes[]",
        "name": "data",
        "type": "bytes[]"
      }
    ],
    "name": "multicallN2M_001Taw5z",
    "outputs": [],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "n2mVersion",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "pure",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "name",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "pure",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes32[]",
        "name": "implementationTypesAndAddresses",
        "type": "bytes32[]"
      },
      {
        "internalType": "address",
        "name": "delegatedCreationSigner_",
        "type": "address"
      },
      {
        "internalType": "string",
        "name": "ownerTokenURI",
        "type": "string"
      }
    ],
    "name": "newContractImplementationsAndSigner",
    "outputs": [],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "owner",
    "outputs": [
      {
        "internalType": "address",
        "name": "result",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "ownerOf",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes32",
        "name": "implementationType",
        "type": "bytes32"
      },
      {
        "internalType": "bytes32",
        "name": "collectionId",
        "type": "bytes32"
      }
    ],
    "name": "predictDeterministicAddress",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "salePrice",
        "type": "uint256"
      }
    ],
    "name": "royaltyInfo",
    "outputs": [
      {
        "internalType": "address",
        "name": "receiver",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "royaltyAmount",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "from",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "safeTransferFrom",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "from",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      },
      {
        "internalType": "bytes",
        "name": "data",
        "type": "bytes"
      }
    ],
    "name": "safeTransferFrom",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "operator",
        "type": "address"
      },
      {
        "internalType": "bool",
        "name": "approved",
        "type": "bool"
      }
    ],
    "name": "setApprovalForAll",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes4",
        "name": "interfaceId",
        "type": "bytes4"
      }
    ],
    "name": "supportsInterface",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "pure",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "symbol",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "pure",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "tokenURI",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      }
    ],
    "name": "transferCollectionOwnership",
    "outputs": [],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "from",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "transferFrom",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "newOwner",
        "type": "address"
      }
    ],
    "name": "transferOwnership",
    "outputs": [],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "erc20",
        "type": "address"
      }
    ],
    "name": "withdrawTo",
    "outputs": [],
    "stateMutability": "payable",
    "type": "function"
  }
]


Contract Creation Code
608060405261256d60c081380391826100178161041d565b9384928339810103126104195761002d81610442565b9061003a60208201610442565b90604081015160608201519261005e60a061005760808601610442565b9401610442565b94610069602061041d565b5f8152610076602061041d565b5f8152815190916001600160401b03821161034a5781906100975f54610456565b601f81116103cc575b50602090601f8311600114610369575f9261035e575b50508160011b915f199060031b1c1916175f555b8051906001600160401b03821161034a5781906100e8600154610456565b601f81116102f1575b50602090601f831160011461028b575f92610280575b50508160011b915f199060031b1c1916176001555b610127600854610456565b601f8111610237575b50605f60089081555f9081527f68747470733a2f2f6d657461646174612e6e667473326d652e636f6d2f6170695f8051602061254d833981519152556e2f6f776e6572546f6b656e5552492f60881b7ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee4556001600160a01b0391909116638b78c6d819819055907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600780546001600160a01b03199081166001600160a01b03938416179091555f9283526006602052604080842080548316958416959095179094559382529082902080549093169316929092179055516120a890816104a58239f35b60085f5261027a90601f0160051c5f8051602061254d833981519152017ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee561048e565b5f610130565b015190505f80610107565b60015f9081528281209350601f198516905b8181106102d957509084600195949392106102c1575b505050811b0160015561011c565b01515f1960f88460031b161c191690555f80806102b3565b9293602060018192878601518155019501930161029d565b60015f5261033a907fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6601f850160051c81019160208610610340575b601f0160051c019061048e565b5f6100f1565b909150819061032d565b634e487b7160e01b5f52604160045260245ffd5b015190505f806100b6565b5f8080528281209350601f198516905b8181106103b4575090846001959493921061039c575b505050811b015f556100ca565b01515f1960f88460031b161c191690555f808061038f565b92936020600181928786015181550195019301610379565b5f8052610413907f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563601f850160051c8101916020861061034057601f0160051c019061048e565b5f6100a0565b5f80fd5b6040519190601f01601f191682016001600160401b0381118382101761034a57604052565b51906001600160a01b038216820361041957565b90600182811c92168015610484575b602083101461047057565b634e487b7160e01b5f52602260045260245ffd5b91607f1691610465565b818110610499575050565b5f815560010161048e56fe60806040526004361015610011575f80fd5b5f3560e01c80156101b757806001146101c657806301ffc9a71461020257806303f30d08146101fd57806304dad935146101f857806306fdde03146101f3578063081812fc146101ee578063095ea7b3146101e957806323b872dd146101e45780632a55205a146101df5780632af25238146101da57806338395f19146101d55780633c2e0828146101d057806342842e0e146101cb5780635ae401dc146101c65780636352211e146101c157806367c0e310146101bc5780636a064fce146101b75780636d07dbf8146101b25780636dce4ab0146101ad57806370a08231146101a85780637ce27a27146101a35780638da5cb5b1461019e57806395905e211461019957806395d89b4114610194578063a22cb4651461018f578063b88d4fde1461018a578063c87b56dd14610185578063c91df5cc14610180578063cb93c48f1461017b578063e985e9c5146101765763f2fde38b14610171575f80fd5b6112f0565b6112c4565b6112a8565b611224565b61112f565b6110e1565b611029565b610fd4565b610ee5565b610eb9565b610d41565b610cf0565b610c2f565b610b9c565b61026e565b610b20565b610af0565b6102bf565b610ac7565b610a95565b6109d9565b610997565b6108a6565b61088f565b61077b565b61073f565b6106eb565b610644565b61041d565b6103ec565b9181601f84011215610234578235916001600160401b038311610234576020838186019501011161023457565b5f80fd5b606060031982011261023457600435906001600160401b0382116102345761026291600401610207565b90916024359060443590565b61028d61027a36610238565b9261028892919233846119aa565b61139b565b005b9181601f84011215610234578235916001600160401b038311610234576020808501948460051b01011161023457565b6040366003190112610234576004356024356001600160401b038111610234576102ed90369060040161028f565b5f926001600160a01b0381169060a01c5b80851061039f57508061030d57005b61033e610332610325835f52600260205260405f2090565b546001600160a01b031690565b6001600160a01b031690565b330361039157925b81811061034f57005b5f8061035c83858761140a565b9061036c6040518093819361135f565b039082885af161037a61136c565b90156103895750600101610346565b602081519101fd5b6282b42960e81b5f5260045ffd5b935f806103ad83868861140a565b906103bd6040518093819361135f565b0390305af46103ca61136c565b90156103895750600101936102fe565b6001600160e01b031981160361023457565b3461023457602036600319011261023457602061041360043561040e816103da565b611450565b6040519015158152f35b6060366003190112610234576004356001600160401b0381116102345761044890369060040161028f565b6024356001600160401b0381116102345761046790369060040161028f565b92906044356001600160401b0381116102345761048890369060040161028f565b9290856105df575b5f925f955f5b8181106104bd575050505050036104ae57036104ae57005b631df89e8b60e01b5f5260045ffd5b6104c88183876114c5565b356001600160a01b0381169060a01c908061053557505f5b8181106104f35750506001905b01610496565b5f806105096105018b6114d5565b9a8c8a61140a565b906105196040518093819361135f565b0390305af461052661136c565b901561038957506001016104e0565b61054d610332610325835f52600260205260405f2090565b3303610391579088915f5b82811061056b57505050506001906104ed565b909192985f908d8d106105c1575b5f916105918261058a8594916114d5565b9d8c61140a565b906105a16040518093819361135f565b0391865af16105ae61136c565b9015610389575060010190899291610558565b90508c6105cd8d6114d5565b9c6105d891896114c5565b3590610579565b6105e934476114b8565b806105f5575b50610490565b5f80808093736db16927dbc38aa39f0ee2cb545e15efd813fb995af1505f6105ef565b600435906001600160a01b038216820361023457565b602435906001600160a01b038216820361023457565b602036600319011261023457610658610618565b6001600160a01b039061066c903390611a0d565b161561067457005b637e27328960e01b5f523360045260245ffd5b5f91031261023457565b5f5b8381106106a25750505f910152565b8181015183820152602001610693565b906020916106cb81518092818552858086019101610691565b601f01601f1916010190565b9060206106e89281815201906106b2565b90565b34610234575f3660031901126102345761073b60405161070c604082610910565b600e81526d4e465473324d65204f776e65727360901b60208201526040519182916020835260208301906106b2565b0390f35b346102345760203660031901126102345760043561075c81611b43565b505f526004602052602060018060a01b0360405f205416604051908152f35b3461023457604036600319011261023457610794610618565b602435906107a182611b43565b33151580610842575b80610831575b61081c5761028d926107fd9181906001600160a01b0385811691167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9255f80a45f52600460205260405f2090565b80546001600160a01b0319166001600160a01b03909216919091179055565b63a9fbf51f60e01b5f90815233600452602490fd5b5061083c338261192e565b156107b0565b506001600160a01b0381163314156107aa565b6060906003190112610234576004356001600160a01b038116810361023457906024356001600160a01b0381168103610234579060443590565b346102345761028d6108a036610855565b916114e3565b34610234576040366003190112610234576024356101f48102908082046101f414901517156108f757604090612710825191736db16927dbc38aa39f0ee2cb545e15efd813fb998352046020820152f35b6114a4565b634e487b7160e01b5f52604160045260245ffd5b90601f801991011681019081106001600160401b0382111761093157604052565b6108fc565b6001600160401b03811161093157601f01601f191660200190565b81601f820112156102345780359061096882610936565b926109766040519485610910565b8284526020838301011161023457815f926020809301838601378301015290565b6040366003190112610234576024356004356001600160401b038211610234576109c861028d923690600401610951565b6109d233836119aa565b3491611be2565b610a545f806109e736610238565b6109f59692939633836119aa565b8452600660205260408085205481516c5af43d3d93803e602a57fd5bf360581b818401526001600160a01b03909116602882015273602c3d8160093d39f33d3d3d3d363d3d37363d736014820152603581526060810190915290611b77565b93610a646040518093819361135f565b039082855af190610a7361136c565b9115610a8c5761028d906001600160a01b0316336119d0565b50602081519101fd5b34610234576020366003190112610234576004355f526006602052602060018060a01b0360405f205416604051908152f35b346102345761028d610ad836610855565b9060405192610ae8602085610910565b5f84526116db565b34610234576020366003190112610234576020610b0e600435611b43565b6040516001600160a01b039091168152f35b606036600319011261023457610b34610618565b602435906044356001600160401b03811161023457610b5a610b6c913690600401610207565b939092610b6733836119aa565b611f5c565b82610b7357005b825f9392849360405192839283378101848152039134905af1610b9461136c565b901561038957005b3461023457604036600319011261023457600435602435905f52600660205260018060a01b0360405f2054166c5af43d3d93803e602a57fd5bf360215260145273602c3d8160093d39f33d3d3d3d363d3d37363d735f526035600c205f60215260ff5f5360359081523060601b60015260159190915260555f90812091526040516001600160a01b039091168152602090f35b604036600319011261023457610c43610618565b610c4b61062e565b610c53611c32565b5f80808047865af1506001600160a01b0381169182610c6e57005b610cb392610c7f6020933090611c4e565b60405163a9059cbb60e01b81526001600160a01b0390931660048401526024830152909283919082905f9082906044820190565b03925af18015610ceb57610cc357005b61028d9060203d602011610ce4575b610cdc8183610910565b810190611675565b503d610cd2565b61168a565b34610234576020366003190112610234576001600160a01b03610d11610618565b168015610d2e575f526003602052602060405f2054604051908152f35b6322718ad960e21b5f525f60045260245ffd5b60a0366003190112610234576004356001600160401b03811161023457610d6c903690600401610207565b610d7461062e565b90604435606435916084356001600160401b03811161023457610d9e610e09913690600401610207565b90610da987866119aa565b610e048886610dd78a610dc98b6040519485938c6020860198468a611695565b03601f198101835282610910565b5190206020527b19457468657265756d205369676e6564204d6573736167653a0a33325f52603c60042090565b611c73565b600754610e1e906001600160a01b0316610332565b6001600160a01b03909116908114159081610ea5575b50610e9657610e555f9392610b6761032586955f52600660205260405f2090565b94610e656040518093819361135f565b039082865af191610e7461136c565b9215610e8e5761028d92506001600160a01b0316906119d0565b825160208401fd5b638baa579f60e01b5f5260045ffd5b6001600160a01b038616141590505f610e34565b34610234575f36600319011261023457638b78c6d819546040516001600160a01b039091168152602090f35b6060366003190112610234576004356001600160401b03811161023457610f1090369060040161028f565b610f1861062e565b6044356001600160401b03811161023457610f37903690600401610207565b929093610f42611c32565b5f5b828110610f93575050506001600160a01b038116610f6e575b5080610f6557005b61028d91611d4d565b600780546001600160a01b0319166001600160a01b039092169190911790555f610f5d565b80610fce610fa460019386866114c5565b356107fd610fb38488886114c5565b3591858060a01b03169160a01c5f52600660205260405f2090565b01610f44565b34610234575f3660031901126102345761073b604051610ff5604082610910565b60098152684e324d4f776e65727360b81b60208201526040519182916020835260208301906106b2565b8015150361023457565b3461023457604036600319011261023457611042610618565b60243561104e8161101f565b6001600160a01b0382169182156110ce57335f9081526005602090815260408083206001600160a01b0390941683529290522060ff1981541660ff831515161790557f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31604051806110c9339482919091602081019215159052565b0390a3005b82630b61174360e31b5f5260045260245ffd5b34610234576080366003190112610234576110fa610618565b61110261062e565b90604435606435926001600160401b0384116102345761112961028d943690600401610951565b926116db565b34610234576020366003190112610234576004356040516329ffa82360e11b81526020816004816001600160a01b0386165afa908115610ceb576020610dc96111de61073b956111d86111de6111d8976111eb975f916111f7575b506111d86111de61119a46611e74565b956111d86111de6111ca6111c46111bf6103326103326111b988611e74565b97611b43565b611e74565b96611e74565b986040519e8f9d8e0161181d565b906118a4565b602f60f81b815260010190565b604051918291826106d7565b6112179150873d891161121d575b61120f8183610910565b8101906117d6565b5f61118a565b503d611205565b3461023457602036600319011261023457604051620b809160e51b602082015260043560248201525f604482015260258152611261604582610910565b6112696118bb565b905f5b603a81106112805761073b6111eb846118ee565b8061129561129060019385611eb9565b611f1a565b5f1a6112a182866118dd565b530161126c565b34610234575f3660031901126102345760206040516107ee8152f35b346102345760403660031901126102345760206104136112e2610618565b6112ea61062e565b9061192e565b602036600319011261023457611304610618565b61130c611c32565b8060601b156113525760018060a01b031680638b78c6d819547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3638b78c6d81955005b637448fbae5f526004601cfd5b908092918237015f815290565b3d15611396573d9061137d82610936565b9161138b6040519384610910565b82523d5f602084013e565b606090565b92906113bd5f9384938452600660205260018060a01b03604085205416611f5c565b938160405192839283378101838152039082855af16113da61136c565b901561038957506113f4906001600160a01b0316336119d0565b565b634e487b7160e01b5f52603260045260245ffd5b919081101561144b5760051b81013590601e19813603018212156102345701908135916001600160401b038311610234576020018236038113610234579190565b6113f6565b6001600160e01b0319166301ffc9a760e01b811461149e576307f5828d60e41b811461149e576380ac58cd60e01b811461149e57635b5e139f60e01b811461149e5763152a902d60e11b1490565b50600190565b634e487b7160e01b5f52601160045260245ffd5b919082039182116108f757565b919081101561144b5760051b0190565b5f1981146108f75760010190565b9091906001600160a01b0383168015611662575f838152600260205260409020546001600160a01b03169333611652575b6001600160a01b0385169485151580611626575b6001600160a01b0383165f9081526003602052604090206001815401905561155c836107fd885f52600260205260405f2090565b8560405194887fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef5f80a46115bb575b5050506001600160a01b03168083036115a357505050565b6364283d7b60e01b5f5260045260245260445260645ffd5b6001600160a01b038516803b1561023457637699c77f60e01b84526001600160a01b039182166004850152911660248301525f908290604490829084905af18015610ceb5761160c575b808061158b565b8061161a5f61162093610910565b80610687565b5f611605565b61162f86611f9a565b6001600160a01b0382165f90815260036020526040902080545f19019055611528565b61165d843387611fbc565b611514565b633250574960e11b5f525f60045260245ffd5b9081602091031261023457516106e88161101f565b6040513d5f823e3d90fd5b90928092607897959694637ce27a2760e01b84526004840152602483013701926bffffffffffffffffffffffff199060601b166024840152603883015260588201520190565b9092916116e98185846114e3565b833b6116f6575b50505050565b6020916117186040519485938493630a85bd0160e11b85523360048601611e43565b03815f6001600160a01b0387165af15f91816117a5575b50611769575061173d61136c565b805191908261176257633250574960e11b5f526001600160a01b03821660045260245ffd5b9050602001fd5b6001600160e01b03191663757a42ff60e11b0161178a57505f8080806116f0565b633250574960e11b5f526001600160a01b031660045260245ffd5b6117c891925060203d6020116117cf575b6117c08183610910565b810190611e2e565b905f61172f565b503d6117b6565b90816020910312610234575190565b90600182811c92168015611813575b60208310146117ff57565b634e487b7160e01b5f52602260045260245ffd5b91607f16916117f4565b6008545f929161182c826117e5565b91600181169081156118925750600114611844575050565b60085f90815292935090917ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee35b83821061187e5750500190565b600181602092548486015201910190611871565b60ff1916825250811515909102019150565b906118b760209282815194859201610691565b0190565b604051606091906118cc8382610910565b603a815291601f1901366020840137565b90815181101561144b570160200190565b906113f4602860405180946734b833399d1797b160c11b602083015261191d8151809260208686019101610691565b81010301601f198101845283610910565b6001600160a01b0382167388899dc0b84c6e726840e00dfb94abc6248825ec81146119a257731e0049783f008a0085193e00003d00cd54003c711461199b576001600160a01b039081165f908152600560209081526040808320939094168252919091522060ff90541690565b5050600190565b505050600190565b60601c80156001600160a01b039092161417156119c357565b630c4549ef5f526004601cfd5b906001600160a01b03821615611662576001600160a01b03916119f39190611a0d565b166119fa57565b6339e3563760e11b5f525f60045260245ffd5b5f828152600260205260409020546001600160a01b03168015159392909190829085611b17575b806001600160a01b03841680611af4575b611a5b856107fd845f52600260205260405f2090565b604051957fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef5f80a48195611a8f5750505050565b6001600160a01b0316803b1561023457637699c77f60e01b84526001600160a01b039182166004850152911660248301525f908290604490829084905af18015610ceb57611ae0575b8080806116f0565b8061161a5f611aee93610910565b5f611ad8565b6001600160a01b0385165f90815260036020526040902060018154019055611a45565b611b2081611f9a565b6001600160a01b0382165f90815260036020526040902080545f19019055611a34565b5f818152600260205260409020546001600160a01b0316908115611b65575090565b637e27328960e01b5f5260045260245ffd5b9190916f67363d3d37363d34f03d5260086018f35f526010805ff5918215611bd5575f80918460145261d694825260016034536017601e209482602083519301915af115611bc857813b15611bc857565b6319b991a85f526004601cfd5b63301164255f526004601cfd5b9291926f67363d3d37363d34f03d5260086018f35f526010805ff58015611bd5575f9181839260145261d694835260016034536017601e2095602083519301915af115611bc857813b15611bc857565b638b78c6d819543303611c4157565b6382b429005f526004601cfd5b602460106020939284936014526370a0823160601b5f525afa601f3d11166020510290565b929190600191604051945f5260408114611cd357604114611cb95750506020600160805f805b5afa51913d15611cac575f606052604052565b638baa579f5f526004601cfd5b60805f602093604084816001960135841a87528137611c99565b5060805f6020938385600195013590601b8260ff1c01875235604052848060ff1b0316606052611c99565b601f8211611d0b57505050565b5f5260205f20906020601f840160051c83019310611d43575b601f0160051c01905b818110611d38575050565b5f8155600101611d2d565b9091508190611d24565b91906001600160401b03811161093157611d7381611d6c6008546117e5565b6008611cfe565b5f601f8211600114611db1578190611da193945f92611da6575b50508160011b915f199060031b1c19161790565b600855565b013590505f80611d8d565b60085f52601f198216937ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee3915f5b868110611e165750836001959610611dfd575b505050811b01600855565b01355f19600384901b60f8161c191690555f8080611df2565b90926020600181928686013581550194019101611ddf565b9081602091031261023457516106e8816103da565b6001600160a01b0391821681529116602082015260408101919091526080606082018190526106e8929101906106b2565b90604051600a608082019360a083016040525f8552935b5f190193603082820601855304928315611ea757600a90611e8b565b809350608091030191601f1901918252565b906005810290808204600514901517156108f757600381901c906001600160f81b0319611ee683856118dd565b511691600181018091116108f757611f0260079160ff956118dd565b5160081c60f085901b169290921791161b60fb1c1690565b60ff16601a811015611f415760610160ff81116108f75760f81b6001600160f81b03191690565b60180160ff81116108f75760f81b6001600160f81b03191690565b6c5af43d3d93803e602a57fd5bf360215260145273602c3d8160093d39f33d3d3d3d363d3d37363d735f526035600c5ff5908115611bd5575f602152565b611fac905f52600460205260405f2090565b80546001600160a01b0319169055565b909190611fda6001600160a01b038416801515908161202257501590565b611fe357505050565b6001600160a01b031661200257637e27328960e01b5f5260045260245ffd5b63177e802f60e01b5f526001600160a01b0390911660045260245260445ffd5b6001600160a01b038416811491508115612060575b811561204257501590565b5f858152600460205260409020546001600160a01b03161415919050565b905061206c858461192e565b9061203756fea26469706673582212206c7a36e501c565a57d431bcb57fea1dbb7c9977168c0b14e9f8a475da68900d164736f6c634300081a0033f3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee3000000000000000000000000c5557771673109cab9d05358e1d280fab522597700000000000000000000000000000000156d54b85de04c897356026a5ff2cbc9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000a492d5b29b3191f028d5a9a848911a0000000000000000000000000000000000bf54a35f528d67c62145161b25c55c