[ { "inputs": [ { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "symbol", "type": "string" }, { "internalType": "address", "name": "transferNFTLocker", "type": "address" }, { "internalType": "address", "name": "nontransferNFTLocker", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "_admin", "type": "address" } ], "name": "AdminDeleted", "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": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "delegate", "type": "address" } ], "name": "DelegateRemoved", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "id", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "recipient", "type": "address" }, { "indexed": true, "internalType": "address", "name": "token", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "start", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "cliffDate", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "end", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "rate", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "vestingAdmin", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "unlockDate", "type": "uint256" }, { "indexed": false, "internalType": "bool", "name": "transferableNFTLocker", "type": "bool" } ], "name": "NFTCreated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "id", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "balance", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "remainder", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newStart", "type": "uint256" } ], "name": "NFTRedeemed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "id", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "balance", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "remainder", "type": "uint256" } ], "name": "NFTRevoked", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "delegate", "type": "address" } ], "name": "TokenDelegated", "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": "string", "name": "newURI", "type": "string" } ], "name": "URISet", "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": "address", "name": "delegate", "type": "address" } ], "name": "balanceOfDelegate", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "uint256", "name": "start", "type": "uint256" }, { "internalType": "uint256", "name": "cliffDate", "type": "uint256" }, { "internalType": "uint256", "name": "rate", "type": "uint256" }, { "internalType": "address", "name": "vestingAdmin", "type": "address" }, { "internalType": "uint256", "name": "unlockDate", "type": "uint256" }, { "internalType": "bool", "name": "transferableNFTLocker", "type": "bool" } ], "name": "createLockedNFT", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "uint256", "name": "start", "type": "uint256" }, { "internalType": "uint256", "name": "cliffDate", "type": "uint256" }, { "internalType": "uint256", "name": "rate", "type": "uint256" }, { "internalType": "address", "name": "vestingAdmin", "type": "address" } ], "name": "createNFT", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "delegate", "type": "address" } ], "name": "delegateAllNFTs", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "delegate", "type": "address" }, { "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" } ], "name": "delegateTokens", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "delegate", "type": "address" }, { "internalType": "address", "name": "token", "type": "address" } ], "name": "delegatedBalances", "outputs": [ { "internalType": "uint256", "name": "delegatedBalance", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "delegatedTo", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "deleteAdmin", "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": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getStreamEnd", "outputs": [ { "internalType": "uint256", "name": "end", "type": "uint256" } ], "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": "holder", "type": "address" }, { "internalType": "address", "name": "token", "type": "address" } ], "name": "lockedBalances", "outputs": [ { "internalType": "uint256", "name": "lockedBalance", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "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": "redeemAllNFTs", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" } ], "name": "redeemNFTs", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" } ], "name": "revokeNFTs", "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": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "streamBalanceOf", "outputs": [ { "internalType": "uint256", "name": "balance", "type": "uint256" }, { "internalType": "uint256", "name": "remainder", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "streams", "outputs": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "uint256", "name": "start", "type": "uint256" }, { "internalType": "uint256", "name": "cliffDate", "type": "uint256" }, { "internalType": "uint256", "name": "rate", "type": "uint256" }, { "internalType": "address", "name": "vestingAdmin", "type": "address" }, { "internalType": "uint256", "name": "unlockDate", "type": "uint256" }, { "internalType": "bool", "name": "transferableNFTLocker", "type": "bool" } ], "stateMutability": "view", "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": "index", "type": "uint256" } ], "name": "tokenByIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "delegate", "type": "address" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "tokenOfDelegateByIndex", "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": "string", "name": "_uri", "type": "string" } ], "name": "updateBaseURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
60806040523480156200001157600080fd5b5060405162003b9a38038062003b9a8339810160408190526200003491620001fc565b838360006200004483826200031a565b5060016200005382826200031a565b50506001600e55506001600160a01b038216158015906200007c57506001600160a01b03811615155b6200008657600080fd5b60118054610100600160a81b031916336101000217905560126020527f71a67924699a20698523213e55fe499d539379d7769cd5567e2c45d583f815a380546001600160a01b03199081166001600160a01b0394851617909155600080527f7e7fa33969761a458e04f477e039a608702b4f924981d6653935a8319a08ad7b80549091169190921617905550620003e69050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200014257600080fd5b81516001600160401b03808211156200015f576200015f6200011a565b604051601f8301601f19908116603f011681019082821181831017156200018a576200018a6200011a565b81604052838152602092508683858801011115620001a757600080fd5b600091505b83821015620001cb5785820183015181830184015290820190620001ac565b600093810190920192909252949350505050565b80516001600160a01b0381168114620001f757600080fd5b919050565b600080600080608085870312156200021357600080fd5b84516001600160401b03808211156200022b57600080fd5b620002398883890162000130565b955060208701519150808211156200025057600080fd5b506200025f8782880162000130565b9350506200027060408601620001df565b91506200028060608601620001df565b905092959194509250565b600181811c90821680620002a057607f821691505b602082108103620002c157634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200031557600081815260208120601f850160051c81016020861015620002f05750805b601f850160051c820191505b818110156200031157828155600101620002fc565b5050505b505050565b81516001600160401b038111156200033657620003366200011a565b6200034e816200034784546200028b565b84620002c7565b602080601f8311600181146200038657600084156200036d5750858301515b600019600386901b1c1916600185901b17855562000311565b600085815260208120601f198616915b82811015620003b75788860151825594840194600190910190840162000396565b5085821015620003d65787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6137a480620003f66000396000f3fe608060405234801561001057600080fd5b50600436106101fb5760003560e01c80636352211e1161011a57806395d89b41116100ad578063c87b56dd1161007c578063c87b56dd146104d6578063dc1fa568146104e9578063e33f33fb146104fc578063e426c1f71461050f578063e985e9c51461052257600080fd5b806395d89b41146104a0578063a22cb465146104a8578063b88d4fde146104bb578063c7711c4c146104ce57600080fd5b806370a08231116100e957806370a08231146104545780637d7b3782146104675780638d6ed7911461047a578063931688cb1461048d57600080fd5b80636352211e1461036a57806364d60d911461037d5780636b8e3d731461042e5780636bb3c73f1461044157600080fd5b80632f745c59116101925780634f6ccce7116101615780634f6ccce71461031e57806352e5b7e414610331578063599182d8146103445780635a15d2831461035757600080fd5b80632f745c59146102dd5780633b9343d9146102f057806342842e0e146102f85780634c6839cc1461030b57600080fd5b806311be179d116101ce57806311be179d1461027d57806318160ddd1461029057806323b872dd146102a257806325958d8f146102b557600080fd5b806301ffc9a71461020057806306fdde0314610228578063081812fc1461023d578063095ea7b314610268575b600080fd5b61021361020e366004612ee1565b61055e565b60405190151581526020015b60405180910390f35b610230610589565b60405161021f9190612f4e565b61025061024b366004612f61565b61061b565b6040516001600160a01b03909116815260200161021f565b61027b610276366004612f96565b610642565b005b61027b61028b366004612fc0565b61075c565b6008545b60405190815260200161021f565b61027b6102b0366004612fdb565b61079f565b6102c86102c3366004612f61565b6107d0565b6040805192835260208301919091520161021f565b6102946102eb366004612f96565b61086b565b61027b610901565b61027b610306366004612fdb565b6109bf565b610294610319366004612fc0565b6109da565b61029461032c366004612f61565b610a3c565b61029461033f366004613017565b610acf565b61027b610352366004613058565b610bab565b61027b61036536600461319d565b610bd9565b610250610378366004612f61565b610c30565b6103de61038b366004612f61565b601360205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007909701546001600160a01b03968716979596949593949293919092169160ff1688565b604080516001600160a01b03998a16815260208101989098528701959095526060860193909352608085019190915290931660a083015260c082019290925290151560e08201526101000161021f565b61029461043c366004613017565b610c90565b61025061044f366004612f61565b610d64565b610294610462366004612fc0565b610db7565b61027b6104753660046131d2565b610e3d565b610294610488366004612f61565b610e6a565b61027b61049b366004613294565b610ef9565b610230610f96565b61027b6104b63660046132dd565b610fa5565b61027b6104c9366004613314565b610fb4565b61027b610fec565b6102306104e4366004612f61565b6110b6565b6102946104f7366004612f96565b61111c565b61027b61050a36600461319d565b61119c565b61027b61051d366004613390565b6111b7565b610213610530366004613017565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b60006001600160e01b0319821663fbc45b9b60e01b14806105835750610583826111f8565b92915050565b606060008054610598906133de565b80601f01602080910402602001604051908101604052809291908181526020018280546105c4906133de565b80156106115780601f106105e657610100808354040283529160200191610611565b820191906000526020600020905b8154815290600101906020018083116105f457829003601f168201915b5050505050905090565b600061062682611248565b506000908152600460205260409020546001600160a01b031690565b600061064d82610c30565b9050806001600160a01b0316836001600160a01b0316036106bf5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b03821614806106db57506106db8133610530565b61074d5760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c00000060648201526084016106b6565b61075783836112a7565b505050565b600061076733610db7565b905060005b818110156107575760006107803383611315565b905061078c848261133d565b50806107978161342e565b91505061076c565b6107a93382611399565b6107c55760405162461bcd60e51b81526004016106b690613447565b610757838383611418565b600081815260136020908152604080832081516101008101835281546001600160a01b03908116825260018301549482018590526002830154938201849052600383015460608301819052600484015460808401819052600585015490921660a0840152600684015460c084015260079093015460ff16151560e083015285949193610860939092909142611454565b909590945092505050565b600061087683610db7565b82106108d85760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b60648201526084016106b6565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b6109096114a9565b600061091433610db7565b905060008167ffffffffffffffff811115610931576109316130e1565b60405190808252806020026020018201604052801561095a578160200160208202803683370190505b50905060005b828110156109a75760006109743383611315565b90508083838151811061098957610989613494565b6020908102919091010152508061099f8161342e565b915050610960565b506109b181611502565b50506109bd6001600e55565b565b61075783838360405180602001604052806000815250610fb4565b60006001600160a01b038216610a205760405162461bcd60e51b815260206004820152600b60248201526a216164647265737328302960a81b60448201526064016106b6565b506001600160a01b03166000908152600b602052604090205490565b6000610a4760085490565b8210610aaa5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b60648201526084016106b6565b60088281548110610abd57610abd613494565b90600052602060002001549050919050565b600080610adb84610db7565b905060005b81811015610ba3576000610af48683611315565b60008181526013602090815260409182902082516101008101845281546001600160a01b0390811680835260018401549483019490945260028301549482019490945260038201546060820152600482015460808201526005820154841660a0820152600682015460c082015260079091015460ff16151560e082015292935090871603610b8e576020810151610b8b90866134aa565b94505b50508080610b9b9061342e565b915050610ae0565b505092915050565b610bb36114a9565b610bc48989898989898989896115af565b610bce6001600e55565b505050505050505050565b610be16114a9565b60005b8151811015610c2257610c1033838381518110610c0357610c03613494565b602002602001015161189e565b80610c1a8161342e565b915050610be4565b50610c2d6001600e55565b50565b6000818152600260205260408120546001600160a01b0316806105835760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016106b6565b600080610c9c846109da565b905060005b81811015610ba3576000610cb5868361111c565b60008181526013602090815260409182902082516101008101845281546001600160a01b0390811680835260018401549483019490945260028301549482019490945260038201546060820152600482015460808201526005820154841660a0820152600682015460c082015260079091015460ff16151560e082015292935090871603610d4f576020810151610d4c90866134aa565b94505b50508080610d5c9061342e565b915050610ca1565b6000818152600a60205260408120546001600160a01b0316806105835760405162461bcd60e51b815260206004820152600b60248201526a216164647265737328302960a81b60448201526064016106b6565b60006001600160a01b038216610e215760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b60648201526084016106b6565b506001600160a01b031660009081526003602052604090205490565b610e456114a9565b610e57878787878787876000806115af565b610e616001600e55565b50505050505050565b600081815260136020908152604080832081516101008101835281546001600160a01b0390811682526001830154948201859052600283015493820184905260038301546060830152600483015460808301819052600584015490911660a0830152600683015460c083015260079092015460ff16151560e082015292610ef2929190611aac565b9392505050565b60115461010090046001600160a01b03163314610f415760405162461bcd60e51b81526004016106b6906020808252600490820152635356303160e01b604082015260600190565b6010610f4d8282613503565b506011805460ff191660011790556040517fde63cc2d19581e57e158d078c2df83f9ab70addd6257f7f12bfecb21c06c912890610f8b908390612f4e565b60405180910390a150565b606060018054610598906133de565b610fb0338383611af7565b5050565b610fbe3383611399565b610fda5760405162461bcd60e51b81526004016106b690613447565b610fe684848484611bc5565b50505050565b60115461010090046001600160a01b031633146110345760405162461bcd60e51b81526004016106b6906020808252600490820152635356303160e01b604082015260600190565b60115460ff166110705760405162461bcd60e51b81526020600482015260076024820152661b9bdd081cd95d60ca1b60448201526064016106b6565b60118054610100600160a81b03191690556040513381527f989ddfce057dad219e0ae16f691b121bb0e348f0d8ae0ad400b4d5ac8d616c8b9060200160405180910390a1565b60606110c182611248565b60006110cb611bf8565b905060008151116110eb5760405180602001604052806000815250610ef2565b806110f584611c07565b6040516020016111069291906135c3565b6040516020818303038152906040529392505050565b6001600160a01b0382166000908152600b602052604081205482106111735760405162461bcd60e51b815260206004820152600d60248201526c6f7574206f6620626f756e647360981b60448201526064016106b6565b506001600160a01b03919091166000908152600c60209081526040808320938352929052205490565b6111a46114a9565b6111ad81611502565b610c2d6001600e55565b60005b8151811015610757576111e6838383815181106111d9576111d9613494565b602002602001015161133d565b806111f08161342e565b9150506111ba565b60006001600160e01b031982166380ac58cd60e01b148061122957506001600160e01b03198216635b5e139f60e01b145b8061058357506301ffc9a760e01b6001600160e01b0319831614610583565b6000818152600260205260409020546001600160a01b0316610c2d5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016106b6565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906112dc82610c30565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6001600160a01b03919091166000908152600660209081526040808320938352929052205490565b61134681610c30565b6001600160a01b0316336001600160a01b03161461138f5760405162461bcd60e51b815260206004820152600660248201526510b7bbb732b960d11b60448201526064016106b6565b610fb08282611c9a565b6000806113a583610c30565b9050806001600160a01b0316846001600160a01b031614806113ec57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b806114105750836001600160a01b03166114058461061b565b6001600160a01b0316145b949350505050565b60405162461bcd60e51b81526020600482015260116024820152704e6f74207472616e736665727261626c6560781b60448201526064016106b6565b60008082871015806114665750828610155b1561147257508361149f565b6114908461148089866135f2565b61148a9190613605565b86611cad565b915061149c82866135f2565b90505b9550959350505050565b6002600e54036114fb5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016106b6565b6002600e55565b60005b8151811015610fb057600061153283838151811061152557611525613494565b60200260200101516107d0565b5090506000811180156115745750426013600085858151811061155757611557613494565b602002602001015181526020019081526020016000206006015411155b1561159c5761159c3384848151811061158f5761158f613494565b6020026020010151611cc4565b50806115a78161342e565b915050611505565b6001600160a01b038916158015906115d95750826001600160a01b0316896001600160a01b031614155b61160e5760405162461bcd60e51b81526004016106b69060208082526004908201526329ab181960e11b604082015260600190565b6001600160a01b03881661164d5760405162461bcd60e51b81526004016106b6906020808252600490820152635356303360e01b604082015260600190565b600087116116865760405162461bcd60e51b81526004016106b69060208082526004908201526314d58c0d60e21b604082015260600190565b6000841180156116965750868411155b6116cb5760405162461bcd60e51b81526004016106b6906020808252600490820152635356303560e01b604082015260600190565b6116d9600f80546001019055565b60006116e4600f5490565b905060006116f388878b611aac565b9050808711158015611712575061170e816312cc03006134aa565b8411155b6117475760405162461bcd60e51b81526004016106b69060208082526004908201526329ab189960e11b604082015260600190565b6117538a33308c611eaf565b60408051610100810182526001600160a01b03808d16825260208083018d81528385018d8152606085018d8152608086018d81528c861660a0880190815260c088018d81528c151560e08a0190815260008d8152601390985299909620975188549088166001600160a01b0319918216178955945160018901559251600288015590516003870155516004860155516005850180549190941691161790915551600682015590516007909101805491151560ff1990921691909117905561181a8b83612084565b604080518a8152602081018a905280820189905260608101839052608081018890526001600160a01b0387811660a083015260c0820187905285151560e083015291518c8316928e169185917fa368cda08a54d41cd7ac5dfa5169aa79a0cb8559adf9b22b8504f68cf85d7a4c918190036101000190a45050505050505050505050565b60008181526013602090815260409182902082516101008101845281546001600160a01b03908116825260018301549382019390935260028201549381019390935260038101546060840152600481015460808401526005810154821660a08401819052600682015460c085015260079091015460ff16151560e0840152908416146119555760405162461bcd60e51b81526004016106b6906020808252600490820152635356303960e01b604082015260600190565b600080611975836040015184606001518560200151866080015142611454565b91509150600081116119b25760405162461bcd60e51b81526004016106b6906020808252600490820152630535631360e41b604082015260600190565b60006119bd85610c30565b600086815260136020526040812080546001600160a01b031990811682556001820183905560028201839055600382018390556004820183905560058201805490911690556006810191909155600701805460ff191690559050611a208561209e565b8351611a2d908784612141565b8215611a6a57428460c001511115611a5d57611a58818560000151858760c001518860e00151612273565b611a6a565b8351611a6a908285612141565b604080518481526020810184905286917e3beaed548a7af7bd5424a1903b33c401c026ba00cd69b1121abcff5f7807e3910160405180910390a2505050505050565b6000611ab88383613632565b15611ae25783611ac88484613646565b611ad291906134aa565b611add9060016134aa565b611410565b83611aed8484613646565b61141091906134aa565b816001600160a01b0316836001600160a01b031603611b585760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016106b6565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611bd0848484611418565b611bdc84848484612320565b610fe65760405162461bcd60e51b81526004016106b69061365a565b606060108054610598906133de565b60606000611c1483612421565b600101905060008167ffffffffffffffff811115611c3457611c346130e1565b6040519080825280601f01601f191660200182016040528015611c5e576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084611c6857509392505050565b611ca3816124f9565b610fb08282612627565b600081831115611cbd5781610ef2565b5090919050565b816001600160a01b0316611cd782610c30565b6001600160a01b031614611d165760405162461bcd60e51b81526004016106b69060208082526004908201526329ab181b60e11b604082015260600190565b600081815260136020908152604080832081516101008101835281546001600160a01b03908116825260018301549482018590526002830154938201849052600383015460608301819052600484015460808401819052600585015490921660a0840152600684015460c084015260079093015460ff16151560e08301529094938493611da893909290919042611454565b9150915082602001518203611e1d57600084815260136020526040812080546001600160a01b031990811682556001820183905560028201839055600382018390556004820183905560058201805490911690556006810191909155600701805460ff19169055611e188461209e565b611e59565b60008481526013602052604081206001018054849290611e3e9084906135f2565b90915550506000848152601360205260409020426002909101555b8251611e66908684612141565b60408051838152602081018390524281830152905185917f3a689772e77e5ff832d6c6fe5b8523068cb77a808e890035645db910c390f7e0919081900360600190a25050505050565b6040516370a0823160e01b81526001600160a01b038381166004830152600091908616906370a0823190602401602060405180830381865afa158015611ef9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f1d91906136ac565b6040516370a0823160e01b815233600482015290915082906001600160a01b038716906370a0823190602401602060405180830381865afa158015611f66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f8a91906136ac565b1015611fc05760405162461bcd60e51b815260206004820152600560248201526454484c303160d81b60448201526064016106b6565b611fcc858585856126d4565b6040516370a0823160e01b81526001600160a01b038481166004830152600091908716906370a0823190602401602060405180830381865afa158015612016573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061203a91906136ac565b90508261204783836135f2565b1461207c5760405162461bcd60e51b81526020600482015260056024820152642a2426181960d91b60448201526064016106b6565b505050505050565b610fb082826040518060200160405280600081525061273f565b60006120a982610c30565b90506120b9816000846001612772565b6120c282610c30565b600083815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0385168085526003845282852080546000190190558785526002909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6040516370a0823160e01b81526001600160a01b038381166004830152600091908516906370a0823190602401602060405180830381865afa15801561218b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121af91906136ac565b90506121bc8484846128cb565b6040516370a0823160e01b81526001600160a01b038481166004830152600091908616906370a0823190602401602060405180830381865afa158015612206573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061222a91906136ac565b90508261223783836135f2565b1461226c5760405162461bcd60e51b81526020600482015260056024820152642a2426181960d91b60448201526064016106b6565b5050505050565b8015156000908152601260205260409020546001600160a01b03166122998582866128fb565b60405163062de31760e51b81526001600160a01b038781166004830152868116602483015260448201869052606482018590526084820185905260a4820186905282169063c5bc62e09060c401600060405180830381600087803b15801561230057600080fd5b505af1158015612314573d6000803e3d6000fd5b50505050505050505050565b60006001600160a01b0384163b1561241657604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906123649033908990889088906004016136c5565b6020604051808303816000875af192505050801561239f575060408051601f3d908101601f1916820190925261239c91810190613702565b60015b6123fc573d8080156123cd576040519150601f19603f3d011682016040523d82523d6000602084013e6123d2565b606091505b5080516000036123f45760405162461bcd60e51b81526004016106b69061365a565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611410565b506001949350505050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106124605772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef8100000000831061248c576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106124aa57662386f26fc10000830492506010015b6305f5e10083106124c2576305f5e100830492506008015b61271083106124d657612710830492506004015b606483106124e8576064830492506002015b600a83106105835760010192915050565b600061250482610d64565b6001600160a01b0381166000908152600b60205260408120549192509061252d906001906135f2565b6000848152600d6020526040902054909150808214612580576001600160a01b0383166000908152600c602090815260408083208584528252808320548484528184208190558352600d90915290208190555b6000848152600d602090815260408083208390556001600160a01b038616808452600c835281842086855283528184208490558352600b90915281208054600192906125cd9084906135f2565b90915550506000848152600a602052604080822080546001600160a01b0319169055516001600160a01b0385169186917f09f87139523b83583b15f476015dd9a27fae3a03f17202cdf77d063bef5d21c29190a350505050565b6001600160a01b0382166000818152600b602081815260408084208054600c84528286208187528452828620889055878652600d8452828620819055600a845291852080546001600160a01b031916871790559484529190528254909260019290916126949084906134aa565b90915550506040516001600160a01b0384169083907fcd57880fa6fb6b4aedb77272d2cfa8d03186b5034f9b672ccfcd3cd6edfecc9b90600090a3505050565b6040516001600160a01b0380851660248301528316604482015260648101829052610fe69085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526129ad565b6127498383612a7f565b6127566000848484612320565b6107575760405162461bcd60e51b81526004016106b69061365a565b60018111156127e15760405162461bcd60e51b815260206004820152603560248201527f455243373231456e756d657261626c653a20636f6e7365637574697665207472604482015274185b9cd9995c9cc81b9bdd081cdd5c1c1bdc9d1959605a1b60648201526084016106b6565b816001600160a01b0385166128475761283881600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b6128428482612627565b612883565b836001600160a01b0316856001600160a01b0316146128835761286a8582612c18565b6001600160a01b03841615612883576128838482611c9a565b6001600160a01b0384166128a85761289a81612cb5565b6128a3816124f9565b61226c565b846001600160a01b0316846001600160a01b03161461226c5761226c8482612d64565b6040516001600160a01b03831660248201526044810182905261075790849063a9059cbb60e01b90606401612708565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa15801561294c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061297091906136ac565b61297a91906134aa565b6040516001600160a01b038516602482015260448101829052909150610fe690859063095ea7b360e01b90606401612708565b6000612a02826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612da89092919063ffffffff16565b8051909150156107575780806020019051810190612a20919061371f565b6107575760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016106b6565b6001600160a01b038216612ad55760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016106b6565b6000818152600260205260409020546001600160a01b031615612b3a5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016106b6565b612b48600083836001612772565b6000818152600260205260409020546001600160a01b031615612bad5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016106b6565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001612c2584610db7565b612c2f91906135f2565b600083815260076020526040902054909150808214612c82576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090612cc7906001906135f2565b60008381526009602052604081205460088054939450909284908110612cef57612cef613494565b906000526020600020015490508060088381548110612d1057612d10613494565b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480612d4857612d4861373c565b6001900381819060005260206000200160009055905550505050565b6000612d6f83610db7565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6060611410848460008585600080866001600160a01b03168587604051612dcf9190613752565b60006040518083038185875af1925050503d8060008114612e0c576040519150601f19603f3d011682016040523d82523d6000602084013e612e11565b606091505b5091509150612e2287838387612e2d565b979650505050505050565b60608315612e9c578251600003612e95576001600160a01b0385163b612e955760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016106b6565b5081611410565b6114108383815115612eb15781518083602001fd5b8060405162461bcd60e51b81526004016106b69190612f4e565b6001600160e01b031981168114610c2d57600080fd5b600060208284031215612ef357600080fd5b8135610ef281612ecb565b60005b83811015612f19578181015183820152602001612f01565b50506000910152565b60008151808452612f3a816020860160208601612efe565b601f01601f19169290920160200192915050565b602081526000610ef26020830184612f22565b600060208284031215612f7357600080fd5b5035919050565b80356001600160a01b0381168114612f9157600080fd5b919050565b60008060408385031215612fa957600080fd5b612fb283612f7a565b946020939093013593505050565b600060208284031215612fd257600080fd5b610ef282612f7a565b600080600060608486031215612ff057600080fd5b612ff984612f7a565b925061300760208501612f7a565b9150604084013590509250925092565b6000806040838503121561302a57600080fd5b61303383612f7a565b915061304160208401612f7a565b90509250929050565b8015158114610c2d57600080fd5b60008060008060008060008060006101208a8c03121561307757600080fd5b6130808a612f7a565b985061308e60208b01612f7a565b975060408a0135965060608a0135955060808a0135945060a08a013593506130b860c08b01612f7a565b925060e08a013591506101008a01356130d08161304a565b809150509295985092959850929598565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613120576131206130e1565b604052919050565b600082601f83011261313957600080fd5b8135602067ffffffffffffffff821115613155576131556130e1565b8160051b6131648282016130f7565b928352848101820192828101908785111561317e57600080fd5b83870192505b84831015612e2257823582529183019190830190613184565b6000602082840312156131af57600080fd5b813567ffffffffffffffff8111156131c657600080fd5b61141084828501613128565b600080600080600080600060e0888a0312156131ed57600080fd5b6131f688612f7a565b965061320460208901612f7a565b955060408801359450606088013593506080880135925060a0880135915061322e60c08901612f7a565b905092959891949750929550565b600067ffffffffffffffff831115613256576132566130e1565b613269601f8401601f19166020016130f7565b905082815283838301111561327d57600080fd5b828260208301376000602084830101529392505050565b6000602082840312156132a657600080fd5b813567ffffffffffffffff8111156132bd57600080fd5b8201601f810184136132ce57600080fd5b6114108482356020840161323c565b600080604083850312156132f057600080fd5b6132f983612f7a565b915060208301356133098161304a565b809150509250929050565b6000806000806080858703121561332a57600080fd5b61333385612f7a565b935061334160208601612f7a565b925060408501359150606085013567ffffffffffffffff81111561336457600080fd5b8501601f8101871361337557600080fd5b6133848782356020840161323c565b91505092959194509250565b600080604083850312156133a357600080fd5b6133ac83612f7a565b9150602083013567ffffffffffffffff8111156133c857600080fd5b6133d485828601613128565b9150509250929050565b600181811c908216806133f257607f821691505b60208210810361341257634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60006001820161344057613440613418565b5060010190565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b8082018082111561058357610583613418565b601f82111561075757600081815260208120601f850160051c810160208610156134e45750805b601f850160051c820191505b8181101561207c578281556001016134f0565b815167ffffffffffffffff81111561351d5761351d6130e1565b6135318161352b84546133de565b846134bd565b602080601f831160018114613566576000841561354e5750858301515b600019600386901b1c1916600185901b17855561207c565b600085815260208120601f198616915b8281101561359557888601518255948401946001909101908401613576565b50858210156135b35787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600083516135d5818460208801612efe565b8351908301906135e9818360208801612efe565b01949350505050565b8181038181111561058357610583613418565b808202811582820484141761058357610583613418565b634e487b7160e01b600052601260045260246000fd5b6000826136415761364161361c565b500690565b6000826136555761365561361c565b500490565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6000602082840312156136be57600080fd5b5051919050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906136f890830184612f22565b9695505050505050565b60006020828403121561371457600080fd5b8151610ef281612ecb565b60006020828403121561373157600080fd5b8151610ef28161304a565b634e487b7160e01b600052603160045260246000fd5b60008251613764818460208701612efe565b919091019291505056fea26469706673582212207fec6d901282330766095c043689151d2edb337e27520f6f566bf22d5f81544064736f6c63430008110033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000d6e5e27f310c61633d331dba585f7c55f579bbf6000000000000000000000000110dd7887321f24477bf4a135a1e5eb7bf31691a000000000000000000000000000000000000000000000000000000000000000d48656467657956657374696e6700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000656544f4b454e0000000000000000000000000000000000000000000000000000