0 txs
3 calls
constructor
constructor()
functions
acceptedCurrency
viewfunction acceptedCurrency() view returns (address)
domainSeparator
viewfunction domainSeparator() view returns (bytes32)
eip712Domain
viewfunction eip712Domain() view returns (bytes1 fields, string name, string version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] extensions)
feeReceiver
viewfunction feeReceiver() view returns (address)
fees
viewfunction fees() view returns (uint256)
generateBidSignatureHash
viewfunction generateBidSignatureHash(tuple offer) view returns (bytes32)
generateListingSignatureHash
viewfunction generateListingSignatureHash(tuple listing) view returns (bytes32)
generateTradeSignatureHash
viewfunction generateTradeSignatureHash(tuple trade) view returns (bytes32)
getListingStatus
viewfunction getListingStatus(bytes32 listingHash) view returns (bool)
getOfferStatus
viewfunction getOfferStatus(bytes32 offerHash) view returns (bool)
HASH_GIVE
viewfunction HASH_GIVE() view returns (bytes32)
HASH_TAKE
viewfunction HASH_TAKE() view returns (bytes32)
hashTradeGive
purefunction hashTradeGive(tuple[] _give) pure returns (bytes32[] hashGive)
hashTradeTake
purefunction hashTradeTake(tuple[] _give) pure returns (bytes32[] hashTake)
isValidBid
viewfunction isValidBid(tuple offer) view returns (bool)
isValidListing
viewfunction isValidListing(tuple listing) view returns (bool)
isValidTrade
viewfunction isValidTrade(tuple trade) view returns (bool)
LISTING_TYPEHASH
viewfunction LISTING_TYPEHASH() view returns (bytes32)
listingStructHash
purefunction listingStructHash() pure returns (bytes32)
marketplaceAdmin
viewfunction marketplaceAdmin() view returns (address)
marketplaceManagerRoleId
viewfunction marketplaceManagerRoleId() view returns (uint256)
OFFER_TYPEHASH
viewfunction OFFER_TYPEHASH() view returns (bytes32)
offerStructHash
purefunction offerStructHash() pure returns (bytes32)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
rbac
viewfunction rbac() view returns (address)
revokedListings
viewfunction revokedListings(bytes32) view returns (bool)
revokedOffers
viewfunction revokedOffers(bytes32) view returns (bool)
revokedTrades
viewfunction revokedTrades(bytes32) view returns (bool)
SUPER_ADMIN_ROLE
viewfunction SUPER_ADMIN_ROLE() view returns (uint256)
totalPendingFees
viewfunction totalPendingFees() view returns (uint256)
TRADE_TYPEHASH
viewfunction TRADE_TYPEHASH() view returns (bytes32)
tradeFee
viewfunction tradeFee() view returns (uint256)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
usedListings
viewfunction usedListings(bytes32) view returns (bool)
usedOffers
viewfunction usedOffers(bytes32) view returns (bool)
usedTrades
viewfunction usedTrades(bytes32) view returns (bool)
whitelistRegistry
viewfunction whitelistRegistry() view returns (address)
acceptOffer
nonpayablefunction acceptOffer(tuple[] offers)
buy
nonpayablefunction buy(tuple[] listings)
collectFees
nonpayablefunction collectFees()
emergencyShutdown
nonpayablefunction emergencyShutdown()
executeTrade
nonpayablefunction executeTrade(tuple[] trades)
initialize
nonpayablefunction initialize(address _rbac, uint256 _marketplaceManagerRoleId, address _whitelistRegistry, address _acceptedCurrency, address _feeReceiver)
revokeListing
nonpayablefunction revokeListing(tuple listing)
revokeOffer
nonpayablefunction revokeOffer(tuple offer)
revokeTrade
nonpayablefunction revokeTrade(tuple trade)
setAcceptedCurrency
nonpayablefunction setAcceptedCurrency(address newERC20TokenAddress)
setFeeReceiver
nonpayablefunction setFeeReceiver(address newFeeReceiver)
setFees
nonpayablefunction setFees(uint256 newFees)
setMarketplaceAdmin
nonpayablefunction setMarketplaceAdmin(address _marketplaceAdmin)
setTradeFee
nonpayablefunction setTradeFee(uint256 newTradeFee)
setWhitelistRegistry
nonpayablefunction setWhitelistRegistry(address newWhitelistRegistryAddress)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
events
EIP712DomainChanged
event EIP712DomainChanged()
GiveNFTTransferred
event GiveNFTTransferred(address indexed buyer, address indexed seller, address indexed nftContract, uint256 tokenId, bytes32 tradeHash)
Initialized
event Initialized(uint64 version)
OfferAccepted
event OfferAccepted(address indexed buyer, address indexed seller, address indexed nftContract, uint256 tokenId, uint256 price, address currency)
Purchase
event Purchase(address indexed buyer, address indexed seller, address indexed nftContract, uint256 tokenId, uint256 price, address currency)
TakeNFTTransferred
event TakeNFTTransferred(address indexed buyer, address indexed seller, address indexed nftContract, uint256 tokenId, bytes32 tradeHash)
TradeExecuted
event TradeExecuted(address indexed buyer, address indexed seller, bytes32 tradeHash)
Upgraded
event Upgraded(address indexed implementation)
errors
AddressEmptyCode
error AddressEmptyCode(address target)
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
FailedCall
error FailedCall()
InvalidChainId
error InvalidChainId()
InvalidCurrencyAddress
error InvalidCurrencyAddress()
InvalidDeadline
error InvalidDeadline()
InvalidFeeReceiver
error InvalidFeeReceiver()
InvalidFees
error InvalidFees()
InvalidInitialization
error InvalidInitialization()
InvalidPrice
error InvalidPrice()
InvalidReceiver
error InvalidReceiver()
InvalidRegistryAddress
error InvalidRegistryAddress()
InvalidSignature
error InvalidSignature()
ListingAlreadyUsed
error ListingAlreadyUsed()
ListingExpired
error ListingExpired()
ListingIsRevoked
error ListingIsRevoked()
NFTNotWhitelisted
error NFTNotWhitelisted()
NotAuthorizedRole
error NotAuthorizedRole(uint256 roleId)
NotInitializing
error NotInitializing()
NotOwner
error NotOwner()
OfferAlreadyUsed
error OfferAlreadyUsed()
OfferExpired
error OfferExpired()
OfferIsRevoked
error OfferIsRevoked()
RBACAddressZero
error RBACAddressZero()
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
TradeAlreadyUsed
error TradeAlreadyUsed()
TradeIsRevoked
error TradeIsRevoked()
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
creation bytecode
0x60a080604052346100e857306080527ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460ff8160401c166100d9576002600160401b03196001600160401b03821601610073575b6040516139aa90816100ed823960805181818161191d01526119bf0152f35b6001600160401b0319166001600160401b039081177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f80610054565b63f92ee8a960e01b5f5260045ffd5b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c8062a8aef81461235557806302b0038b146120385780630484c05414612309578063051072ba146122cb57806305a802721461229c5780630c8f6e5e146122445780631060302314612216578063109e62ea146121f9578063193202eb1461216f5780631c6d76751461214757806324bcdfbd1461212a57806326709215146120fb5780632973e6d3146120725780632997677a146120385780632ab565bd1461025f5780632bba58ac14611ffe5780633403c2fc14611f7b578063352c9dd614611f275780633d18678e14611ee157806341995e4814611c2f57806342a0309514611bdb5780634460bdd614611bc05780634f1ef2861461197157806352d1902d1461190b5780635ec8fcb3146118c95780636acfbd05146118f85780636ef0edc8146118c957806384b0196e1461177f578063996d79b71461169e5780639af1d35a14611681578063a01ef25f146110a3578063a3355c6714611069578063a672279314610dfb578063a8ecc7f114611042578063ad3cb1cc14610ff7578063ae914f5414610f2f578063b3f0067414610f07578063b8f8c1f114610ecd578063bfb6e2d514610e9e578063c6f3e0ae14610e81578063c879657214610e35578063daaa12a114610dfb578063dbe3d34f14610ced578063ddd71d9d1461077f578063e58dae881461047f578063e59727f214610457578063ed9506381461042f578063eea039101461040d578063efdcd974146103aa578063f432bfaa1461037b578063f58b3253146102b4578063f698da25146102925763fc07eb9d1461025f575f80fd5b3461028e57602036600319011261028e576004355f526039602052602060ff60405f2054166040519015158152f35b5f80fd5b3461028e575f36600319011261028e5760206102ac6136de565b604051908152f35b3461028e576102c236612364565b6102d46102cf82806125be565b6129eb565b906001600160a01b036102f260606102ec84806125be565b0161262c565b16330361036c57815f52603b60205260ff60405f20541661035d5761032861032182602061032f940190612658565b3691612564565b82336131cf565b1561034e575f908152603e60205260409020805460ff19166001179055005b638baa579f60e01b5f5260045ffd5b636c58a0db60e11b5f5260045ffd5b6330cd747160e01b5f5260045ffd5b3461028e57602036600319011261028e576004355f52603d602052602060ff60405f2054166040519015158152f35b3461028e57602036600319011261028e576103c36123cf565b6103d860018060a01b03606854163314612b63565b6001600160a01b031680156103fe576001600160601b0360a01b60345416176034555f80f35b633480121760e21b5f5260045ffd5b3461028e576020610425610420366124e5565b61305e565b6040519015158152f35b3461028e575f36600319011261028e576032546040516001600160a01b039091168152602090f35b3461028e575f36600319011261028e576068546040516001600160a01b039091168152602090f35b3461028e57602036600319011261028e576004356001600160401b03811161028e576104af903690600401612519565b6104b76132f3565b5f5b8181106104d35760015f8051602061393583398151915255005b6104e66104e182848661303b565b612c4c565b506104fa6104f582848661303b565b612e91565b5f52603960205260405f20600160ff1982541617905561052b604061052083858761303b565b01356035549061332b565b61054381604061053c85878961303b565b0135612bd2565b9061055081603754612bf3565b60375561010061056184868861303b565b013561075f575b61057e60e061057885878961303b565b01612e84565b156107485733915b8061071a575b50806106fc575b506001600160a01b0390506105b16105ac83858761303b565b61262c565b16906105c360a06102ec83868861303b565b6105d46101606102ec84878961303b565b9260206105e284878961303b565b013590803b1561028e57604051632142170760e11b81526001600160a01b03938416600482015294909216602485015260448401525f908390606490829084905af19182156106f1576001926106e1575b506106456101606102ec83868861303b565b61065560a06102ec84878961303b565b906106646105ac84878961303b565b7fa08cb843320eabe9cff345973b948e6b72b8ce73556f718684638daa3e8a9e6b602061069286898b61303b565b01359160406106a2878a8c61303b565b603354604080519687529190920135602086015260a089901b8990039182166001600160a01b031690850152908116948116931691606090a4016104b9565b5f6106eb91612397565b84610633565b6040513d5f823e3d90fd5b6033546107139230916001600160a01b031661334a565b8380610593565b60335461074291906001600160a01b03168461073c60a06102ec898b8d61303b565b9161334a565b8561058c565b6107596101606102ec85878961303b565b91610586565b61077a61010061077085878961303b565b0135831015612c00565b610568565b3461028e57602036600319011261028e576004356001600160401b03811161028e576107af903690600401612519565b906107b86132f3565b5f905b8282106107d55760015f8051602061393583398151915255005b6107e86107e3838584613019565b61268a565b506108006102cf6107fa848685613019565b806125be565b805f52603b60205260405f20600160ff1982541617905560365461082681603754612bf3565b60375580610cbc575b5061084360606102ec6107fa868887613019565b61085360606102ec868887613019565b6040518381526001600160a01b0391821692909116907f6a5693c13c093359ab74ddf3e8793324d6baaa9c8f247674f4d40e6086609e0c90602090a35f5b6108a86108a26107fa868887613019565b806125d3565b9050811015610a97576108bc848685613019565b806108c6916125be565b806108d0916125d3565b6001600160a01b03916108e4918491612608565b6108ed9061262c565b166108f9858786613019565b80610903916125be565b60600161090f9061262c565b61091a868887613019565b6060016109269061262c565b9183610933888a89613019565b8061093d916125be565b80610947916125d3565b6109519291612608565b6020013590803b1561028e57604051632142170760e11b81526001600160a01b03938416600482015293909216602484015260448301525f908290606490829084905af180156106f157610a87575b506109ac848685613019565b806109b6916125be565b6060016109c29061262c565b6109cd858786613019565b6060016109d99061262c565b90826109e6878988613019565b806109f0916125be565b806109fa916125d3565b610a049291612608565b610a0d9061262c565b83610a19888a89613019565b80610a23916125be565b80610a2d916125d3565b610a379291612608565b6040805160209283013581529182018790526001600160a01b0392831694831693909216917f5cf969667edc43da549807810d56511d3cfb6c130fd5003babe9890bb978fd2691a4600101610891565b5f610a9191612397565b856109a0565b505f5b610ab5610aab6107fa868887613019565b60208101906125d3565b9050811015610cb057610ac9848685613019565b80610ad3916125be565b60208101610ae0916125d3565b6001600160a01b0391610af4918491612608565b610afd9061262c565b16610b09858786613019565b606001610b159061262c565b610b20868887613019565b80610b2a916125be565b606001610b369061262c565b9183610b43888a89613019565b80610b4d916125be565b60208101610b5a916125d3565b610b649291612608565b6020013590803b1561028e57604051632142170760e11b81526001600160a01b03938416600482015293909216602484015260448301525f908290606490829084905af180156106f157610ca0575b50610bbf848685613019565b606001610bcb9061262c565b610bd6858786613019565b80610be0916125be565b606001610bec9061262c565b9082610bf9878988613019565b80610c03916125be565b60208101610c10916125d3565b610c1a9291612608565b610c239061262c565b83610c2f888a89613019565b80610c39916125be565b60208101610c46916125d3565b610c509291612608565b6040805160209283013581529182018790526001600160a01b0392831694831693909216917f91d8f793fdc3bd0c0a079efafbdda37ed1f609682c570ed5d5040618d88da8e391a4600101610a9a565b5f610caa91612397565b85610bb3565b505090600101906107bb565b603354610ce791906001600160a01b0316610ce060606102ec6107fa898b8a613019565b309161334a565b8461082f565b3461028e57602036600319011261028e57610d066123cf565b6038545f546040516303b0981b60e61b81526004810183905233602482015290602090829060449082906001600160a01b03165afa9081156106f1575f91610dcc575b5015610dba57506001600160a01b03168015610d76576001600160601b0360a01b60685416176068555f80f35b606460405162461bcd60e51b815260206004820152602060248201527f496e76616c6964206d61726b6574706c61636541646d696e20616464726573736044820152fd5b633db159f160e21b5f5260045260245ffd5b610dee915060203d602011610df4575b610de68183612397565b810190612640565b83610d49565b503d610ddc565b3461028e575f36600319011261028e5760206040517f9921f6bf39a03a8c4e69db31183ec8d7eca008c9f129652272d30ffc1baa98d78152f35b3461028e575f36600319011261028e57610e5a60018060a01b03606854163314612b63565b603780545f909155603354603454610e7f92916001600160a01b0391821691166132b1565b005b3461028e575f36600319011261028e576020603854604051908152f35b3461028e57602036600319011261028e576004355f52603c602052602060ff60405f2054166040519015158152f35b3461028e575f36600319011261028e5760206040517f7c11a0867f883203b7d1355a0db6bc0e65539976367943db1126636a87e6a26f8152f35b3461028e575f36600319011261028e576034546040516001600160a01b039091168152602090f35b3461028e5760e036600319011261028e576004356001600160a01b0381169081810361028e57506033546084356001600160a01b038181169391921683830361028e576020936102ac935060405191858301937fc23a2bd2891662f17b6bbc148acc129f41e8c0899f3aae008e484a0e8a650bc6855260408401526024356060840152604435608084015260a083015260643560c083015260e082015260a43561010082015260c4356101208201526101208152610fef61014082612397565b51902061328b565b3461028e575f36600319011261028e5761103e604051611018604082612397565b60058152640352e302e360dc1b602082015260405191829160208352602083019061259a565b0390f35b3461028e575f36600319011261028e575f546040516001600160a01b039091168152602090f35b3461028e575f36600319011261028e5760206040517fc50869832c5323871a3242ef04ca140d16abdc89eb6ac3d53c8b228fa74122428152f35b3461028e5760a036600319011261028e576110bc6123cf565b6044356001600160a01b0381169081900361028e576064356001600160a01b0381169081900361028e576084356001600160a01b038116919082900361028e575f80516020613955833981519152549260ff8460401c1615936001600160401b03811680159081611679575b600114908161166f575b159081611666575b506116575767ffffffffffffffff1981166001175f80516020613955833981519152558461162b575b5060409485516111738782612397565b601181527052697046756e4d61726b6574706c61636560781b602082015286519061119e8883612397565b60058252640302e312e360dc1b60208301526111b86136b3565b6111c06136b3565b8051906001600160401b0382116115145781906111ea5f805160206138d58339815191525461338e565b601f81116115b1575b50602090601f8311600114611533575f92611528575b50508160011b915f199060031b1c1916175f805160206138d5833981519152555b8051906001600160401b0382116115145781906112545f805160206138f58339815191525461338e565b601f811161149a575b50602090601f831160011461141c575f92611411575b50508160011b915f199060031b1c1916175f805160206138f5833981519152555b5f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100555f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d101556112e26136b3565b6001600160a01b03168015611402576001600160601b0360a01b5f5416175f5561130a6136b3565b6113126136b3565b61131a6136b3565b60015f805160206139358339815191525580156113f35781156113e45782156103fe576024356038556001600160601b0360a01b60325416176032556001600160601b0360a01b60335416176033556001600160601b0360a01b60345416176034556064603555620f424060365561138e57005b60207fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29168ff0000000000000000195f8051602061395583398151915254165f80516020613955833981519152555160018152a1005b63c2cf440960e01b5f5260045ffd5b637bfd2e8360e01b5f5260045ffd5b63e676f03160e01b5f5260045ffd5b015190508880611273565b5f805160206138f58339815191525f9081528281209350601f198516905b818110611482575090846001959493921061146a575b505050811b015f805160206138f583398151915255611294565b01515f1960f88460031b161c19169055888080611450565b9293602060018192878601518155019501930161143a565b5f805160206138f58339815191525f529091507f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b75601f840160051c8101916020851061150a575b90601f859493920160051c01905b8181106114fc575061125d565b5f81558493506001016114ef565b90915081906114e1565b634e487b7160e01b5f52604160045260245ffd5b015190508980611209565b5f805160206138d58339815191525f9081528281209350601f198516905b8181106115995750908460019594939210611581575b505050811b015f805160206138d58339815191525561122a565b01515f1960f88460031b161c19169055898080611567565b92936020600181928786015181550195019301611551565b5f805160206138d58339815191525f529091507f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d601f840160051c81019160208510611621575b90601f859493920160051c01905b81811061161357506111f3565b5f8155849350600101611606565b90915081906115f8565b68ffffffffffffffffff191668010000000000000001175f805160206139558339815191525585611163565b63f92ee8a960e01b5f5260045ffd5b9050158761113a565b303b159150611132565b869150611128565b3461028e575f36600319011261028e576020603554604051908152f35b3461028e5761012036600319011261028e576004356001600160a01b0381169081810361028e575060335460a4356001600160a01b03818116939216919083810361028e575060e4359182151580840361028e576020946102ac945060405192868401947f9921f6bf39a03a8c4e69db31183ec8d7eca008c9f129652272d30ffc1baa98d7865260408501526024356060850152604435608085015260643560a085015260c084015260843560e084015261010083015260c435610120830152610140820152610104356101608201526101608152610fef61018082612397565b3461028e575f36600319011261028e577fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1005415806118a0575b15611863576118076117c86133c6565b6117d0613493565b6020611815604051926117e38385612397565b5f84525f368137604051958695600f60f81b875260e08588015260e087019061259a565b90858203604087015261259a565b4660608501523060808501525f60a085015283810360c08501528180845192838152019301915f5b82811061184c57505050500390f35b83518552869550938101939281019260010161183d565b60405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b6044820152606490fd5b507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10154156117b8565b3461028e57602036600319011261028e576004355f52603a602052602060ff60405f2054166040519015158152f35b3461028e5760206104256104e1366124b1565b3461028e575f36600319011261028e577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031630036119625760206040515f805160206139158339815191528152f35b63703e46dd60e11b5f5260045ffd5b604036600319011261028e576119856123cf565b6024356001600160401b03811161028e573660238201121561028e576119b5903690602481600401359101612564565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016308114908115611b9e575b50611962575f546040516303b0981b60e61b81526001600482015233602482015290602090829060449082906001600160a01b03165afa9081156106f1575f91611b7f575b5015611b6b576040516352d1902d60e01b81526001600160a01b0383169290602081600481875afa5f9181611b37575b50611a775783634c9c8ce360e01b5f5260045260245ffd5b805f80516020613915833981519152859203611b255750813b15611b13575f8051602061391583398151915280546001600160a01b031916821790557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2815115611afb575f80836020610e7f95519101845af4611af5613540565b91613876565b505034611b0457005b63b398979f60e01b5f5260045ffd5b634c9c8ce360e01b5f5260045260245ffd5b632a87526960e21b5f5260045260245ffd5b9091506020813d602011611b63575b81611b5360209383612397565b8101031261028e57519085611a5f565b3d9150611b46565b633db159f160e21b5f52600160045260245ffd5b611b98915060203d602011610df457610de68183612397565b83611a2f565b5f80516020613915833981519152546001600160a01b031614159050836119ea565b3461028e575f36600319011261028e57602060405160018152f35b3461028e57602036600319011261028e57611bf46123cf565b611c0960018060a01b03606854163314612b63565b6001600160a01b031680156113e4576001600160601b0360a01b60335416176033555f80f35b3461028e57602036600319011261028e576004356001600160401b03811161028e57611c5f903690600401612519565b611c676132f3565b5f5b818110611c835760015f8051602061393583398151915255005b611c91610420828486612baf565b50611ca5611ca0828486612baf565b612f65565b5f52603a60205260405f20600160ff19825416179055611ccb6040610520838587612baf565b611cdc81604061053c858789612baf565b611ce882603754612bf3565b60375560c0611cf8848688612baf565b0135611ec2575b80611e8a575b5080611e63575b506001600160a01b03611d236105ac838587612baf565b1690611d366101206102ec838688612baf565b611d4660806102ec848789612baf565b926020611d54848789612baf565b013590803b1561028e57604051632142170760e11b81526001600160a01b03938416600482015294909216602485015260448401525f908390606490829084905af19182156106f157600192611e53575b50611db660806102ec838688612baf565b611dc76101206102ec848789612baf565b90611dd66105ac848789612baf565b7fa75f503a04b49d3f95b1d3970f1a1e58194ea85454d48c90eab2331aab96b2db6020611e0486898b612baf565b0135916040611e14878a8c612baf565b603354604080519687529190920135602086015260a089901b8990039182166001600160a01b031690850152908116948116931691606090a401611c69565b5f611e5d91612397565b84611da5565b603354611e8491906001600160a01b0316610ce060806102ec86888a612baf565b83611d0c565b603354611ebc91906001600160a01b0316611eab60806102ec87898b612baf565b61073c6101206102ec888a8c612baf565b84611d05565b611edc60c0611ed2858789612baf565b0135821015612c00565b611cff565b3461028e57602036600319011261028e57600435611f0a60018060a01b03606854163314612b63565b6103e88111611f1857603555005b632d8768f960e01b5f5260045ffd5b3461028e57602036600319011261028e57611f406123cf565b611f5560018060a01b03606854163314612b63565b6001600160a01b031680156113f3576001600160601b0360a01b60325416176032555f80f35b3461028e575f36600319011261028e57611fa060018060a01b03606854163314612b63565b60375480151580611fea575b611fc3575b603380546001600160a01b0319169055005b5f603755603354603454611fe492916001600160a01b0391821691166132b1565b80611fb1565b506033546001600160a01b03161515611fac565b3461028e575f36600319011261028e5760206040517f0c52781acc9d951db9437e5bf6c80810285d7db25ea44ff2a2974360496b37868152f35b3461028e575f36600319011261028e5760206040517fc23a2bd2891662f17b6bbc148acc129f41e8c0899f3aae008e484a0e8a650bc68152f35b3461028e57612080366124e5565b61208981612f65565b906001600160a01b0361209e6080830161262c565b16330361036c57815f52603a60205260ff60405f2054166120ec576103286103218260e06120cd940190612658565b1561034e575f908152603d60205260409020805460ff19166001179055005b6353b159df60e11b5f5260045ffd5b3461028e57602036600319011261028e576004355f52603b602052602060ff60405f2054166040519015158152f35b3461028e575f36600319011261028e576020603654604051908152f35b3461028e575f36600319011261028e576033546040516001600160a01b039091168152602090f35b3461028e5761217d366124b1565b61218681612e91565b906001600160a01b0361219b60a0830161262c565b16330361036c57815f52603960205260ff60405f2054166121ea57610328610321826101206121cb940190612658565b1561034e575f908152603c60205260409020805460ff19166001179055005b6353be2a7160e11b5f5260045ffd5b3461028e575f36600319011261028e576020603754604051908152f35b3461028e57602036600319011261028e5761223c60018060a01b03606854163314612b63565b600435603655005b3461028e57602036600319011261028e576004356001600160401b03811161028e573660238201121561028e5761229061228b61103e9236906024816004013591016123e5565b612acc565b60405191829182612478565b3461028e57602036600319011261028e576004355f52603e602052602060ff60405f2054166040519015158152f35b3461028e57602036600319011261028e576004356001600160401b03811161028e5760a0600319823603011261028e576102ac6020916004016129eb565b3461028e57602036600319011261028e576004356001600160401b03811161028e573660238201121561028e5761229061235061103e9236906024816004013591016123e5565b612923565b3461028e5760206104256107e3365b602060031982011261028e57600435906001600160401b03821161028e57608090829003600319011261028e5760040190565b90601f801991011681019081106001600160401b0382111761151457604052565b6001600160401b0381116115145760051b60200190565b600435906001600160a01b038216820361028e57565b9291926123f1826123b8565b936123ff6040519586612397565b602085848152019260061b82019181831161028e57925b8284106124235750505050565b60408483031261028e5760405190604082018281106001600160401b03821117611514576040528435906001600160a01b038216820361028e5782602092604094528287013583820152815201930192612416565b60206040818301928281528451809452019201905f5b81811061249b5750505090565b825184526020938401939092019160010161248e565b602060031982011261028e57600435906001600160401b03821161028e5761018090829003600319011261028e5760040190565b602060031982011261028e57600435906001600160401b03821161028e5761014090829003600319011261028e5760040190565b9181601f8401121561028e578235916001600160401b03831161028e576020808501948460051b01011161028e57565b6001600160401b03811161151457601f01601f191660200190565b92919261257082612549565b9161257e6040519384612397565b82948184528183011161028e578281602093845f960137010152565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b903590609e198136030182121561028e570190565b903590601e198136030182121561028e57018035906001600160401b03821161028e57602001918160061b3603831361028e57565b91908110156126185760061b0190565b634e487b7160e01b5f52603260045260245ffd5b356001600160a01b038116810361028e5790565b9081602091031261028e5751801515810361028e5790565b903590601e198136030182121561028e57018035906001600160401b03821161028e5760200191813603831361028e57565b90604061269783806125be565b013542116128ce5760806126ab83806125be565b013546036128bf576126c06102cf83806125be565b91825f52603b60205260ff60405f20541661035d57825f52603e60205260ff60405f2054166128b05760325491926001600160a01b03909216915f5b6127096108a284806125be565b905081101561279b5761272c6105ac826127266108a287806125be565b90612608565b604051633af32abf60e01b81526001600160a01b039091166004820152602081602481885afa9081156106f1575f9161277d575b501561276e576001016126fc565b63727d6cc160e11b5f5260045ffd5b612795915060203d8111610df457610de68183612397565b5f612760565b50925f5b6127ac610aab84806125be565b9050811015612829576127c96105ac82612726610aab87806125be565b604051633af32abf60e01b81526001600160a01b039091166004820152602081602481885afa9081156106f1575f9161280b575b501561276e5760010161279f565b612823915060203d8111610df457610de68183612397565b5f6127fd565b5092915061285661283f60606102ec84806125be565b836128506103216020860186612658565b916131cf565b1561034e5760608101916001600160a01b036128718461262c565b163314159283612888575b50505061034e57600190565b6128a7935061032161289c6128509261262c565b936040810190612658565b155f808061287c565b635a46110b60e11b5f5260045ffd5b633d23e4d160e11b5f5260045ffd5b631cc67e8160e11b5f5260045ffd5b906128e7826123b8565b6128f46040519182612397565b8281528092612905601f19916123b8565b0190602036910137565b80518210156126185760209160051b010190565b9061292e82516128dd565b915f5b81518110156129ba576001906001600160a01b0361294f828561290f565b515116602061295e838661290f565b5101516040519060208201927fc50869832c5323871a3242ef04ca140d16abdc89eb6ac3d53c8b228fa7412242845260408301526060820152606081526129a6608082612397565b5190206129b3828761290f565b5201612931565b5050565b80516020909101905f5b8181106129d55750505090565b82518452602093840193909201916001016129c8565b612ac990612a066123506129ff83806125d3565b36916123e5565b604051612a2981612a1b6020820180956129be565b03601f198101835282612397565b519020906080612a4261228b6129ff60208501856125d3565b604051612a5781612a1b6020820180956129be565b51902091612a676060820161262c565b6040519360208501957f0c52781acc9d951db9437e5bf6c80810285d7db25ea44ff2a2974360496b378687526040860152606085015260408201358385015260018060a01b031660a0840152013560c082015260c08152610fef60e082612397565b90565b90612ad782516128dd565b915f5b81518110156129ba576001906001600160a01b03612af8828561290f565b5151166020612b07838661290f565b5101516040519060208201927f7c11a0867f883203b7d1355a0db6bc0e65539976367943db1126636a87e6a26f84526040830152606082015260608152612b4f608082612397565b519020612b5c828761290f565b5201612ada565b15612b6a57565b60405162461bcd60e51b815260206004820152601e60248201527f4f6e6c79206d61726b6574706c61636541646d696e2063616e2063616c6c00006044820152606490fd5b91908110156126185760051b8101359061013e198136030182121561028e570190565b91908203918211612bdf57565b634e487b7160e01b5f52601160045260245ffd5b91908201809211612bdf57565b15612c0757565b60405162461bcd60e51b815260206004820152601b60248201527f53656c6c657220616d6f756e742062656c6f77206d696e696d756d00000000006044820152606490fd5b604081013515612e7657608081013542116128ce574660c0820135036128bf57612c7581612e91565b90815f52603c60205260ff60405f205416612e6757815f52603960205260ff60405f2054166121ea576032546001600160a01b03166020612cb58361262c565b604051633af32abf60e01b81526001600160a01b03909116600482015291829060249082905afa9081156106f1575f91612e48575b501561276e5760249160206001600160a01b03612d068461262c565b16604051948580926331a9108f60e11b82528487013560048301525afa9283156106f1575f93612e04575b5060a08201926001600160a01b03612d488561262c565b166001600160a01b039091160361036c57610160820192612d688461262c565b6001600160a01b03612d798361262c565b6001600160a01b03909216911614612df557612d97612da99161262c565b82612850610321610120870187612658565b1561034e576001600160a01b03612dbf8461262c565b163314159283612dd55750505061034e57600190565b6128a79350610321612de96128509261262c565b93610140810190612658565b631e4ec46b60e01b5f5260045ffd5b9092506020813d602011612e40575b81612e2060209383612397565b8101031261028e57516001600160a01b038116810361028e57915f612d31565b3d9150612e13565b612e61915060203d602011610df457610de68183612397565b5f612cea565b630c7eaf0560e41b5f5260045ffd5b62bfc92160e01b5f5260045ffd5b35801515810361028e5790565b612ac990612e9e8161262c565b9061010060018060a01b036033541691612eba60a0820161262c565b612ec660e08301612e84565b906040519460208601967f9921f6bf39a03a8c4e69db31183ec8d7eca008c9f129652272d30ffc1baa98d7885260018060a01b031660408701526020840135606087015260408401356080870152606084013560a087015260c0860152608083013560e086015260018060a01b03168385015260c0820135610120850152151561014084015201356101608201526101608152610fef61018082612397565b612ac990612f728161262c565b9060c060018060a01b036033541691612f8d6080820161262c565b6040519360208501957fc23a2bd2891662f17b6bbc148acc129f41e8c0899f3aae008e484a0e8a650bc6875260018060a01b03166040860152602083013560608601526040830135608086015260a085015260608201358385015260018060a01b031660e084015260a081013561010084015201356101208201526101208152610fef61014082612397565b91908110156126185760051b81013590607e198136030182121561028e570190565b91908110156126185760051b8101359061017e198136030182121561028e570190565b604081013515612e7657606081013542116131a2574660a0820135036128bf5761308781612f65565b90815f52603d60205260ff60405f20541661319357815f52603a60205260ff60405f2054166120ec576032546001600160a01b031660206130c78361262c565b604051633af32abf60e01b81526001600160a01b03909116600482015291829060249082905afa9081156106f1575f91613174575b501561276e576131226131116080830161262c565b8361285061032160e0860186612658565b1561034e576101208101916001600160a01b0361313e8461262c565b1633141592836131545750505061034e57600190565b6128a793506103216131686128509261262c565b93610100810190612658565b61318d915060203d602011610df457610de68183612397565b5f6130fc565b63ae39d65560e01b5f5260045ffd5b639cb1308760e01b5f5260045ffd5b600411156131bb57565b634e487b7160e01b5f52602160045260245ffd5b9190823b61320a57906131e19161356f565b506131eb816131b1565b1591826131f757505090565b6001600160a01b03918216911614919050565b915f92612a1b61324085946040519283916020830195630b135d3f60e11b8752602484015260406044840152606483019061259a565b51915afa61324c613540565b8161327d575b8161325b575090565b805160208083019350908201919091031261028e5751630b135d3f60e11b1490565b905060208151101590613252565b6042906132966136de565b906040519161190160f01b8352600283015260228201522090565b60405163a9059cbb60e01b60208201526001600160a01b0390921660248301526044808301939093529181526132f1916132ec606483612397565b6135a9565b565b60025f80516020613935833981519152541461331c5760025f8051602061393583398151915255565b633ee5aeb560e01b5f5260045ffd5b6133386127108383613601565b90612ac9926127109109151590612bf3565b6040516323b872dd60e01b60208201526001600160a01b0392831660248201529290911660448301526064808301939093529181526132f1916132ec608483612397565b90600182811c921680156133bc575b60208310146133a857565b634e487b7160e01b5f52602260045260245ffd5b91607f169161339d565b604051905f825f805160206138d583398151915254916133e58361338e565b80835292600181169081156134745750600114613409575b6132f192500383612397565b505f805160206138d58339815191525f90815290917f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d5b8183106134585750509060206132f1928201016133fd565b6020919350806001915483858901015201910190918492613440565b602092506132f194915060ff191682840152151560051b8201016133fd565b604051905f825f805160206138f583398151915254916134b28361338e565b808352926001811690811561347457506001146134d5576132f192500383612397565b505f805160206138f58339815191525f90815290917f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b755b8183106135245750509060206132f1928201016133fd565b602091935080600191548385890101520191019091849261350c565b3d1561356a573d9061355182612549565b9161355f6040519384612397565b82523d5f602084013e565b606090565b815191906041830361359f576135989250602082015190606060408401519301515f1a90613745565b9192909190565b50505f9160029190565b905f602091828151910182855af1156106f1575f513d6135f857506001600160a01b0381163b155b6135d85750565b635274afe760e01b5f9081526001600160a01b0391909116600452602490fd5b600114156135d1565b91818302915f198185099383808610950394808603951461369157848311156136795790829109815f0382168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b82634e487b715f52156003026011186020526024601cfd5b50508092501561369f570490565b634e487b7160e01b5f52601260045260245ffd5b60ff5f805160206139558339815191525460401c16156136cf57565b631afcd79f60e31b5f5260045ffd5b6136e66137c7565b6136ee613831565b6040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a0815261373f60c082612397565b51902090565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084116137bc579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa156106f1575f516001600160a01b038116156137b257905f905f90565b505f906001905f90565b5050505f9160039190565b6137cf6133c6565b80519081156137df576020012090565b50507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10054801561380c5790565b507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47090565b613839613493565b8051908115613849576020012090565b50507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10154801561380c5790565b9061389a575080511561388b57805190602001fd5b63d6bda27560e01b5f5260045ffd5b815115806138cb575b6138ab575090565b639996b31560e01b5f9081526001600160a01b0391909116600452602490fd5b50803b156138a356fea16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d102a16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a2646970667358221220ae8731317b75c61e2ee164e20159f8254351944d2b6163b8675e8569b2dc556e64736f6c634300081a0033