[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "ERC721EnumerableForbiddenBatchMint", "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": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "ERC721OutOfBoundsIndex", "type": "error" }, { "inputs": [], "name": "NotOwnerOrAdmin", "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": "TransfersDisabled", "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": false, "internalType": "uint256", "name": "_fromTokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "_toTokenId", "type": "uint256" } ], "name": "BatchMetadataUpdate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "MetadataUpdate", "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": 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": "uint256[]", "name": "tokenIds", "type": "uint256[]" }, { "internalType": "string[]", "name": "uris", "type": "string[]" } ], "name": "batchUpdateTokenUris", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "bool", "name": "shouldBeAdmin", "type": "bool" } ], "name": "editAdmin", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getApproved", "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": "address", "name": "account", "type": "address" } ], "name": "isOwnerOrAdminView", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "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": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "string", "name": "uri", "type": "string" } ], "name": "safeMint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "to", "type": "address[]" }, { "internalType": "string[]", "name": "uris", "type": "string[]" } ], "name": "safeMintBatch", "outputs": [], "stateMutability": "nonpayable", "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": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "bool", "name": "transferable", "type": "bool" } ], "name": "toggleTokenTransferability", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "enabled", "type": "bool" } ], "name": "toggleTransfers", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "tokenByIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "tokenOfOwnerByIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "tokenURI", "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": "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": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "string", "name": "uri", "type": "string" } ], "name": "updateTokenURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
60806040526001600c819055600d805460ff191690911790553480156200002557600080fd5b50336040518060400160405280600d81526020016c4c6f766520426c6f73736f6d7360981b81525060405180604001604052806002815260200161262160f11b8152508160009081620000799190620001c5565b506001620000888282620001c5565b5050506001600160a01b038116620000ba57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b620000c581620000cc565b5062000291565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200014957607f821691505b6020821081036200016a57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001c0576000816000526020600020601f850160051c810160208610156200019b5750805b601f850160051c820191505b81811015620001bc57828155600101620001a7565b5050505b505050565b81516001600160401b03811115620001e157620001e16200011e565b620001f981620001f2845462000134565b8462000170565b602080601f831160018114620002315760008415620002185750858301515b600019600386901b1c1916600185901b178555620001bc565b600085815260208120601f198616915b82811015620002625788860151825594840194600190910190840162000241565b5085821015620002815787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b611ef280620002a16000396000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80636352211e116100f9578063a22cb46511610097578063d204c45e11610071578063d204c45e146103a9578063e25c8c71146103bc578063e985e9c5146103cf578063f2fde38b146103e257600080fd5b8063a22cb46514610370578063b88d4fde14610383578063c87b56dd1461039657600080fd5b8063715018a6116100d3578063715018a61461033c5780638da5cb5b1461034457806393a02ab71461035557806395d89b411461036857600080fd5b80636352211e14610303578063685041581461031657806370a082311461032957600080fd5b806318e97fd11161016657806342842e0e1161014057806342842e0e146102b757806342966c68146102ca5780634f6ccce7146102dd57806358ea2194146102f057600080fd5b806318e97fd11461027e57806323b872dd146102915780632f745c59146102a457600080fd5b8063095ea7b3116101a2578063095ea7b314610231578063133898f31461024657806314fe474b1461025957806318160ddd1461026c57600080fd5b806301ffc9a7146101c957806306fdde03146101f1578063081812fc14610206575b600080fd5b6101dc6101d73660046116ea565b6103f5565b60405190151581526020015b60405180910390f35b6101f9610406565b6040516101e89190611757565b61021961021436600461176a565b610498565b6040516001600160a01b0390911681526020016101e8565b61024461023f36600461179f565b6104c1565b005b61024461025436600461193c565b6104d0565b6101dc6102673660046119fc565b610574565b6008545b6040519081526020016101e8565b61024461028c366004611a17565b6105c1565b61024461029f366004611a54565b6105d3565b6102706102b236600461179f565b610663565b6102446102c5366004611a54565b6106c8565b6102446102d836600461176a565b6106e3565b6102706102eb36600461176a565b6106ef565b6102446102fe366004611a90565b610748565b61021961031136600461176a565b6107d1565b610244610324366004611b2c565b6107dc565b6102706103373660046119fc565b610838565b610244610880565b600b546001600160a01b0316610219565b610244610363366004611b47565b610894565b6101f96108fd565b61024461037e366004611b73565b61090c565b610244610391366004611b9d565b610917565b6101f96103a436600461176a565b61092e565b6102446103b7366004611c19565b610939565b6102446103ca366004611b73565b61096c565b6101dc6103dd366004611c51565b61099f565b6102446103f03660046119fc565b6109cd565b600061040082610a0b565b92915050565b60606000805461041590611c7b565b80601f016020809104026020016040519081016040528092919081815260200182805461044190611c7b565b801561048e5780601f106104635761010080835404028352916020019161048e565b820191906000526020600020905b81548152906001019060200180831161047157829003601f168201915b5050505050905090565b60006104a382610a30565b506000828152600460205260409020546001600160a01b0316610400565b6104cc828233610a69565b5050565b6104d8610a76565b60005b825181101561056f57600c8054600091826104f583611ccb565b91905055905061051e84838151811061051057610510611ce4565b602002602001015182610aa3565b82516001036105505761054b818460008151811061053e5761053e611ce4565b6020026020010151610abd565b610566565b6105668184848151811061053e5761053e611ce4565b506001016104db565b505050565b6000610588600b546001600160a01b031690565b6001600160a01b0316826001600160a01b031614806104005750506001600160a01b03166000908152600e602052604090205460ff1690565b6105c9610a76565b6104cc8282610abd565b6001600160a01b03821661060257604051633250574960e11b8152600060048201526024015b60405180910390fd5b600061060f838333610b0d565b9050836001600160a01b0316816001600160a01b03161461065d576040516364283d7b60e01b81526001600160a01b03808616600483015260248201849052821660448201526064016105f9565b50505050565b600061066e83610838565b821061069f5760405163295f44f760e21b81526001600160a01b0384166004820152602481018390526044016105f9565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b61056f83838360405180602001604052806000815250610917565b6104cc60008233610b0d565b60006106fa60085490565b82106107235760405163295f44f760e21b815260006004820152602481018390526044016105f9565b6008828154811061073657610736611ce4565b90600052602060002001549050919050565b610750610a76565b60005b825181101561056f57815160010361079a5761079583828151811061077a5761077a611ce4565b60200260200101518360008151811061053e5761053e611ce4565b6107c9565b6107c98382815181106107af576107af611ce4565b602002602001015183838151811061053e5761053e611ce4565b600101610753565b600061040082610a30565b600b546001600160a01b031633148015906108075750336000908152600e602052604090205460ff16155b156108255760405163dce3812560e01b815260040160405180910390fd5b600d805460ff1916911515919091179055565b60006001600160a01b038216610864576040516322718ad960e21b8152600060048201526024016105f9565b506001600160a01b031660009081526003602052604090205490565b610888610a76565b6108926000610bbd565b565b600b546001600160a01b031633148015906108bf5750336000908152600e602052604090205460ff16155b156108dd5760405163dce3812560e01b815260040160405180910390fd5b6000918252600f6020526040909120805460ff1916911515919091179055565b60606001805461041590611c7b565b6104cc338383610c0f565b6109228484846105d3565b61065d84848484610cae565b606061040082610dd7565b610941610a76565b600c80546000918261095283611ccb565b9190505590506109628382610aa3565b61056f8183610abd565b610974610a76565b6001600160a01b03919091166000908152600e60205260409020805460ff1916911515919091179055565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b6109d5610a76565b6001600160a01b0381166109ff57604051631e4fbdf760e01b8152600060048201526024016105f9565b610a0881610bbd565b50565b60006001600160e01b03198216632483248360e11b1480610400575061040082610ee0565b6000818152600260205260408120546001600160a01b03168061040057604051637e27328960e01b8152600481018490526024016105f9565b61056f8383836001610f05565b600b546001600160a01b031633146108925760405163118cdaa760e01b81523360048201526024016105f9565b6104cc82826040518060200160405280600081525061100b565b6000828152600a60205260409020610ad58282611d4a565b506040518281527ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce79060200160405180910390a15050565b6000828152600f602052604081205460ff16158015610b2f5750600d5460ff16155b8015610b415750610b3f33610574565b155b15610b5f57604051638574adcf60e01b815260040160405180910390fd5b610bb58484610b76600b546001600160a01b031690565b6001600160a01b0316336001600160a01b03161480610ba45750336000908152600e602052604090205460ff165b610bae5784611022565b6000611022565b949350505050565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216610c4157604051630b61174360e31b81526001600160a01b03831660048201526024016105f9565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383163b1561065d57604051630a85bd0160e11b81526001600160a01b0384169063150b7a0290610cf0903390889087908790600401611e0a565b6020604051808303816000875af1925050508015610d2b575060408051601f3d908101601f19168201909252610d2891810190611e47565b60015b610d94573d808015610d59576040519150601f19603f3d011682016040523d82523d6000602084013e610d5e565b606091505b508051600003610d8c57604051633250574960e11b81526001600160a01b03851660048201526024016105f9565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b14610dd057604051633250574960e11b81526001600160a01b03851660048201526024016105f9565b5050505050565b6060610de282610a30565b506000828152600a602052604081208054610dfc90611c7b565b80601f0160208091040260200160405190810160405280929190818152602001828054610e2890611c7b565b8015610e755780601f10610e4a57610100808354040283529160200191610e75565b820191906000526020600020905b815481529060010190602001808311610e5857829003601f168201915b505050505090506000610e9360408051602081019091526000815290565b90508051600003610ea5575092915050565b815115610ed7578082604051602001610ebf929190611e64565b60405160208183030381529060405292505050919050565b610bb5846110ef565b60006001600160e01b0319821663780e9d6360e01b1480610400575061040082611164565b8080610f1957506001600160a01b03821615155b15610fdb576000610f2984610a30565b90506001600160a01b03831615801590610f555750826001600160a01b0316816001600160a01b031614155b8015610f685750610f66818461099f565b155b15610f915760405163a9fbf51f60e01b81526001600160a01b03841660048201526024016105f9565b8115610fd95783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b5050600090815260046020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b61101583836111b4565b61056f6000848484610cae565b600080611030858585611219565b90506001600160a01b03811661108d5761108884600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b6110b0565b846001600160a01b0316816001600160a01b0316146110b0576110b08185611312565b6001600160a01b0385166110cc576110c7846113a3565b610bb5565b846001600160a01b0316816001600160a01b031614610bb557610bb58585611452565b60606110fa82610a30565b50600061111260408051602081019091526000815290565b90506000815111611132576040518060200160405280600081525061115d565b8061113c846114a2565b60405160200161114d929190611e64565b6040516020818303038152906040525b9392505050565b60006001600160e01b031982166380ac58cd60e01b148061119557506001600160e01b03198216635b5e139f60e01b145b8061040057506301ffc9a760e01b6001600160e01b0319831614610400565b6001600160a01b0382166111de57604051633250574960e11b8152600060048201526024016105f9565b60006111ec83836000610b0d565b90506001600160a01b0381161561056f576040516339e3563760e11b8152600060048201526024016105f9565b6000828152600260205260408120546001600160a01b039081169083161561124657611246818486611535565b6001600160a01b0381161561128457611263600085600080610f05565b6001600160a01b038116600090815260036020526040902080546000190190555b6001600160a01b038516156112b3576001600160a01b0385166000908152600360205260409020805460010190555b60008481526002602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b600061131d83610838565b600083815260076020526040902054909150808214611370576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b6008546000906113b590600190611e93565b600083815260096020526040812054600880549394509092849081106113dd576113dd611ce4565b9060005260206000200154905080600883815481106113fe576113fe611ce4565b600091825260208083209091019290925582815260099091526040808220849055858252812055600880548061143657611436611ea6565b6001900381819060005260206000200160009055905550505050565b6000600161145f84610838565b6114699190611e93565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b606060006114af83611599565b600101905060008167ffffffffffffffff8111156114cf576114cf6117c9565b6040519080825280601f01601f1916602001820160405280156114f9576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461150357509392505050565b611540838383611671565b61056f576001600160a01b03831661156e57604051637e27328960e01b8152600481018290526024016105f9565b60405163177e802f60e01b81526001600160a01b0383166004820152602481018290526044016105f9565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106115d85772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310611604576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061162257662386f26fc10000830492506010015b6305f5e100831061163a576305f5e100830492506008015b612710831061164e57612710830492506004015b60648310611660576064830492506002015b600a83106104005760010192915050565b60006001600160a01b03831615801590610bb55750826001600160a01b0316846001600160a01b031614806116ab57506116ab848461099f565b80610bb55750506000908152600460205260409020546001600160a01b03908116911614919050565b6001600160e01b031981168114610a0857600080fd5b6000602082840312156116fc57600080fd5b813561115d816116d4565b60005b8381101561172257818101518382015260200161170a565b50506000910152565b60008151808452611743816020860160208601611707565b601f01601f19169290920160200192915050565b60208152600061115d602083018461172b565b60006020828403121561177c57600080fd5b5035919050565b80356001600160a01b038116811461179a57600080fd5b919050565b600080604083850312156117b257600080fd5b6117bb83611783565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611808576118086117c9565b604052919050565b600067ffffffffffffffff82111561182a5761182a6117c9565b5060051b60200190565b600067ffffffffffffffff83111561184e5761184e6117c9565b611861601f8401601f19166020016117df565b905082815283838301111561187557600080fd5b828260208301376000602084830101529392505050565b600082601f83011261189d57600080fd5b61115d83833560208501611834565b600082601f8301126118bd57600080fd5b813560206118d26118cd83611810565b6117df565b82815260059290921b840181019181810190868411156118f157600080fd5b8286015b8481101561193157803567ffffffffffffffff8111156119155760008081fd5b6119238986838b010161188c565b8452509183019183016118f5565b509695505050505050565b6000806040838503121561194f57600080fd5b823567ffffffffffffffff8082111561196757600080fd5b818501915085601f83011261197b57600080fd5b8135602061198b6118cd83611810565b82815260059290921b840181019181810190898411156119aa57600080fd5b948201945b838610156119cf576119c086611783565b825294820194908201906119af565b965050860135925050808211156119e557600080fd5b506119f2858286016118ac565b9150509250929050565b600060208284031215611a0e57600080fd5b61115d82611783565b60008060408385031215611a2a57600080fd5b82359150602083013567ffffffffffffffff811115611a4857600080fd5b6119f28582860161188c565b600080600060608486031215611a6957600080fd5b611a7284611783565b9250611a8060208501611783565b9150604084013590509250925092565b60008060408385031215611aa357600080fd5b823567ffffffffffffffff80821115611abb57600080fd5b818501915085601f830112611acf57600080fd5b81356020611adf6118cd83611810565b82815260059290921b84018101918181019089841115611afe57600080fd5b948201945b838610156119cf57853582529482019490820190611b03565b8035801515811461179a57600080fd5b600060208284031215611b3e57600080fd5b61115d82611b1c565b60008060408385031215611b5a57600080fd5b82359150611b6a60208401611b1c565b90509250929050565b60008060408385031215611b8657600080fd5b611b8f83611783565b9150611b6a60208401611b1c565b60008060008060808587031215611bb357600080fd5b611bbc85611783565b9350611bca60208601611783565b925060408501359150606085013567ffffffffffffffff811115611bed57600080fd5b8501601f81018713611bfe57600080fd5b611c0d87823560208401611834565b91505092959194509250565b60008060408385031215611c2c57600080fd5b611c3583611783565b9150602083013567ffffffffffffffff811115611a4857600080fd5b60008060408385031215611c6457600080fd5b611c6d83611783565b9150611b6a60208401611783565b600181811c90821680611c8f57607f821691505b602082108103611caf57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600060018201611cdd57611cdd611cb5565b5060010190565b634e487b7160e01b600052603260045260246000fd5b601f82111561056f576000816000526020600020601f850160051c81016020861015611d235750805b601f850160051c820191505b81811015611d4257828155600101611d2f565b505050505050565b815167ffffffffffffffff811115611d6457611d646117c9565b611d7881611d728454611c7b565b84611cfa565b602080601f831160018114611dad5760008415611d955750858301515b600019600386901b1c1916600185901b178555611d42565b600085815260208120601f198616915b82811015611ddc57888601518255948401946001909101908401611dbd565b5085821015611dfa5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611e3d9083018461172b565b9695505050505050565b600060208284031215611e5957600080fd5b815161115d816116d4565b60008351611e76818460208801611707565b835190830190611e8a818360208801611707565b01949350505050565b8181038181111561040057610400611cb5565b634e487b7160e01b600052603160045260246000fdfea26469706673582212201cc2393dfd9ab358fe8d61b7c7eae77760906f01a952908459d6aaae9cf3105464736f6c63430008170033