0 txs
90 calls
constructor
constructor(string baseURI, address adminRole, address minterRole, address metadataRole)
functions
ADMIN_ROLE
viewfunction ADMIN_ROLE() view returns (bytes32)
balanceOf
viewfunction balanceOf(address owner) view returns (uint256)
baseTokenURI
viewfunction baseTokenURI() view returns (string)
computeSalt
purefunction computeSalt(address referralAddress, bytes32 salt) pure returns (bytes32)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
eip712Domain
viewfunction eip712Domain() view returns (bytes1 fields, string name, string version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] extensions)
getApproved
viewfunction getApproved(uint256 tokenId) view returns (address)
getMessageToSign
viewfunction getMessageToSign(address referralAddress, uint256 referralCount, bytes32 salt) view returns (bytes32)
getReferrals
viewfunction getReferrals(address user) view returns (uint256, uint256)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
globalReferralCount
viewfunction globalReferralCount() view returns (uint256)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
isApprovedForAll
viewfunction isApprovedForAll(address owner, address operator) view returns (bool)
isValidSignature
viewfunction isValidSignature(address referralAddress, uint256 referralCount, bytes32 salt, bytes signature) view returns (bool)
METADATA_ROLE
viewfunction METADATA_ROLE() view returns (bytes32)
MINTER_ROLE
viewfunction MINTER_ROLE() view returns (bytes32)
name
viewfunction name() view returns (string)
nextTokenId
viewfunction nextTokenId() view returns (uint256)
ownerOf
viewfunction ownerOf(uint256 tokenId) view returns (address)
paused
viewfunction paused() view returns (bool)
REFER_HASH
viewfunction REFER_HASH() view returns (bytes32)
referralCounts
viewfunction referralCounts(address account) view returns (uint256 balance)
saltUsed
viewfunction saltUsed(address referralAddress, bytes32 salt) view returns (bool)
soulbound
viewfunction soulbound() view returns (bool)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
symbol
viewfunction symbol() view returns (string)
tokenURI
viewfunction tokenURI(uint256 tokenId) view returns (string)
totalReferralCounts
viewfunction totalReferralCounts(address account) view returns (uint256 balance)
usedSalt
viewfunction usedSalt(bytes32 salt) view returns (bool used)
addReferrals
nonpayablefunction addReferrals(address user, uint256 count)
approve
nonpayablefunction approve(address to, uint256 tokenId)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
mint
nonpayablefunction mint(address to)
mintToWithSignature
nonpayablefunction mintToWithSignature(address to, address referrer, bytes32 salt, uint256 referralCount, bytes signature)
mintWithSignature
nonpayablefunction mintWithSignature(address referrer, bytes32 salt, uint256 referralCount, bytes signature)
pause
nonpayablefunction pause()
removeReferrals
nonpayablefunction removeReferrals(address user, uint256 count)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
safeTransferFrom
nonpayablefunction safeTransferFrom(address from, address to, uint256 tokenId, bytes data)
safeTransferFrom
nonpayablefunction safeTransferFrom(address from, address to, uint256 tokenId)
setApprovalForAll
nonpayablefunction setApprovalForAll(address operator, bool approved)
setBaseURI
nonpayablefunction setBaseURI(string newBaseURI)
setGlobalReferrals
nonpayablefunction setGlobalReferrals(uint256 referralCount)
setSoulbound
nonpayablefunction setSoulbound(bool status)
transferFrom
nonpayablefunction transferFrom(address from, address to, uint256 tokenId)
unpause
nonpayablefunction unpause()
events
Approval
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)
ApprovalForAll
event ApprovalForAll(address indexed owner, address indexed operator, bool approved)
BatchMetadataUpdate
event BatchMetadataUpdate(uint256 _fromTokenId, uint256 _toTokenId)
EIP712DomainChanged
event EIP712DomainChanged()
GlobalReferralCountUpdated
event GlobalReferralCountUpdated(uint256 count)
MetadataUpdate
event MetadataUpdate(uint256 _tokenId)
Paused
event Paused(address account)
ReferralCountChanged
event ReferralCountChanged(address indexed user, uint256 count)
RoleAdminChanged
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
SoulboundUpdated
event SoulboundUpdated(bool status)
TokenMinted
event TokenMinted(address indexed user, uint256 tokenId)
TokenMintedViaReferral
event TokenMintedViaReferral(address to, address from, bytes32 salt)
Transfer
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)
Unpaused
event Unpaused(address account)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
AlreadyHavePass
error AlreadyHavePass()
EnforcedPause
error EnforcedPause()
ERC721IncorrectOwner
error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner)
ERC721InsufficientApproval
error ERC721InsufficientApproval(address operator, uint256 tokenId)
ERC721InvalidApprover
error ERC721InvalidApprover(address approver)
ERC721InvalidOperator
error ERC721InvalidOperator(address operator)
ERC721InvalidOwner
error ERC721InvalidOwner(address owner)
ERC721InvalidReceiver
error ERC721InvalidReceiver(address receiver)
ERC721InvalidSender
error ERC721InvalidSender(address sender)
ERC721NonexistentToken
error ERC721NonexistentToken(uint256 tokenId)
ExpectedPause
error ExpectedPause()
InvalidAddress
error InvalidAddress()
InvalidShortString
error InvalidShortString()
InvalidSignature
error InvalidSignature()
NoReferralsAvailable
error NoReferralsAvailable()
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SaltAlreadyUsed
error SaltAlreadyUsed()
StringTooLong
error StringTooLong(string str)
TokenDoesNotExist
error TokenDoesNotExist()
TransfersDisabled
error TransfersDisabled()
creation bytecode
0x610160604052348015610010575f80fd5b506040516131c03803806131c083398101604081905261002f916103bc565b604080518082018252600a808252694265746141636365737360b01b60208084018290528451808601865260018152603160f81b818301528551808701875293845283820192909252845180860190955260048552634265746160e01b9085015291925f61009d8382610521565b5060016100aa8282610521565b506100ba9150839050600661026a565b610120526100c981600761026a565b61014052815160208084019190912060e052815190820120610100524660a05261015560e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a08201525f9060c00160405160208183030381529060405280519060200120905090565b60805250503060c0526008805460ff19169055600a6101748582610521565b50600b805460ff19166001908117909155600d556001600160a01b03831615806101a557506001600160a01b038216155b806101b757506001600160a01b038116155b156101d55760405163e6c4247b60e01b815260040160405180910390fd5b6101df5f8461029c565b5061020a7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758461029c565b506102357f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a68361029c565b506102607f6bd6b5318a46e5fff572d5e4258a20774aab40cc35ac7680654b9081fcc82f808261029c565b5050505050610633565b5f6020835110156102855761027e83610347565b9050610296565b816102908482610521565b5060ff90505b92915050565b5f8281526009602090815260408083206001600160a01b038516845290915281205460ff16610340575f8381526009602090815260408083206001600160a01b03861684529091529020805460ff191660011790556102f83390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610296565b505f610296565b5f80829050601f8151111561037a578260405163305a27a960e01b815260040161037191906105db565b60405180910390fd5b805161038582610610565b179392505050565b634e487b7160e01b5f52604160045260245ffd5b80516001600160a01b03811681146103b7575f80fd5b919050565b5f805f80608085870312156103cf575f80fd5b84516001600160401b038111156103e4575f80fd5b8501601f810187136103f4575f80fd5b80516001600160401b0381111561040d5761040d61038d565b604051601f8201601f19908116603f011681016001600160401b038111828210171561043b5761043b61038d565b604052818152828201602001891015610452575f80fd5b8160208401602083015e5f60208383010152809650505050610476602086016103a1565b9250610484604086016103a1565b9150610492606086016103a1565b905092959194509250565b600181811c908216806104b157607f821691505b6020821081036104cf57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561051c57805f5260205f20601f840160051c810160208510156104fa5750805b601f840160051c820191505b81811015610519575f8155600101610506565b50505b505050565b81516001600160401b0381111561053a5761053a61038d565b61054e81610548845461049d565b846104d5565b6020601f821160018114610580575f83156105695750848201515b5f19600385901b1c1916600184901b178455610519565b5f84815260208120601f198516915b828110156105af578785015182556020948501946001909201910161058f565b50848210156105cc57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b805160208083015191908110156104cf575f1960209190910360031b1b16919050565b60805160a05160c05160e051610100516101205161014051612b3c6106845f395f6116ef01525f6116bd01525f6120c201525f61209a01525f611ff501525f61201f01525f6120490152612b3c5ff3fe608060405234801561000f575f80fd5b5060043610610304575f3560e01c8063816c1c621161019d578063cec297a0116100e8578063df30e54b11610093578063e985e9c51161006e578063e985e9c51461071b578063ed3d08d314610756578063ed54b98014610769575f80fd5b8063df30e54b146106ce578063e7b8ef3a146106e1578063e8df03c7146106f4575f80fd5b8063d547741f116100c3578063d547741f146106aa578063d547cfb7146106bd578063d953dc32146106c5575f80fd5b8063cec297a014610651578063d1818cd514610670578063d539139314610683575f80fd5b8063a217fddf11610148578063b88d4fde11610123578063b88d4fde1461060c578063c56209bb1461061f578063c87b56dd1461063e575f80fd5b8063a217fddf146105df578063a22cb465146105e6578063b75c934a146105f9575f80fd5b806391d148541161017857806391d148541461058c57806392c949ec146105c457806395d89b41146105d7575f80fd5b8063816c1c62146105475780638456cb591461056957806384b0196e14610571575f80fd5b806341a0894d1161025d57806364aa30fa1161020857806370a08231116101e357806370a082311461050457806375794a3c1461051757806375b238fc14610520575f80fd5b806364aa30fa146104cb5780636806531c146104de5780636a627842146104f1575f80fd5b806355f804b31161023857806355f804b31461049a5780635c975abb146104ad5780636352211e146104b8575f80fd5b806341a0894d1461042a57806342842e0e146104745780634ca520bb14610487575f80fd5b806323b872dd116102bd57806336568abe1161029857806336568abe146103e857806338841782146103fb5780633f4ba83a14610422575f80fd5b806323b872dd14610392578063248a9ca3146103a55780632f2ff15d146103d5575f80fd5b8063081812fc116102ed578063081812fc14610345578063095ea7b3146103705780630fad0f5114610385575f80fd5b806301ffc9a71461030857806306fdde0314610330575b5f80fd5b61031b6103163660046123fd565b6107bd565b60405190151581526020015b60405180910390f35b610338610813565b6040516103279190612446565b610358610353366004612458565b6108a2565b6040516001600160a01b039091168152602001610327565b61038361037e36600461248a565b6108c9565b005b600b5461031b9060ff1681565b6103836103a03660046124b2565b6108d8565b6103c76103b3366004612458565b5f9081526009602052604090206001015490565b604051908152602001610327565b6103836103e33660046124ec565b61097f565b6103836103f63660046124ec565b6109a3565b6103c77f6bd6b5318a46e5fff572d5e4258a20774aab40cc35ac7680654b9081fcc82f8081565b6103836109f4565b61045f610438366004612516565b6001600160a01b03165f908152600f6020908152604080832054600e909252909120549091565b60408051928352602083019190915201610327565b6103836104823660046124b2565b610a29565b61031b61049536600461248a565b610a43565b6103836104a83660046125ba565b610aac565b60085460ff1661031b565b6103586104c6366004612458565b610b44565b6103836104d936600461248a565b610b4e565b6103836104ec36600461248a565b610b82565b6103836104ff366004612516565b610be7565b6103c7610512366004612516565b610c22565b6103c7600d5481565b6103c77fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b61031b610555366004612458565b600c6020525f908152604090205460ff1681565b610383610c80565b610579610cb2565b60405161032797969594939291906125ff565b61031b61059a3660046124ec565b5f9182526009602090815260408084206001600160a01b0393909316845291905290205460ff1690565b61031b6105d23660046126f6565b610d10565b610338610d75565b6103c75f81565b6103836105f4366004612768565b610d84565b610383610607366004612790565b610d8f565b61038361061a366004612803565b610f50565b6103c761062d366004612516565b600f6020525f908152604090205481565b61033861064c366004612458565b610f68565b6103c761065f366004612516565b600e6020525f908152604090205481565b61038361067e3660046126f6565b610f7c565b6103c77f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b6103836106b83660046124ec565b610f91565b610338610fb5565b6103c760105481565b6103836106dc36600461287a565b611041565b6103c76106ef366004612893565b6110b4565b6103c77fbeec9cc1c22c0699e047643512182d6155c901f87393f071a13bc116050b05ad81565b61031b6107293660046128c3565b6001600160a01b039182165f90815260056020908152604080832093909416825291909152205460ff1690565b610383610764366004612458565b611170565b6103c761077736600461248a565b6040516bffffffffffffffffffffffff19606084901b166020820152603481018290525f9060540160405160208183030381529060405280519060200120905092915050565b5f6001600160e01b0319821615806107fe57506001600160e01b031982167f84b0196e00000000000000000000000000000000000000000000000000000000145b8061080d575061080d826111d7565b92915050565b60605f8054610821906128eb565b80601f016020809104026020016040519081016040528092919081815260200182805461084d906128eb565b80156108985780601f1061086f57610100808354040283529160200191610898565b820191905f5260205f20905b81548152906001019060200180831161087b57829003601f168201915b5050505050905090565b5f6108ac82611214565b505f828152600460205260409020546001600160a01b031661080d565b6108d482823361124c565b5050565b6001600160a01b03821661090657604051633250574960e11b81525f60048201526024015b60405180910390fd5b5f610912838333611259565b9050836001600160a01b0316816001600160a01b031614610979576040517f64283d7b0000000000000000000000000000000000000000000000000000000081526001600160a01b03808616600483015260248201849052821660448201526064016108fd565b50505050565b5f82815260096020526040902060010154610999816112e3565b61097983836112ed565b6001600160a01b03811633146109e5576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109ef8282611398565b505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610a1e816112e3565b610a2661141d565b50565b6109ef83838360405180602001604052805f815250610f50565b5f600c5f610a9285856040516bffffffffffffffffffffffff19606084901b166020820152603481018290525f9060540160405160208183030381529060405280519060200120905092915050565b815260208101919091526040015f205460ff169392505050565b610ab461146f565b7f6bd6b5318a46e5fff572d5e4258a20774aab40cc35ac7680654b9081fcc82f80610ade816112e3565b600a610aea8382612967565b506001600d5411156108d4577f6bd5c950a8d8df17f772f5af37cb3655737899cbf903264b9795592da439661c600180600d54610b279190612a36565b604080519283526020830191909152015b60405180910390a15050565b5f61080d82611214565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6610b78816112e3565b6109ef83836114ae565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6610bac816112e3565b610bb6838361155f565b6001600160a01b0383165f908152600f602052604081208054849290610bdd908490612a36565b9091555050505050565b610bef61146f565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6610c19816112e3565b6108d4826115df565b5f6001600160a01b038216610c65576040517f89c62b640000000000000000000000000000000000000000000000000000000081525f60048201526024016108fd565b506001600160a01b03165f9081526003602052604090205490565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610caa816112e3565b610a26611679565b5f6060805f805f6060610cc36116b6565b610ccb6116e8565b604080515f808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b5f80610d1d8787876110b4565b9050610d6a8185858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250506001600160a01b038c169392915050611715565b979650505050505050565b606060018054610821906128eb565b6108d4338383611785565b610d9761183c565b610da48584868585610d10565b610dda576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0385165f9081527fd5d09b8f3165a736d25b1a14611612ac91830c1b82012b1c33b2dac7c90a0649602052604090205460ff16610e28576010549250610e2885600161155f565b610e3286846114ae565b6001600c5f610e8288886040516bffffffffffffffffffffffff19606084901b166020820152603481018290525f9060540160405160208183030381529060405280519060200120905092915050565b815260208082019290925260409081015f908120805460ff1916941515949094179093556001600160a01b038916808452600f8352928190205490519081527f61044089529690e33c1d2497f2951327dad93e8a6a241ca7b7f83d70ba12b8b3910160405180910390a2604080516001600160a01b038089168252871660208201529081018590527fe45ab0f1b98513140ab4958e5753da46a130dac4a5eabd3ebda304a5509520809060600160405180910390a1610f40866115df565b610f486118c2565b505050505050565b610f5b8484846108d8565b61097933858585856118ec565b6060610f7382611214565b5061080d611a0b565b610f8a338686868686610d8f565b5050505050565b5f82815260096020526040902060010154610fab816112e3565b6109798383611398565b600a8054610fc2906128eb565b80601f0160208091040260200160405190810160405280929190818152602001828054610fee906128eb565b80156110395780601f1061101057610100808354040283529160200191611039565b820191905f5260205f20905b81548152906001019060200180831161101c57829003601f168201915b505050505081565b61104961146f565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775611073816112e3565b600b805460ff19168315159081179091556040519081527f0b0acbcb688728dca6995f14652193234693327d5410785192e51f6dd8d45e1c90602001610b38565b5f6110bf8483610a43565b156110f6576040517f0ced304300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080517fbeec9cc1c22c0699e047643512182d6155c901f87393f071a13bc116050b05ad60208201526001600160a01b0386169181019190915260608101849052608081018390525f9060a00160405160208183030381529060405280519060200120905061116581611a1a565b9150505b9392505050565b61117861146f565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a66111a2816112e3565b60108290556040518281527f2cd20b3030622beee59cee41cc3531ed006c6d6b84b41ec233a236bf4957863490602001610b38565b5f6001600160e01b031982167f7965db0b00000000000000000000000000000000000000000000000000000000148061080d575061080d82611a61565b5f818152600260205260408120546001600160a01b03168061080d57604051637e27328960e01b8152600481018490526024016108fd565b6109ef8383836001611afb565b5f82815260026020526040812054600b546001600160a01b039091169060ff16801561128d57506001600160a01b03811615155b80156112a157506001600160a01b03851615155b156112d8576040517f8574adcf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611165858585611c43565b610a268133611d42565b5f8281526009602090815260408083206001600160a01b038516845290915281205460ff16611391575f8381526009602090815260408083206001600160a01b03861684529091529020805460ff191660011790556113493390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161080d565b505f61080d565b5f8281526009602090815260408083206001600160a01b038516845290915281205460ff1615611391575f8381526009602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161080d565b611425611daf565b6008805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b60085460ff16156114ac576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6114b661146f565b6001600160a01b0382165f908152600f6020526040812080548392906114dd908490612a49565b90915550506001600160a01b0382165f908152600e602052604081208054839290611509908490612a49565b90915550506001600160a01b0382165f818152600e60209081526040918290205491519182527f61044089529690e33c1d2497f2951327dad93e8a6a241ca7b7f83d70ba12b8b391015b60405180910390a25050565b61156761146f565b6001600160a01b0382165f908152600e60205260409020548111156115b8576040517f629e208f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382165f908152600e602052604081208054839290611509908490612a36565b6115e761146f565b5f6115f182610c22565b1115611629576040517ffae77e1100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600d80546001810190915561163e8282611deb565b816001600160a01b03167fb9144c96c86541f6fa89c9f2f02495cccf4b08cd6643e26d34ee00aa586558a88260405161155391815260200190565b61168161146f565b6008805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586114523390565b60606116e37f00000000000000000000000000000000000000000000000000000000000000006006611e04565b905090565b60606116e37f00000000000000000000000000000000000000000000000000000000000000006007611e04565b5f836001600160a01b03163b5f03611773575f806117338585611ead565b5090925090505f81600381111561174c5761174c612a5c565b14801561176a5750856001600160a01b0316826001600160a01b0316145b92505050611169565b61177e848484611ef6565b9050611169565b6001600160a01b0382166117d0576040517f5b08ba180000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024016108fd565b6001600160a01b038381165f81815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c15611895576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114ac60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005b90611fe2565b6114ac5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f006118bc565b6001600160a01b0383163b15610f8a57604051630a85bd0160e11b81526001600160a01b0384169063150b7a029061192e908890889087908790600401612a70565b6020604051808303815f875af1925050508015611968575060408051601f3d908101601f1916820190925261196591810190612aa6565b60015b6119cf573d808015611995576040519150601f19603f3d011682016040523d82523d5f602084013e61199a565b606091505b5080515f036119c757604051633250574960e11b81526001600160a01b03851660048201526024016108fd565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b14610f4857604051633250574960e11b81526001600160a01b03851660048201526024016108fd565b6060600a8054610821906128eb565b5f61080d611a26611fe9565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b5f6001600160e01b031982167f80ac58cd000000000000000000000000000000000000000000000000000000001480611ac357506001600160e01b031982167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061080d57507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b031983161461080d565b8080611b0f57506001600160a01b03821615155b15611c07575f611b1e84611214565b90506001600160a01b03831615801590611b4a5750826001600160a01b0316816001600160a01b031614155b8015611b7b57506001600160a01b038082165f9081526005602090815260408083209387168352929052205460ff16155b15611bbd576040517fa9fbf51f0000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024016108fd565b8115611c055783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b50505f908152600460205260409020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b5f828152600260205260408120546001600160a01b0390811690831615611c6f57611c6f818486612112565b6001600160a01b03811615611ca957611c8a5f855f80611afb565b6001600160a01b0381165f90815260036020526040902080545f190190555b6001600160a01b03851615611cd7576001600160a01b0385165f908152600360205260409020805460010190555b5f84815260026020526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b5f8281526009602090815260408083206001600160a01b038516845290915290205460ff166108d4576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016108fd565b60085460ff166114ac576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108d4828260405180602001604052805f81525061218f565b606060ff8314611e1e57611e17836121a6565b905061080d565b818054611e2a906128eb565b80601f0160208091040260200160405190810160405280929190818152602001828054611e56906128eb565b8015611ea15780601f10611e7857610100808354040283529160200191611ea1565b820191905f5260205f20905b815481529060010190602001808311611e8457829003601f168201915b5050505050905061080d565b5f805f8351604103611ee4576020840151604085015160608601515f1a611ed6888285856121e3565b955095509550505050611eef565b505081515f91506002905b9250925092565b5f805f856001600160a01b03168585604051602401611f16929190612ac1565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16630b135d3f60e11b17905251611f609190612ad9565b5f60405180830381855afa9150503d805f8114611f98576040519150601f19603f3d011682016040523d82523d5f602084013e611f9d565b606091505b5091509150818015611fb157506020815110155b8015611fd857508051630b135d3f60e11b90611fd69083016020908101908401612aef565b145b9695505050505050565b80825d5050565b5f306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561204157507f000000000000000000000000000000000000000000000000000000000000000046145b1561206b57507f000000000000000000000000000000000000000000000000000000000000000090565b6116e3604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a08201525f9060c00160405160208183030381529060405280519060200120905090565b61211d8383836122ab565b6109ef576001600160a01b03831661214b57604051637e27328960e01b8152600481018290526024016108fd565b6040517f177e802f0000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602481018290526044016108fd565b612199838361232e565b6109ef335f8585856118ec565b60605f6121b2836123a8565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561221c57505f915060039050826122a1565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801561226d573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661229857505f9250600191508290506122a1565b92505f91508190505b9450945094915050565b5f6001600160a01b038316158015906123265750826001600160a01b0316846001600160a01b0316148061230357506001600160a01b038085165f9081526005602090815260408083209387168352929052205460ff165b8061232657505f828152600460205260409020546001600160a01b038481169116145b949350505050565b6001600160a01b03821661235757604051633250574960e11b81525f60048201526024016108fd565b5f61236383835f611259565b90506001600160a01b038116156109ef576040517f73c6ac6e0000000000000000000000000000000000000000000000000000000081525f60048201526024016108fd565b5f60ff8216601f81111561080d576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160e01b031981168114610a26575f80fd5b5f6020828403121561240d575f80fd5b8135611169816123e8565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6111696020830184612418565b5f60208284031215612468575f80fd5b5035919050565b80356001600160a01b0381168114612485575f80fd5b919050565b5f806040838503121561249b575f80fd5b6124a48361246f565b946020939093013593505050565b5f805f606084860312156124c4575f80fd5b6124cd8461246f565b92506124db6020850161246f565b929592945050506040919091013590565b5f80604083850312156124fd575f80fd5b8235915061250d6020840161246f565b90509250929050565b5f60208284031215612526575f80fd5b6111698261246f565b634e487b7160e01b5f52604160045260245ffd5b5f8067ffffffffffffffff84111561255d5761255d61252f565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561258c5761258c61252f565b6040528381529050808284018510156125a3575f80fd5b838360208301375f60208583010152509392505050565b5f602082840312156125ca575f80fd5b813567ffffffffffffffff8111156125e0575f80fd5b8201601f810184136125f0575f80fd5b61232684823560208401612543565b7fff000000000000000000000000000000000000000000000000000000000000008816815260e060208201525f61263960e0830189612418565b828103604084015261264b8189612418565b606084018890526001600160a01b038716608085015260a0840186905283810360c0850152845180825260208087019350909101905f5b818110156126a0578351835260209384019390920191600101612682565b50909b9a5050505050505050505050565b5f8083601f8401126126c1575f80fd5b50813567ffffffffffffffff8111156126d8575f80fd5b6020830191508360208285010111156126ef575f80fd5b9250929050565b5f805f805f6080868803121561270a575f80fd5b6127138661246f565b94506020860135935060408601359250606086013567ffffffffffffffff81111561273c575f80fd5b612748888289016126b1565b969995985093965092949392505050565b80358015158114612485575f80fd5b5f8060408385031215612779575f80fd5b6127828361246f565b915061250d60208401612759565b5f805f805f8060a087890312156127a5575f80fd5b6127ae8761246f565b95506127bc6020880161246f565b94506040870135935060608701359250608087013567ffffffffffffffff8111156127e5575f80fd5b6127f189828a016126b1565b979a9699509497509295939492505050565b5f805f8060808587031215612816575f80fd5b61281f8561246f565b935061282d6020860161246f565b925060408501359150606085013567ffffffffffffffff81111561284f575f80fd5b8501601f8101871361285f575f80fd5b61286e87823560208401612543565b91505092959194509250565b5f6020828403121561288a575f80fd5b61116982612759565b5f805f606084860312156128a5575f80fd5b6128ae8461246f565b95602085013595506040909401359392505050565b5f80604083850312156128d4575f80fd5b6128dd8361246f565b915061250d6020840161246f565b600181811c908216806128ff57607f821691505b60208210810361291d57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156109ef57805f5260205f20601f840160051c810160208510156129485750805b601f840160051c820191505b81811015610f8a575f8155600101612954565b815167ffffffffffffffff8111156129815761298161252f565b6129958161298f84546128eb565b84612923565b6020601f8211600181146129c7575f83156129b05750848201515b5f19600385901b1c1916600184901b178455610f8a565b5f84815260208120601f198516915b828110156129f657878501518255602094850194600190920191016129d6565b5084821015612a1357868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561080d5761080d612a22565b8082018082111561080d5761080d612a22565b634e487b7160e01b5f52602160045260245ffd5b6001600160a01b03851681526001600160a01b0384166020820152826040820152608060608201525f611fd86080830184612418565b5f60208284031215612ab6575f80fd5b8151611169816123e8565b828152604060208201525f6123266040830184612418565b5f82518060208501845e5f920191825250919050565b5f60208284031215612aff575f80fd5b505191905056fea2646970667358221220df0ef8218f1f09486a7d3ca6173eebccceba31306693aaafcb51f4bc9cb9c72964736f6c634300081a003300000000000000000000000000000000000000000000000000000000000000800000000000000000000000005c776c1fd5eefe78c61ddd3cc5570cde88ada457000000000000000000000000f9d172ea24a6cef13bc90378a9b47e0f2b21f8ff00000000000000000000000095ce472fa2d3127b1ba6f23cf372ba158eace3390000000000000000000000000000000000000000000000000000000000000042697066733a2f2f6261666b7265696369756d6d646b33627579696632736d796f7a7476717a6a687a6e366d61686c6b7537356c71653236727a377772737034626175000000000000000000000000000000000000000000000000000000000000