[ { "inputs": [ { "internalType": "contract ENS", "name": "_ens", "type": "address" }, { "internalType": "contract NameWrapper", "name": "_nameWrapper", "type": "address" }, { "internalType": "bytes32", "name": "_rootNode", "type": "bytes32" }, { "internalType": "string", "name": "baseTokenURI", "type": "string" }, { "internalType": "address", "name": "_agiTokenAddress", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "newAGITokenAddress", "type": "address" } ], "name": "AGITokenUpdated", "type": "event" }, { "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": "newBasePrice", "type": "uint256" } ], "name": "BasePriceUpdated", "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": "string", "name": "newContractURI", "type": "string" } ], "name": "ContractURIUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "newDiscountNFT", "type": "address" } ], "name": "DiscountNFTUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "ruleId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "discountPercentage", "type": "uint256" }, { "indexed": false, "internalType": "bool", "name": "isCompound", "type": "bool" } ], "name": "DiscountRuleAdded", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "ruleId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "discountPercentage", "type": "uint256" } ], "name": "DiscountRuleUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "newENS", "type": "address" } ], "name": "ENSUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "bytes32", "name": "newMerkleRoot", "type": "bytes32" } ], "name": "MerkleRootUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "MetadataUpdate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "string", "name": "uri", "type": "string" } ], "name": "MetadataUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "ruleId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "nftAddress", "type": "address" } ], "name": "NFTAddedToRule", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "ruleId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "nftAddress", "type": "address" } ], "name": "NFTRemovedFromRule", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "contract NameWrapper", "name": "oldAddress", "type": "address" }, { "indexed": false, "internalType": "contract NameWrapper", "name": "newAddress", "type": "address" } ], "name": "NameWrapperAddressUpdated", "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": false, "internalType": "address", "name": "claimant", "type": "address" }, { "indexed": false, "internalType": "string", "name": "subdomain", "type": "string" } ], "name": "OwnershipVerified", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Paused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "string", "name": "action", "type": "string" } ], "name": "RecoveryInitiated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "node", "type": "bytes32" }, { "indexed": false, "internalType": "address", "name": "resolver", "type": "address" } ], "name": "ResolverChecked", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "node", "type": "bytes32" }, { "indexed": false, "internalType": "address", "name": "newResolver", "type": "address" } ], "name": "ResolverUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "newRootNode", "type": "bytes32" } ], "name": "RootNodeUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "recipient", "type": "address" }, { "indexed": false, "internalType": "uint96", "name": "feeBasisPoints", "type": "uint96" } ], "name": "RoyaltyInfoUpdated", "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" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Unpaused", "type": "event" }, { "inputs": [ { "internalType": "uint256", "name": "discountPercentage", "type": "uint256" }, { "internalType": "bool", "name": "isCompound", "type": "bool" } ], "name": "addDiscountRule", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "ruleId", "type": "uint256" }, { "internalType": "address", "name": "nftAddress", "type": "address" } ], "name": "addNFTToRule", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "agiToken", "outputs": [ { "internalType": "contract IERC20", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "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": [], "name": "basePrice", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "startTokenId", "type": "uint256" }, { "internalType": "uint256", "name": "endTokenId", "type": "uint256" }, { "internalType": "string", "name": "newBaseURI", "type": "string" } ], "name": "batchUpdateTokenURIs", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "claimant", "type": "address" } ], "name": "calculatePrice", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "contractURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "ens", "outputs": [ { "internalType": "contract ENS", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getApproved", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "ruleId", "type": "uint256" } ], "name": "getDiscountPercentage", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "ruleId", "type": "uint256" } ], "name": "getQualifyingNFTs", "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": "claimant", "type": "address" }, { "internalType": "uint256", "name": "ruleId", "type": "uint256" } ], "name": "isEligibleForDiscount", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maxDiscountCap", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maxMintAmount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "merkleRoot", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "subdomain", "type": "string" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "bytes32[]", "name": "proof", "type": "bytes32[]" } ], "name": "mint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "nameWrapper", "outputs": [ { "internalType": "contract NameWrapper", "name": "", "type": "address" } ], "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": "pause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "paused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "ruleId", "type": "uint256" }, { "internalType": "address", "name": "nftAddress", "type": "address" } ], "name": "removeNFTFromRule", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "rootNode", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "salePrice", "type": "uint256" } ], "name": "royaltyInfo", "outputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "ruleCount", "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": "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": "_newAGIToken", "type": "address" } ], "name": "setAGITokenAddress", "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": "string", "name": "uri", "type": "string" } ], "name": "setBaseTokenURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "newContractURI", "type": "string" } ], "name": "setContractURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newCap", "type": "uint256" } ], "name": "setMaxDiscountCap", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_max", "type": "uint256" } ], "name": "setMaxMintAmount", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "_merkleRoot", "type": "bytes32" } ], "name": "setMerkleRoot", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "contract NameWrapper", "name": "_nameWrapper", "type": "address" } ], "name": "setNameWrapperAddress", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "string", "name": "_tokenURI", "type": "string" } ], "name": "setTokenURI", "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" } ], "name": "tokenURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "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": [], "name": "unpause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_newBasePrice", "type": "uint256" } ], "name": "updateBasePrice", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "ruleId", "type": "uint256" }, { "internalType": "uint256", "name": "newPercentage", "type": "uint256" } ], "name": "updateDiscountPercentage", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newENS", "type": "address" } ], "name": "updateENSAddress", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "node", "type": "bytes32" }, { "internalType": "address", "name": "newResolver", "type": "address" } ], "name": "updateResolverForNode", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "_rootNode", "type": "bytes32" } ], "name": "updateRootNode", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint96", "name": "feeBasisPoints", "type": "uint96" } ], "name": "updateRoyaltyInfo", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "string", "name": "newTokenURI", "type": "string" } ], "name": "updateTokenURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "withdraw", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
60806040526000600d55680d8d726b7177a80000601455600a60155560586016553480156200002d57600080fd5b506040516200438938038062004389833981016040819052620000509162000307565b6040518060400160405280600c81526020016b1051d248149a5b99c813919560a21b8152506040518060400160405280600781526020016641474952696e6760c81b8152508160029081620000a69190620004b3565b506003620000b58282620004b3565b505050620000d2620000cc6200016b60201b60201c565b6200016f565b6001600a55600b805460ff19169055600f80546001600160a01b038088166001600160a01b031992831617909255601080549287169290911691909117905560118390556012620001248382620004b3565b50600e80546001600160a01b0319166001600160a01b03831617905562000160620001576009546001600160a01b031690565b6103e8620001c1565b50505050506200057f565b3390565b600980546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6127106001600160601b0382161115620002355760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646044820152692073616c65507269636560b01b60648201526084015b60405180910390fd5b6001600160a01b0382166200028d5760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c69642072656365697665720000000000000060448201526064016200022c565b604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600055565b6001600160a01b0381168114620002dc57600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b80516200030281620002c6565b919050565b600080600080600060a086880312156200032057600080fd5b85516200032d81620002c6565b809550506020808701516200034281620002c6565b6040880151606089015191965094506001600160401b03808211156200036757600080fd5b818901915089601f8301126200037c57600080fd5b815181811115620003915762000391620002df565b604051601f8201601f19908116603f01168101908382118183101715620003bc57620003bc620002df565b816040528281528c86848701011115620003d557600080fd5b600093505b82841015620003f95784840186015181850187015292850192620003da565b60008684830101528097505050505050506200041860808701620002f5565b90509295509295909350565b600181811c908216806200043957607f821691505b6020821081036200045a57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620004ae57600081815260208120601f850160051c81016020861015620004895750805b601f850160051c820191505b81811015620004aa5782815560010162000495565b5050505b505050565b81516001600160401b03811115620004cf57620004cf620002df565b620004e781620004e0845462000424565b8462000460565b602080601f8311600181146200051f5760008415620005065750858301515b600019600386901b1c1916600185901b178555620004aa565b600085815260208120601f198616915b8281101562000550578886015182559484019460019091019084016200052f565b50858210156200056f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b613dfa806200058f6000396000f3fe608060405234801561001057600080fd5b506004361061035d5760003560e01c806370a08231116101d3578063a8e5fbc011610104578063e8a3d485116100a2578063f2fde38b1161007c578063f2fde38b14610738578063f6bcf6331461074b578063faff50a814610754578063fd5baa881461075d57600080fd5b8063e8a3d485146106d4578063e985e9c5146106dc578063edff63771461071857600080fd5b8063c5816bce116100de578063c5816bce1461069c578063c7876ea4146106af578063c87b56dd146106b8578063cfcd6441146106cb57600080fd5b8063a8e5fbc014610663578063afb07a0214610676578063b88d4fde1461068957600080fd5b8063927cf6441161017157806397e303bb1161014b57806397e303bb146106175780639f2e41851461062a578063a22cb4651461063d578063a2c254d61461065057600080fd5b8063927cf644146105e9578063938e3d7b146105fc57806395d89b411461060f57600080fd5b80637cb64759116101ad5780637cb64759146105aa5780638121f4a0146105bd5780638456cb59146105d05780638da5cb5b146105d857600080fd5b806370a082311461057c578063715018a61461058f5780637191f7951461059757600080fd5b80632eb4a7ab116102ad57806342842e0e1161024b5780635c975abb116102255780635c975abb1461053857806361bc28e0146105435780636352211e14610556578063658bb5431461056957600080fd5b806342842e0e146104ff578063540866de1461051257806356add2e41461052557600080fd5b80633ccfd60b116102875780633ccfd60b146104c95780633f15457f146104d15780633f4ba83a146104e4578063411c4442146104ec57600080fd5b80632eb4a7ab1461049a57806330176e13146104a3578063327b11ed146104b657600080fd5b806318e97fd11161031a57806323b872dd116102f457806323b872dd1461042f5780632a55205a146104425780632a96305f146104745780632d927c001461048757600080fd5b806318e97fd1146103f25780631dc9b1c114610405578063239c70ae1461042657600080fd5b806301ffc9a71461036257806306fdde031461038a578063081812fc1461039f578063088a4ed0146103ca578063095ea7b3146103df578063162094c4146103f2575b600080fd5b6103756103703660046133ae565b610770565b60405190151581526020015b60405180910390f35b610392610781565b604051610381919061341b565b6103b26103ad36600461342e565b610813565b6040516001600160a01b039091168152602001610381565b6103dd6103d836600461342e565b61083a565b005b6103dd6103ed36600461345c565b610847565b6103dd610400366004613549565b610961565b610418610413366004613590565b610a37565b604051908152602001610381565b61041860155481565b6103dd61043d3660046135ad565b610b10565b6104556104503660046135ee565b610b41565b604080516001600160a01b039093168352602083019190915201610381565b6103dd610482366004613610565b610bed565b6103dd6104953660046136ae565b610ec2565b61041860175481565b6103dd6104b13660046136de565b6110a1565b6103dd6104c4366004613590565b6110f2565b6103dd6111b9565b600f546103b2906001600160a01b031681565b6103dd6112e7565b6103dd6104fa366004613713565b6112f9565b6103dd61050d3660046135ad565b61135a565b6103dd6105203660046136ae565b611375565b61041861053336600461342e565b611461565b600b5460ff16610375565b61037561055136600461345c565b61149b565b6103b261056436600461342e565b61155e565b600e546103b2906001600160a01b031681565b61041861058a366004613590565b6115be565b6103dd611644565b6103dd6105a53660046136ae565b611656565b6103dd6105b836600461342e565b6116df565b6103dd6105cb366004613590565b611723565b6103dd6117cf565b6009546001600160a01b03166103b2565b6103dd6105f7366004613590565b6117df565b6103dd61060a3660046136de565b611902565b610392611946565b6103dd6106253660046135ee565b611955565b6103dd61063836600461342e565b6119d3565b6103dd61064b36600461375b565b611a0e565b6103dd61065e366004613789565b611a1d565b6010546103b2906001600160a01b031681565b6103dd6106843660046137ae565b611aa5565b6103dd6106973660046137fe565b611bb7565b6103dd6106aa36600461342e565b611be9565b61041860145481565b6103926106c636600461342e565b611c47565b61041860165481565b610392611cfe565b6103756106ea36600461387e565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b61072b61072636600461342e565b611d0d565b60405161038191906138ac565b6103dd610746366004613590565b611dee565b610418601a5481565b61041860115481565b6103dd61076b36600461342e565b611e64565b600061077b82611ea1565b92915050565b606060028054610790906138f9565b80601f01602080910402602001604051908101604052809291908181526020018280546107bc906138f9565b80156108095780601f106107de57610100808354040283529160200191610809565b820191906000526020600020905b8154815290600101906020018083116107ec57829003601f168201915b5050505050905090565b600061081e82611eac565b506000908152600660205260409020546001600160a01b031690565b610842611f0b565b601555565b60006108528261155e565b9050806001600160a01b0316836001600160a01b0316036108c45760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b03821614806108e057506108e081336106ea565b6109525760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c00000060648201526084016108bb565b61095c8383611f65565b505050565b610969611f0b565b6000828152600460205260409020546001600160a01b03166109e25760405162461bcd60e51b815260206004820152602c60248201527f4552433732314d657461646174613a2055524920736574206f66206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016108bb565b60008281526018602052604090206109fa8282613981565b50817f459157ba24c7ab9878b165ef465fa6ae2ab42bcd8445f576be378768b0c4730982604051610a2b919061341b565b60405180910390a25050565b601454600090818060015b601a548111610ac357610a55868261149b565b15610ab1576000818152601960205260409020600381015460ff1615610a9b576002810154610a849084613a57565b9250601654831115610a965760165492505b610aaf565b8381600201541115610aaf57806002015493505b505b80610abb81613a6a565b915050610a42565b506000828211610ad35782610ad5565b815b9050601654811115610ae657506016545b6064610af28286613a83565b610afc9190613a9a565b610b069085613abc565b9695505050505050565b610b1a3382611fd3565b610b365760405162461bcd60e51b81526004016108bb90613acf565b61095c838383612052565b60008281526001602090815260408083208151808301909252546001600160a01b038116808352600160a01b9091046001600160601b0316928201929092528291610bb65750604080518082019091526000546001600160a01b0381168252600160a01b90046001600160601b031660208201525b602081015160009061271090610bd5906001600160601b031687613a83565b610bdf9190613a9a565b915196919550909350505050565b610bf56121b6565b610bfd6121fc565b600083118015610c0f57506015548311155b610c515760405162461bcd60e51b8152602060048201526013602482015272125b9d985b1a59081b5a5b9d08185b5bdd5b9d606a1b60448201526064016108bb565b610c5d33858484612255565b610cbb5760405162461bcd60e51b815260206004820152602960248201527f556e617574686f72697a656420737562646f6d61696e206f72206e6f742077686044820152681a5d195b1a5cdd195960ba1b60648201526084016108bb565b6000610cc633610a37565b600e549091506001600160a01b03166323b872dd3330610ce68886613a83565b6040516001600160e01b031960e086901b1681526001600160a01b03938416600482015292909116602483015260448201526064016020604051808303816000875af1158015610d3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5e9190613b1c565b610d9b5760405162461bcd60e51b815260206004820152600e60248201526d14185e5b595b9d0819985a5b195960921b60448201526064016108bb565b60005b84811015610eb057600d8054906000610db683613a6a565b9190505550610dc733600d54612720565b600d5460009081526018602052604081208054829190610de6906138f9565b905011610df4576012610e06565b600d5460009081526018602052604090205b8054610e11906138f9565b80601f0160208091040260200160405190810160405280929190818152602001828054610e3d906138f9565b8015610e8a5780601f10610e5f57610100808354040283529160200191610e8a565b820191906000526020600020905b815481529060010190602001808311610e6d57829003601f168201915b50505050509050610e9d600d548261273a565b5080610ea881613a6a565b915050610d9e565b5050610ebc6001600a55565b50505050565b610eca611f0b565b6001600160a01b0381163b610f215760405162461bcd60e51b815260206004820152601f60248201527f4e6577207265736f6c766572206d757374206265206120636f6e74726163740060448201526064016108bb565b6040516301ffc9a760e01b8152631d9dabef60e11b600482015281906001600160a01b038216906301ffc9a790602401602060405180830381865afa158015610f6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f929190613b1c565b610ff75760405162461bcd60e51b815260206004820152603060248201527f4e6577207265736f6c76657220646f6573206e6f7420737570706f727420726560448201526f71756972656420696e7465726661636560801b60648201526084016108bb565b600f54604051630c4b7b8560e11b8152600481018590526001600160a01b03848116602483015290911690631896f70a90604401600060405180830381600087803b15801561104557600080fd5b505af1158015611059573d6000803e3d6000fd5b50506040516001600160a01b03851681528592507fbc43e5c368531ccb5868ce157f28d7fdf68e0f969ddd018e0c922d0720add29091506020015b60405180910390a2505050565b6110a9611f0b565b60126110b58282613981565b5060007f459157ba24c7ab9878b165ef465fa6ae2ab42bcd8445f576be378768b0c47309826040516110e7919061341b565b60405180910390a250565b6110fa611f0b565b6001600160a01b0381166111505760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964204e616d65577261707065722061646472657373000000000060448201526064016108bb565b601054604080516001600160a01b03928316815291831660208301527f9f5cb852b0e699be627b4f48a783bd8312c52ccda6c78833ab3e29353f35144a910160405180910390a1601080546001600160a01b0319166001600160a01b0392909216919091179055565b6111c1611f0b565b600e546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561120a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061122e9190613b39565b600e5460405163a9059cbb60e01b8152336004820152602481018390529192506001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015611280573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a49190613b1c565b6112e45760405162461bcd60e51b815260206004820152601160248201527015da5d1a191c985dd85b0819985a5b1959607a1b60448201526064016108bb565b50565b6112ef611f0b565b6112f76127fe565b565b611301611f0b565b61130b8282612850565b604080516001600160a01b03841681526001600160601b03831660208201527fae1d656a1268648b04ffa79c1416f05879338ae295aae3234d8db217356a1c6291015b60405180910390a15050565b61095c83838360405180602001604052806000815250611bb7565b61137d611f0b565b6001600160a01b0381161580159061139e57506001600160a01b0381163b15155b6113e05760405162461bcd60e51b8152602060048201526013602482015272496e76616c6964204e4654206164647265737360681b60448201526064016108bb565b6000821180156113f25750601a548211155b61140e5760405162461bcd60e51b81526004016108bb90613b52565b6000828152601960205260409020611426908261294d565b506040516001600160a01b0382169083907fe9b6cb28b5f5195da16381374048f5d47414a06611a8173aef0ea014fe65c82090600090a35050565b6000601a548211156114855760405162461bcd60e51b81526004016108bb90613b52565b5060009081526019602052604090206002015490565b60008181526019602052604081206001825b6114b683612962565b811015611555576114c7838261296c565b6040516370a0823160e01b81526001600160a01b03888116600483015291909116906370a0823190602401602060405180830381865afa15801561150f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115339190613b39565b6000036115435760009150611555565b8061154d81613a6a565b9150506114ad565b50949350505050565b6000818152600460205260408120546001600160a01b03168061077b5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016108bb565b60006001600160a01b0382166116285760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b60648201526084016108bb565b506001600160a01b031660009081526005602052604090205490565b61164c611f0b565b6112f76000612978565b61165e611f0b565b6000821180156116705750601a548211155b61168c5760405162461bcd60e51b81526004016108bb90613b52565b60008281526019602052604090206116a490826129ca565b506040516001600160a01b0382169083907f6239beacc98f9baf2b83e625fa4302bba74d5daa273adc2c9a152eeb1ba5790c90600090a35050565b6116e7611f0b565b60178190556040518181527f90004c04698bc3322499a575ed3752dd4abf33e0a7294c06a787a0fe01bea941906020015b60405180910390a150565b61172b611f0b565b6001600160a01b0381166117815760405162461bcd60e51b815260206004820152601960248201527f496e76616c69642041474920746f6b656e20616464726573730000000000000060448201526064016108bb565b600e80546001600160a01b0319166001600160a01b0383169081179091556040519081527f7a0bf4bc2afa7783df2f53cba2be705e461ee5ab5a076929ea554680e3bd7bdb90602001611718565b6117d7611f0b565b6112f76129df565b6117e7611f0b565b6001600160a01b03811661184c5760405162461bcd60e51b815260206004820152602660248201527f454e5320616464726573732063616e6e6f7420626520746865207a65726f206160448201526564647265737360d01b60648201526084016108bb565b6001600160a01b0381163b6118b85760405162461bcd60e51b815260206004820152602c60248201527f50726f76696465642061646472657373206d7573742062652061206465706c6f60448201526b1e59590818dbdb9d1c9858dd60a21b60648201526084016108bb565b600f80546001600160a01b0319166001600160a01b0383169081179091556040517f35da7d5b17a3e94ad67aae68a72884813bec68743ef28a470033a49e513b171d90600090a250565b61190a611f0b565b60136119168282613981565b507f905d981207a7d0b6c62cc46ab0be2a076d0298e4a86d0ab79882dbd01ac3737881604051611718919061341b565b606060038054610790906138f9565b61195d611f0b565b60008211801561196f5750601a548211155b61198b5760405162461bcd60e51b81526004016108bb90613b52565b600082815260196020526040908190206002018290555182907f91d0ae24c62560cf41189ab8f2b5490450075877d12cb57d4ab23682168e33ab90610a2b9084815260200190565b6119db611f0b565b601181905560405181907f90d35c558fe7c4c7d4a6b47100735e08548f694166491755e47c0923ecc1e7df90600090a250565b611a19338383612a1c565b5050565b611a25611f0b565b6001601a6000828254611a389190613a57565b9091555050601a80546000908152601960209081526040918290206002810186905560038101805460ff1916861515908117909155935483518781529283019490945292917f22f030675428b6367af7210169168cc82b711b468197a540f16c97a33227f6ed9101611094565b611aad611f0b565b600083118015611abd5750828210155b611b025760405162461bcd60e51b8152602060048201526016602482015275496e76616c696420746f6b656e2049442072616e676560501b60448201526064016108bb565b600d54821115611b605760405162461bcd60e51b8152602060048201526024808201527f456e6420746f6b656e20494420657863656564732063757272656e74206d6178604482015263696d756d60e01b60648201526084016108bb565b825b828111611b8557611b73818361273a565b80611b7d81613a6a565b915050611b62565b5060007f459157ba24c7ab9878b165ef465fa6ae2ab42bcd8445f576be378768b0c4730982604051611094919061341b565b611bc13383611fd3565b611bdd5760405162461bcd60e51b81526004016108bb90613acf565b610ebc84848484612aea565b611bf1611f0b565b6064811115611c425760405162461bcd60e51b815260206004820152601860248201527f436170206d7573742062652031303025206f72206c657373000000000000000060448201526064016108bb565b601655565b600081815260186020526040812080546060929190611c65906138f9565b80601f0160208091040260200160405190810160405280929190818152602001828054611c91906138f9565b8015611cde5780601f10611cb357610100808354040283529160200191611cde565b820191906000526020600020905b815481529060010190602001808311611cc157829003601f168201915b50505050509050600081511161077b57611cf783612b1d565b9392505050565b606060138054610790906138f9565b6060601a54821115611d315760405162461bcd60e51b81526004016108bb90613b52565b600082815260196020526040812090611d4982612962565b67ffffffffffffffff811115611d6157611d61613488565b604051908082528060200260200182016040528015611d8a578160200160208202803683370190505b50905060005b611d9983612962565b811015611de657611daa838261296c565b828281518110611dbc57611dbc613b7b565b6001600160a01b039092166020928302919091019091015280611dde81613a6a565b915050611d90565b509392505050565b611df6611f0b565b6001600160a01b038116611e5b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108bb565b6112e481612978565b611e6c611f0b565b60148190556040518181527ffab5bcbec79a8b5888e114fd4b378427aa58d9b237d85056f0ee5b3ea57df8c590602001611718565b600061077b82612c25565b6000818152600460205260409020546001600160a01b03166112e45760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016108bb565b6009546001600160a01b031633146112f75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108bb565b600081815260066020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611f9a8261155e565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080611fdf8361155e565b9050806001600160a01b0316846001600160a01b0316148061202657506001600160a01b0380821660009081526007602090815260408083209388168352929052205460ff165b8061204a5750836001600160a01b031661203f84610813565b6001600160a01b0316145b949350505050565b826001600160a01b03166120658261155e565b6001600160a01b03161461208b5760405162461bcd60e51b81526004016108bb90613b91565b6001600160a01b0382166120ed5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016108bb565b826001600160a01b03166121008261155e565b6001600160a01b0316146121265760405162461bcd60e51b81526004016108bb90613b91565b600081815260066020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260058552838620805460001901905590871680865283862080546001019055868652600490945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600b5460ff16156112f75760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016108bb565b6002600a540361224e5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108bb565b6002600a55565b6040516bffffffffffffffffffffffff19606086901b16602082015260009081906034016040516020818303038152906040528051906020012090506122d560175482868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929493925050612c4a9050565b1561231d577f1eb5ff081300af42d8bf6abb0233e209c85662220454f1e8655fc3e7e7d846f6868660405161230b929190613bd6565b60405180910390a1600191505061204a565b60006011548680519060200120604051602001612344929190918252602082015260400190565b60408051808303601f190181529082905280516020909101206010546331a9108f60e11b8352600483018290529092506001600160a01b031690636352211e90602401602060405180830381865afa9250505080156123c0575060408051601f3d908101601f191682019092526123bd91810190613bfa565b60015b61248e576123cc613c17565b806308c379a00361241657506123e0613c33565b806123eb5750612418565b600080516020613da583398151915281604051612408919061341b565b60405180910390a1506124ee565b505b600080516020613da58339815191526040516124819060208082526033908201527f4e616d65577261707065722063616c6c206661696c656420776974686f757420604082015272309039b832b1b4b334b2b2103932b0b9b7b71760691b606082015260800190565b60405180910390a16124ee565b876001600160a01b0316816001600160a01b0316036124ec577f1eb5ff081300af42d8bf6abb0233e209c85662220454f1e8655fc3e7e7d846f688886040516124d8929190613bd6565b60405180910390a16001935050505061204a565b505b600f54604051630178b8bf60e01b8152600481018390526000916001600160a01b031690630178b8bf90602401602060405180830381865afa158015612538573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061255c9190613bfa565b90506001600160a01b038116156126af57604051631d9dabef60e11b81526004810183905281906001600160a01b03821690633b3b57de90602401602060405180830381865afa9250505080156125d0575060408051601f3d908101601f191682019092526125cd91810190613bfa565b60015b61264757600080516020613da583398151915260405161263a9060208082526030908201527f5265736f6c7665722063616c6c206661696c656420776974686f75742061207360408201526f3832b1b4b334b2b2103932b0b9b7b71760811b606082015260800190565b60405180910390a16126a9565b896001600160a01b0316816001600160a01b0316036126a7577f1eb5ff081300af42d8bf6abb0233e209c85662220454f1e8655fc3e7e7d846f68a8a604051612691929190613bd6565b60405180910390a160019550505050505061204a565b505b50612712565b600080516020613da58339815191526040516127099060208082526024908201527f5265736f6c7665722061646472657373206e6f7420666f756e6420666f72206e60408201526337b2329760e11b606082015260800190565b60405180910390a15b506000979650505050505050565b611a19828260405180602001604052806000815250612c60565b6000828152600460205260409020546001600160a01b03166127b55760405162461bcd60e51b815260206004820152602e60248201527f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60448201526d32bc34b9ba32b73a103a37b5b2b760911b60648201526084016108bb565b60008281526008602052604090206127cd8282613981565b506040518281527ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce79060200161134e565b612806612c93565b600b805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6127106001600160601b03821611156128be5760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646044820152692073616c65507269636560b01b60648201526084016108bb565b6001600160a01b0382166129145760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c69642072656365697665720000000000000060448201526064016108bb565b604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600055565b6000611cf7836001600160a01b038416612cdc565b600061077b825490565b6000611cf78383612d2b565b600980546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000611cf7836001600160a01b038416612d55565b6129e76121b6565b600b805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586128333390565b816001600160a01b0316836001600160a01b031603612a7d5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016108bb565b6001600160a01b03838116600081815260076020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b612af5848484612052565b612b0184848484612e48565b610ebc5760405162461bcd60e51b81526004016108bb90613cbd565b6060612b2882611eac565b60008281526008602052604081208054612b41906138f9565b80601f0160208091040260200160405190810160405280929190818152602001828054612b6d906138f9565b8015612bba5780601f10612b8f57610100808354040283529160200191612bba565b820191906000526020600020905b815481529060010190602001808311612b9d57829003601f168201915b505050505090506000612bd860408051602081019091526000815290565b90508051600003612bea575092915050565b815115612c1c578082604051602001612c04929190613d0f565b60405160208183030381529060405292505050919050565b61204a84612f46565b60006001600160e01b03198216632483248360e11b148061077b575061077b82612fb9565b600082612c578584612ff9565b14949350505050565b612c6a838361303e565b612c776000848484612e48565b61095c5760405162461bcd60e51b81526004016108bb90613cbd565b600b5460ff166112f75760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016108bb565b6000818152600183016020526040812054612d235750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561077b565b50600061077b565b6000826000018281548110612d4257612d42613b7b565b9060005260206000200154905092915050565b60008181526001830160205260408120548015612e3e576000612d79600183613abc565b8554909150600090612d8d90600190613abc565b9050818114612df2576000866000018281548110612dad57612dad613b7b565b9060005260206000200154905080876000018481548110612dd057612dd0613b7b565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612e0357612e03613d3e565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061077b565b600091505061077b565b60006001600160a01b0384163b15612f3e57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612e8c903390899088908890600401613d54565b6020604051808303816000875af1925050508015612ec7575060408051601f3d908101601f19168201909252612ec491810190613d87565b60015b612f24573d808015612ef5576040519150601f19603f3d011682016040523d82523d6000602084013e612efa565b606091505b508051600003612f1c5760405162461bcd60e51b81526004016108bb90613cbd565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061204a565b50600161204a565b6060612f5182611eac565b6000612f6860408051602081019091526000815290565b90506000815111612f885760405180602001604052806000815250611cf7565b80612f92846131c9565b604051602001612fa3929190613d0f565b6040516020818303038152906040529392505050565b60006001600160e01b031982166380ac58cd60e01b1480612fea57506001600160e01b03198216635b5e139f60e01b145b8061077b575061077b8261325c565b600081815b8451811015611de65761302a8286838151811061301d5761301d613b7b565b6020026020010151613291565b91508061303681613a6a565b915050612ffe565b6001600160a01b0382166130945760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016108bb565b6000818152600460205260409020546001600160a01b0316156130f95760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016108bb565b6000818152600460205260409020546001600160a01b03161561315e5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016108bb565b6001600160a01b038216600081815260056020908152604080832080546001019055848352600490915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b606060006131d6836132c0565b600101905060008167ffffffffffffffff8111156131f6576131f6613488565b6040519080825280601f01601f191660200182016040528015613220576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461322a57509392505050565b60006001600160e01b0319821663152a902d60e11b148061077b57506301ffc9a760e01b6001600160e01b031983161461077b565b60008183106132ad576000828152602084905260409020611cf7565b6000838152602083905260409020611cf7565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106132ff5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef8100000000831061332b576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061334957662386f26fc10000830492506010015b6305f5e1008310613361576305f5e100830492506008015b612710831061337557612710830492506004015b60648310613387576064830492506002015b600a831061077b5760010192915050565b6001600160e01b0319811681146112e457600080fd5b6000602082840312156133c057600080fd5b8135611cf781613398565b60005b838110156133e65781810151838201526020016133ce565b50506000910152565b600081518084526134078160208601602086016133cb565b601f01601f19169290920160200192915050565b602081526000611cf760208301846133ef565b60006020828403121561344057600080fd5b5035919050565b6001600160a01b03811681146112e457600080fd5b6000806040838503121561346f57600080fd5b823561347a81613447565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b601f8201601f1916810167ffffffffffffffff811182821017156134c4576134c4613488565b6040525050565b600067ffffffffffffffff8311156134e5576134e5613488565b6040516134fc601f8501601f19166020018261349e565b80915083815284848401111561351157600080fd5b83836020830137600060208583010152509392505050565b600082601f83011261353a57600080fd5b611cf7838335602085016134cb565b6000806040838503121561355c57600080fd5b82359150602083013567ffffffffffffffff81111561357a57600080fd5b61358685828601613529565b9150509250929050565b6000602082840312156135a257600080fd5b8135611cf781613447565b6000806000606084860312156135c257600080fd5b83356135cd81613447565b925060208401356135dd81613447565b929592945050506040919091013590565b6000806040838503121561360157600080fd5b50508035926020909101359150565b6000806000806060858703121561362657600080fd5b843567ffffffffffffffff8082111561363e57600080fd5b61364a88838901613529565b955060208701359450604087013591508082111561366757600080fd5b818701915087601f83011261367b57600080fd5b81358181111561368a57600080fd5b8860208260051b850101111561369f57600080fd5b95989497505060200194505050565b600080604083850312156136c157600080fd5b8235915060208301356136d381613447565b809150509250929050565b6000602082840312156136f057600080fd5b813567ffffffffffffffff81111561370757600080fd5b61204a84828501613529565b6000806040838503121561372657600080fd5b823561373181613447565b915060208301356001600160601b03811681146136d357600080fd5b80151581146112e457600080fd5b6000806040838503121561376e57600080fd5b823561377981613447565b915060208301356136d38161374d565b6000806040838503121561379c57600080fd5b8235915060208301356136d38161374d565b6000806000606084860312156137c357600080fd5b8335925060208401359150604084013567ffffffffffffffff8111156137e857600080fd5b6137f486828701613529565b9150509250925092565b6000806000806080858703121561381457600080fd5b843561381f81613447565b9350602085013561382f81613447565b925060408501359150606085013567ffffffffffffffff81111561385257600080fd5b8501601f8101871361386357600080fd5b613872878235602084016134cb565b91505092959194509250565b6000806040838503121561389157600080fd5b823561389c81613447565b915060208301356136d381613447565b6020808252825182820181905260009190848201906040850190845b818110156138ed5783516001600160a01b0316835292840192918401916001016138c8565b50909695505050505050565b600181811c9082168061390d57607f821691505b60208210810361392d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561095c57600081815260208120601f850160051c8101602086101561395a5750805b601f850160051c820191505b8181101561397957828155600101613966565b505050505050565b815167ffffffffffffffff81111561399b5761399b613488565b6139af816139a984546138f9565b84613933565b602080601f8311600181146139e457600084156139cc5750858301515b600019600386901b1c1916600185901b178555613979565b600085815260208120601f198616915b82811015613a13578886015182559484019460019091019084016139f4565b5085821015613a315787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b8082018082111561077b5761077b613a41565b600060018201613a7c57613a7c613a41565b5060010190565b808202811582820484141761077b5761077b613a41565b600082613ab757634e487b7160e01b600052601260045260246000fd5b500490565b8181038181111561077b5761077b613a41565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b600060208284031215613b2e57600080fd5b8151611cf78161374d565b600060208284031215613b4b57600080fd5b5051919050565b6020808252600f908201526e125b9d985b1a59081c9d5b19481251608a1b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b6001600160a01b038316815260406020820181905260009061204a908301846133ef565b600060208284031215613c0c57600080fd5b8151611cf781613447565b600060033d1115613c305760046000803e5060005160e01c5b90565b600060443d1015613c415790565b6040516003193d81016004833e81513d67ffffffffffffffff8160248401118184111715613c7157505050505090565b8285019150815181811115613c895750505050505090565b843d8701016020828501011115613ca35750505050505090565b613cb26020828601018761349e565b509095945050505050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60008351613d218184602088016133cb565b835190830190613d358183602088016133cb565b01949350505050565b634e487b7160e01b600052603160045260246000fd5b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090610b06908301846133ef565b600060208284031215613d9957600080fd5b8151611cf78161339856fe508ff4ae67e5193ae2a15c31476fe1e3da49a0429e3f89334969e43bcacb17e6a2646970667358221220a378489085aaba83680ea7a7719e563807e4806eca8b7db36201a407c729f9a064736f6c6343000811003300000000000000000000000000000000000c2e074ec69a0dfb2997ba6c7d2e1e000000000000000000000000d4416b13d2b3a9abae7acd5d6c2bbdbe2568640139eb848f88bdfb0a6371096249dd451f56859dfe2cd3ddeab1e26d5bb68ede1600000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000f0780f43b86c13b3d0681b1cf6daeb1499e7f14d0000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d627a6d7955675a7a50706a65417146384d534a517573555a75795250564639763935617465644466344c594a2f00000000000000000000
0xa2646970667358221220a378489085aaba83680ea7a7719e563807e4806eca8b7db36201a407c729f9a064736f6c6343000811003300000000000000000000000000000000000c2e074ec69a0dfb2997ba6c7d2e1e000000000000000000000000d4416b13d2b3a9abae7acd5d6c2bbdbe2568640139eb848f88bdfb0a6371096249dd451f56859dfe2cd3ddeab1e26d5bb68ede1600000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000f0780f43b86c13b3d0681b1cf6daeb1499e7f14d0000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d627a6d7955675a7a50706a65417146384d534a517573555a75795250564639763935617465644466344c594a2f00000000000000000000