0 txs
20 calls
constructor
constructor()
functions
allowNativeToken
viewfunction allowNativeToken() view returns (bool)
autoSwapEnabled
viewfunction autoSwapEnabled() view returns (bool)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
enableRoyalty
viewfunction enableRoyalty() view returns (bool)
generateListingId
purefunction generateListingId(address tokenAddress, uint256 tokenId) pure returns (bytes32)
getClaimEndTime
viewfunction getClaimEndTime(bytes32 _listingId) view returns (uint256)
getHighestBidInfo
viewfunction getHighestBidInfo(bytes32 _listingId) view returns (address, uint256)
getListing
viewfunction getListing(bytes32 _listingId) view returns (tuple)
getListingTimestamp
viewfunction getListingTimestamp(bytes32 _listingId) view returns (uint64)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getStartingBid
viewfunction getStartingBid(bytes32 _listingId) view returns (uint256)
getTargetBid
viewfunction getTargetBid(bytes32 _listingId) view returns (uint256)
getUserAuctions
viewfunction getUserAuctions(address _user) view returns (bytes32[] listingIds)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
isClaimable
viewfunction isClaimable(bytes32 _listingId) view returns (bool)
listingCancelCooldown
viewfunction listingCancelCooldown() view returns (uint64)
lpRouter
viewfunction lpRouter() view returns (address)
MANAGER_ROLE
viewfunction MANAGER_ROLE() view returns (bytes32)
MINIMUM_BID
viewfunction MINIMUM_BID() view returns (uint256)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
taxReceiver
viewfunction taxReceiver() view returns (address)
treasuryManager
viewfunction treasuryManager() view returns (address)
unitTokenAddress
viewfunction unitTokenAddress() view returns (address)
UPGRADER_ROLE
viewfunction UPGRADER_ROLE() view returns (bytes32)
whitelistedPaymentTokens
viewfunction whitelistedPaymentTokens(address paymentTokenAddress) view returns (bool)
whitelistedTokens
viewfunction whitelistedTokens(address tokenAddress) view returns (bool)
addPaymentToken
nonpayablefunction addPaymentToken(address tokenAddress)
addToken
nonpayablefunction addToken(address tokenAddress)
bulkAddPaymentToken
nonpayablefunction bulkAddPaymentToken(address[] tokenAddress)
bulkAddToken
nonpayablefunction bulkAddToken(address[] tokenAddress)
bulkRemovePaymentToken
nonpayablefunction bulkRemovePaymentToken(address[] tokenAddress)
bulkRemoveToken
nonpayablefunction bulkRemoveToken(address[] tokenAddress)
buy
payablefunction buy(bytes32 _listingId) payable
cancelListing
nonpayablefunction cancelListing(bytes32 _listingId)
cancelListingByManager
nonpayablefunction cancelListingByManager(bytes32 _listingId)
claimBid
nonpayablefunction claimBid(bytes32 _listingId)
createAuctionListing
nonpayablefunction createAuctionListing(address tokenAddress, uint256 tokenId, uint256 amount, uint256 startingBid, uint256 targetBid, uint256 buyoutPrice, address paymentToken, uint64 duration)
createFixedListing
nonpayablefunction createFixedListing(address tokenAddress, uint256 tokenId, uint256 amount, uint256 price, address paymentToken, uint64 duration)
editListing
nonpayablefunction editListing(bytes32 _listingId, uint256 newPrice, uint256 newStartingBid, uint256 newTargetBid)
endAuction
nonpayablefunction endAuction(bytes32 _listingId)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
initialize
nonpayablefunction initialize(address _upgrader, address _manager, address _taxReceiver, bool _allowNativeToken, bool _enableRoyalty, uint64 _listingCancelCooldown, bool _autoSwapEnabled)
placeBid
payablefunction placeBid(bytes32 _listingId, uint256 bidAmount) payable
removePaymentToken
nonpayablefunction removePaymentToken(address tokenAddress)
removeToken
nonpayablefunction removeToken(address tokenAddress)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
setTaxReceiver
nonpayablefunction setTaxReceiver(address _taxReceiver)
setTreasuryManager
nonpayablefunction setTreasuryManager(address _treasuryManager)
setUniswapRouter
nonpayablefunction setUniswapRouter(address _router)
setUnitTokenAddress
nonpayablefunction setUnitTokenAddress(address _unitTokenAddress)
updateAllowNativeToken
nonpayablefunction updateAllowNativeToken(bool status)
updateAutoSwapStatus
nonpayablefunction updateAutoSwapStatus(bool _status)
updateCancelListingCooldown
nonpayablefunction updateCancelListingCooldown(uint64 _listingCancelCooldown)
withdrawBid
nonpayablefunction withdrawBid(bytes32 _listingId)
events
AuctionEnded
event AuctionEnded(bytes32 indexed listingId, uint256 indexed tokenId, address indexed tokenAddress, address winner, uint256 winningBid, uint64 timestamp)
BidClaimed
event BidClaimed(bytes32 indexed listingId, address indexed bidder, address paymentToken, uint256 bidAmount, uint64 timestamp)
BidPlaced
event BidPlaced(bytes32 indexed listingId, uint256 indexed tokenId, address indexed tokenAddress, address bidder, uint256 bidAmount, uint64 timestamp)
BidWithdrawn
event BidWithdrawn(bytes32 indexed listingId, address indexed bidder, address paymentToken, uint256 bidAmount, uint64 timestamp)
BulkPaymentTokenAdded
event BulkPaymentTokenAdded(address[] tokenAddresses, uint64 timestamp)
BulkPaymentTokenRemoved
event BulkPaymentTokenRemoved(address[] tokenAddresses, uint64 timestamp)
BulkTokenAdded
event BulkTokenAdded(address[] tokenAddresses, uint64 timestamp)
BulkTokenRemoved
event BulkTokenRemoved(address[] tokenAddresses, uint64 timestamp)
Initialized
event Initialized(uint64 version)
ListingCancelled
event ListingCancelled(bytes32 indexed listingId, uint256 indexed tokenId, address indexed tokenAddress, address seller, uint64 timestamp)
ListingCreated
event ListingCreated(bytes32 indexed listingId, uint256 indexed tokenId, address indexed seller, address tokenAddress, address paymentToken, uint256 amount, uint256 price, uint8 tokenType, uint8 listingType, uint256 startingBid, uint256 targetBid, uint64 listingEndTime, uint64 timestamp)
ListingSold
event ListingSold(bytes32 indexed listingId, uint256 indexed tokenId, address indexed seller, address tokenAddress, address paymentToken, address buyer, uint256 amount, uint256 price, uint64 timestamp)
ListingUpdated
event ListingUpdated(bytes32 indexed listingId, uint256 price, uint256 startingBid, uint256 targetBid, uint8 listingType, uint64 timestamp)
PaymentTokenAdded
event PaymentTokenAdded(address indexed tokenAddress, uint64 timestamp)
PaymentTokenRemoved
event PaymentTokenRemoved(address indexed tokenAddress, uint64 timestamp)
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)
TaxReceiverUpdated
event TaxReceiverUpdated(address indexed newTaxReceiver)
TokenAdded
event TokenAdded(address indexed tokenAddress, uint64 timestamp)
TokenRemoved
event TokenRemoved(address indexed tokenAddress, uint64 timestamp)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
ErrorAddressZero
error ErrorAddressZero()
ErrorAuctionEnded
error ErrorAuctionEnded(bytes32 listingId)
ErrorAuctionNotClaimable
error ErrorAuctionNotClaimable(bytes32 listingId)
ErrorBidTooLow
error ErrorBidTooLow(bytes32 listingId, uint256 bidAmount)
ErrorCallerNotEnoughBalance
error ErrorCallerNotEnoughBalance(address caller, address token, uint256 required, uint256 balance)
ErrorCallerNotSeller
error ErrorCallerNotSeller(address caller, bytes32 listingId)
ErrorCannotCancelAuction
error ErrorCannotCancelAuction()
ErrorInvalidAddress
error ErrorInvalidAddress()
ErrorInvalidAmount
error ErrorInvalidAmount()
ErrorInvalidListingDuration
error ErrorInvalidListingDuration()
ErrorInvalidPrice
error ErrorInvalidPrice()
ErrorInvalidTokenType
error ErrorInvalidTokenType()
ErrorlistingEndTimeNotMet
error ErrorlistingEndTimeNotMet(bytes32 listingId)
ErrorListingNotActive
error ErrorListingNotActive(bytes32 listingId)
ErrorListingNotAuction
error ErrorListingNotAuction(bytes32 listingId)
ErrorNativePaymentTokenNotAllowed
error ErrorNativePaymentTokenNotAllowed()
ErrorNoBuyoutPrice
error ErrorNoBuyoutPrice(bytes32 listingId)
ErrorNoUserBid
error ErrorNoUserBid(bytes32 listingId)
ErrorPaymentTokenNotWhitelisted
error ErrorPaymentTokenNotWhitelisted(address paymentToken)
ErrorSameValue
error ErrorSameValue()
ErrorTokenAlreadyListed
error ErrorTokenAlreadyListed(address tokenAddress, uint256 tokenId)
ErrorTokenNotWhitelisted
error ErrorTokenNotWhitelisted(address tokenAddress)
InvalidInitialization
error InvalidInitialization()
NotInitializing
error NotInitializing()
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
creation bytecode
0x6080806040523460aa575f5160206155665f395f51905f525460ff8160401c16609b576002600160401b03196001600160401b038216016049575b6040516154b790816100af8239f35b6001600160401b0319166001600160401b039081175f5160206155665f395f51905f525581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f80603a565b63f92ee8a960e01b5f5260045ffd5b5f80fdfe6080604052600436101561001a575b3615610018575f80fd5b005b5f5f3560e01c806301db46a014613ba257806301ffc9a714613ae65780630572c67414613a3957806308b8597414613a0f5780630c8106dc146139e8578063175c0d16146138b45780631dbec3961461385f5780631f658fbd14613834578063248a9ca3146137f45780632f2ff15d146137a957806336568abe1461374b578063366578c7146137215780633cea70d9146136fa578063455f468f146136815780634a7dc8e0146135f55780635262e70c1461358c57806358862ac1146135585780635ca551e9146135325780635eb374c7146133205780635fa7b584146132955780635fb3c39c146131f6578063628232b614613149578063875aa1d014612ac1578063877fa6371461239657806391d148541461233f5780639299e55214612192578063955229811461216b5780639a4484cc146120bd5780639c9a1061146119a7578063a0c7489d14611981578063a217fddf14611965578063a5125421146118da578063a6f3a14d14611557578063ade20ca61461153b578063b8a6f01f146114eb578063bca1aaa314611031578063be80b05b1461100b578063bea9849e14610f8e578063c14689a514610f29578063c38e7c4e14610eff578063cd8de42c14610e95578063d48bfca714610e09578063d547741f14610db5578063daf9c21014610d8e578063df695abb14610d4b578063e6ef73d614610d24578063ec87621c14610ce9578063edc1e3ec14610ab8578063ef8c5d34146108c6578063f72c0d8b1461088b578063f7fd24c7146104fc578063fa265333146104b6578063fe47a9f214610449578063ff3ad0b41461034f5763ffdfbdaf14610282575061000e565b3461034c5761029036614591565b919061029a6147bc565b815b8381106102e857507fc163c72f9ec30ee2f229dfa5b39a7b0003a4a448352734f5ad6cbb7e2994c6d291926102e260405192839267ffffffffffffffff42169184614720565b0390a180f35b8061031b6001600160a01b0361030961030460019589886146e8565b61470c565b165f52600360205260405f2054151590565b15610327575b0161029c565b6103466001600160a01b036103406103048489886146e8565b16615343565b50610321565b80fd5b503461034c57602036600319011261034c576001600160a01b036103716145e5565b1680825260106020526040822054610388816147a4565b906103966040519283614668565b8082526103a2816147a4565b602083019390601f1901368537845b8281106103fd5750505090604051928392602084019060208552518091526040840192915b8181106103e4575050500390f35b82518452859450602093840193909201916001016103d6565b818652601060205261041281604088206150b2565b90549060031b1c845182101561043557600582901b8501602001526001016103b1565b602487634e487b7160e01b81526032600452fd5b503461034c57602036600319011261034c576001600160a01b0361046b6145e5565b6104736147bc565b16801561048e576001600160a01b0319600554161760055580f35b6004827fdc664dda000000000000000000000000000000000000000000000000000000008152fd5b503461034c57602036600319011261034c57600435808252600a6020908152604080842054928452600b8252928390205483516001600160a01b03909316835290820152f35b503461034c57602036600319011261034c57600435808252600f602052600160ff6040842054160361087957610530614878565b338252601060205261055381604084206001915f520160205260405f2054151590565b1561084e57808252600860205260016040832060066040519161057583614637565b805483528381015460208401526001600160a01b03600282015416604084015260038101546060840152600481015460808401526001600160a01b0360058201541660a08401520154906001600160a01b03821660c082015261010067ffffffffffffffff60ff8460a01c16938460e085015260a81c169101520361083c57808252600d6020526001600160a01b0360408320541690808352600c602052604083206001600160a01b0333165f5260205260405f20549133845260106020526106418260408620615241565b5081845260116020526106573360408620615241565b50818452600c602052604084206001600160a01b0333165f526020528360405f2055818452600a602052336001600160a01b036040862054161461077a575b8061074557838084801561073b575b8280929181923390f115610730576107197f85f6cd57a51efbf5b15b4f2680d13bce7b799621f9a6ca7bed446d086f37baa2915b604051918291339667ffffffffffffffff4216918491604091949367ffffffffffffffff916001600160a01b036060860197168552602085015216910152565b0390a360015f5160206154625f395f51905f525580f35b6040513d85823e3d90fd5b6108fc91506106a5565b6107197f85f6cd57a51efbf5b15b4f2680d13bce7b799621f9a6ca7bed446d086f37baa2916107758533836149e4565b6106d9565b81845260136020526040842054849083865260116020526040862054865b8181106107d8575050838652600b6020526040862055828552600a6020526001600160a01b036040862091166001600160a01b0319825416179055610696565b85885260116020526001600160a01b036107f58260408b206150b2565b90549060031b1c16868952600c602052604089206001600160a01b0382165f5260205260405f205484811161082f575b5050600101610798565b909450925060015f610825565b63ddd62ef360e01b8252600452602490fd5b7f79ec1d3f000000000000000000000000000000000000000000000000000000008252600452602490fd5b6366b9cfc760e01b8252600452602490fd5b503461034c578060031936011261034c5760206040517f189ab7a9244df0848122154315af71fe140f3db0fe014031783b0946b8c9d2e38152f35b503461034c57602036600319011261034c576004356108e36147bc565b808252600f602052600160ff6040842054160361087957610902614878565b8082526008602052604082206040519161091b83614637565b815483527fbe613cd95a541f113a3b65266d5e5c7986d6577792f1c617a04060a3bda3a17e610a4f6001600160a01b0380600186015460208801908152600160ff60068460028b0154169960408c019a8b52600381015460608d0152600481015460808d01528560058201541660a08d0152015460c08b019a8582168c5261010067ffffffffffffffff60e0830193858160a01c16855260a81c16910152888c5260086020526109f160408d2060065f918281558260018201558260028201558260038201558260048201558260058201550155565b511614610a66575b858952600f60205260408920600360ff198254161790555195511695511660405191829167ffffffffffffffff4216908390929167ffffffffffffffff6020916001600160a01b03604085019616845216910152565b0390a460015f5160206154625f395f51905f525580f35b610a6f86614a47565b858952600a602052604089206001600160a01b03198154169055858952600b602052886040812055858952601260205288604081205585895260136020528860408120556109f9565b503461034c57608036600319011261034c5760043560243560443560643590838552600f602052600160ff60408720541603610cd657610af6614878565b8385526008602052604085209060068201928354336001600160a01b03821603610cbf5760a01c60ff1680610bab575050508215610b9c579160ff60a0928260047f9840877da3c838d66f16820bbfaf44ca6a7f90809e8b35b4e16ac41cdbfc65e196015554831c16604051918252856020830152856040830152606082015267ffffffffffffffff42166080820152a25b60015f5160206154625f395f51905f525580f35b600485636262a28360e11b8152fd5b919390929091600114610bc4575b505050505050610b88565b60018410610ca757838310610ca75784151580610cb6575b610ca757858752600b6020526040872054151580610c91575b610c7a579160ff60a094928660047f9840877da3c838d66f16820bbfaf44ca6a7f90809e8b35b4e16ac41cdbfc65e198968a8c5260136020528660408d20558a8c5260126020528560408d2055015554851c169160405193845260208401526040830152606082015267ffffffffffffffff42166080820152a25f8080808080610bb9565b604487858863da24f68960e01b8352600452602452fd5b50858752600b6020526040872054841015610bf5565b600487636262a28360e11b8152fd5b50828510610bdc565b60448888635c3ac9e960e01b825233600452602452fd5b602485856366b9cfc760e01b8252600452fd5b503461034c578060031936011261034c5760206040517f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b088152f35b503461034c578060031936011261034c5760206001600160a01b0360045416604051908152f35b503461034c57602036600319011261034c576020610d846001600160a01b03610d726145e5565b165f52600160205260405f2054151590565b6040519015158152f35b503461034c57602036600319011261034c576020610d846001600160a01b036103096145e5565b503461034c57604036600319011261034c57610e05600435610dd56145fb565b90610e00610dfb825f525f5160206154425f395f51905f52602052600160405f20015490565b61482b565b614f4d565b5080f35b503461034c57602036600319011261034c576001600160a01b03610e2b6145e5565b610e336147bc565b16610e49815f52600360205260405f2054151590565b15610e86575b7f17b564256787f4a9080168e0fd930025d33fee9f7882709fbb1a4064ef85bcb2602060405167ffffffffffffffff42168152a280f35b610e8f81615343565b50610e4f565b503461034c57602036600319011261034c576001600160a01b03610eb76145e5565b610ebf6147bc565b16801561048e57806001600160a01b031960045416176004557f93f0a3a4f2fc8865a3fb4dc877b0fca20a526f77982a942687cc22533e3e483c8280a280f35b503461034c57602036600319011261034c5760406020916004358152600983522054604051908152f35b503461034c57604036600319011261034c576020610f456145e5565b60405160609190911b6bffffffffffffffffffffffff1916828201908152602435601482015290610f8381603484015b03601f198101835282614668565b519020604051908152f35b503461034c57602036600319011261034c576001600160a01b03610fb06145e5565b610fb86147bc565b16801561048e576007546001600160a01b0381168214610fe3576001600160a01b0319161760075580f35b6004837f4749b1bf000000000000000000000000000000000000000000000000000000008152fd5b503461034c578060031936011261034c57602060ff60075460a01c166040519015158152f35b50604036600319011261034c5760043560243590808352600f602052600160ff604085205416036114d957611064614878565b808352600860205260408320906040519161107e83614637565b80548352600181015490602084019182526001600160a01b0360028201541693604081019485526003820154606082015260048201546080820152600160066001600160a01b036005850154169360a084019485520154916001600160a01b03831660c082015267ffffffffffffffff61010060ff8560a01c16928360e0820152019360a81c168352036114c6575167ffffffffffffffff1642101561149a57828652600b60205284604087205410801590611485575b61146e57828652600c602052604086206001600160a01b0333165f5260205261116260405f2054866146bb565b906001600160a01b038151169081155f146113035750508034106112d95750610a4f6001600160a01b037f770651bbe3b4fa7f276817873a95cd196b0109090bce22c54445dc1e831b3971925b33885260106020526111d28560408a206001915f520160205260405f2054151590565b156112be575b84885260116020526111fb3360408a206001915f520160205260405f2054151590565b156112a3575b848852600c602052604088208233165f526020528660405f2055848852600a602052604088208233166001600160a01b0319825416179055848852600c602052604088208233165f5260205260405f2054858952600b6020526040892055519451169460405191829167ffffffffffffffff421690338491604091949367ffffffffffffffff916001600160a01b036060860197168552602085015216910152565b84885260116020526112b83360408a20615398565b50611201565b33885260106020526112d38560408a20615398565b506111d8565b8560849160405191631c3fef8f60e21b835233600484015260248301526044820152346064820152fd5b6040516370a0823160e01b8152336004820152602081602481865afa80156114635784918a9161142e575b501061137557507f770651bbe3b4fa7f276817873a95cd196b0109090bce22c54445dc1e831b397192611370610a4f936001600160a01b039330903390614fea565b6111af565b8760206001600160a01b03602493511693604051938480926370a0823160e01b82523360048301525afa90811561142257906113ea575b604051631c3fef8f60e21b81523360048201526001600160a01b039093166024840152604483019390935250606481019190915280608481015b0390fd5b506020813d60201161141a575b8161140460209383614668565b81010312611416576113e690516113ac565b5f80fd5b3d91506113f7565b604051903d90823e3d90fd5b9150506020813d60201161145b575b8161144a60209383614668565b81010312611416578390515f61132e565b3d915061143d565b6040513d8b823e3d90fd5b604486868563da24f68960e01b8352600452602452fd5b50828652601360205284604087205411611135565b602486847fb6f1f12a000000000000000000000000000000000000000000000000000000008252600452fd5b6024878563ddd62ef360e01b8252600452fd5b6366b9cfc760e01b8352600452602482fd5b503461034c57602036600319011261034c57611505614611565b61150d6147bc565b6007549015158060ff8360a01c16151514610fe35760ff60a01b60ff60a01b199160a01b1691161760075580f35b503461034c578060031936011261034c57602060405160018152f35b503461034c5760e036600319011261034c576115716145e5565b6115796145fb565b6044356001600160a01b0381168091036118d657606435908115158092036118d257608435908115158092036118ce576115b1614620565b9060c435948515158096036118ca577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00549667ffffffffffffffff60ff8960401c16159816801590816118c2575b60011490816118b8575b1590816118af575b506118875787600167ffffffffffffffff197ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005416177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055611827575b6001600160a01b038116158015611816575b801561180e575b6117e65775ff0000000000000000000000000000000000000000009392916116e46116ea926116b46153ea565b6116bc6153ea565b6116c46153ea565b60015f5160206154625f395f51905f52556116de33614c5f565b50614d0e565b50614dda565b506001600160a01b031960045416176004557fffff00000000000000000000ffffffffffffffffffffffffffffffffffffffff60ff60a01b67ffffffffffffffff60b01b6005549360b01b169560a01b169116179160a81b16171760055560ff60a01b1960ff60a01b6007549260a01b169116176007556117685780f35b68ff0000000000000000197ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a180f35b6004897f010b179a000000000000000000000000000000000000000000000000000000008152fd5b508215611687565b506001600160a01b03821615611680565b6801000000000000000068ff0000000000000000197ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005416177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005561166e565b6004897ff92ee8a9000000000000000000000000000000000000000000000000000000008152fd5b9050155f611611565b303b159150611609565b8991506115ff565b8780fd5b8580fd5b8480fd5b8380fd5b503461034c57602036600319011261034c576001600160a01b036118fc6145e5565b6119046147bc565b1661191a815f52600160205260405f2054151590565b611956575b7f2a3ce10726676ad1b5ee6f8d64d312f05ed4362f81ccfc07d20abe6a78c71166602060405167ffffffffffffffff42168152a280f35b61195f816150c7565b5061191f565b503461034c578060031936011261034c57602090604051908152f35b503461034c578060031936011261034c57602060ff60055460a81c166040519015158152f35b50602036600319011261034c57600435808252600f602052600160ff60408420541603610879576119d6614878565b80825260086020526040822090604051906119f082614637565b825482526001830154602083019081526001600160a01b0360028501541693604084019485526003810154916060850192835260048201549060808601918252600160066001600160a01b036005860154169460a08901958652015460c08801976001600160a01b038216895261010067ffffffffffffffff60ff8460a01c16938460e085015260a81c1691015214806120b4575b6120885787889060ff60055460a81c16611fe1575b611aad6001600160a01b038a51166148c9565b916001600160a01b0386511680155f14611da457509084513403611d9557908a9291838080806001600160a01b038e5116611ae886346146bb565b90828215611d8c575bf1156107305783918115908115611d4f575b5050505060ff905b1680611c6d57506001600160a01b038851166001600160a01b038851168351823b156118d657604051632142170760e11b81526001600160a01b0392909216600483015233602483015260448201529082908290606490829084905af18015611c6257611c44575b50916001600160a01b0380807ffe0aaf72ecc22b14978219fed236cb1202a5100a010842bd7615baec7ca789c99794611bde604060c099985b8c815260086020522060065f918281558260018201558260028201558260038201558260048201558260058201550155565b898d52600f60205260408d20600460ff1982541617905551995116995116935116915190519160405193845260208401523360408401526060830152608082015267ffffffffffffffff421660a0820152a460015f5160206154625f395f51905f525580f35b90611c5481809794969593614668565b6118d257919290935f611b73565b6040513d84823e3d90fd5b600114611cb1575b916001600160a01b0380807ffe0aaf72ecc22b14978219fed236cb1202a5100a010842bd7615baec7ca789c99794611bde604060c09998611bac565b6001600160a01b038851166001600160a01b03885116835191875190803b156118d257604051637921219560e11b81526001600160a01b039390931660048401523360248401526044830193909352606482015260a060848201525f60a4820152908290829060c490829084905af18015611c6257611d31575b50611c75565b90611d4181809794969593614668565b6118d257919290935f611d2b565b8392839283928391611d82575b6001600160a01b031690f115611d7557815f8080611b03565b50604051903d90823e3d90fd5b6108fc9150611d5c565b506108fc611af1565b60048b636262a28360e11b8152fd5b6040516370a0823160e01b8152336004820152602081602481855afa908115611fd6578d91611fa4575b508651809110611f335750908b939291611dff6001600160a01b038c5116611df7858a516146bb565b903384614fea565b82611e10575b50505060ff90611b0b565b6001600160a01b038851166001600160a01b03600654168091149081611f1e575b81611f14575b5080611f00575b80611ef1575b15611edc5782611e62916001600160a01b0360055416903390614fea565b6001600160a01b036005541691823b156118d257604051630bdff96560e31b81526001600160a01b0392909216600483015260248201529083908290604490829084905af1908115610730578391611ec3575b505060ff905b905f80611e05565b81611ecd91614668565b611ed857815f611eb5565b5080fd5b91611eec9160ff94933390614fea565b611ebb565b5060ff60075460a01c16611e44565b506001600160a01b03600554161515611e3e565b905015155f611e37565b6007546001600160a01b031615159150611e31565b9060248d60206001600160a01b038b511693604051938480926370a0823160e01b82523360048301525afa90811561142257906113ea57604051631c3fef8f60e21b81523360048201526001600160a01b039390931660248401526044830193909352506064810191909152608490fd5b90506020813d602011611fce575b81611fbf60209383614668565b8101031261141657515f611dce565b3d9150611fb2565b6040513d8f823e3d90fd5b6001600160a01b038951166040845160448751918351948593849263152a902d60e11b8452600484015260248301525afa808c928d92612054575b50612029575b5050611a9a565b6001600160a01b03821615158061204b575b1561202257915091505f80612022565b5080151561203b565b909250612079915060403d604011612081575b6120718183614668565b81019061469e565b90915f61201c565b503d612067565b602488867f74f78a40000000000000000000000000000000000000000000000000000000008252600452fd5b50815115611a85565b503461034c576120cc36614591565b91906120d66147bc565b815b83811061211e57507f96d4ec8feb7f34c0d92af17b3c23e049eafdf71422148c3f6aa4e2a1498fb45191926102e260405192839267ffffffffffffffff42169184614720565b8061213a6001600160a01b03610d7261030460019589886146e8565b15612146575b016120d8565b6121656001600160a01b0361215f6103048489886146e8565b166152f2565b50612140565b503461034c578060031936011261034c5760206001600160a01b0360065416604051908152f35b503461034c57602036600319011261034c57600435808252600f602052600160ff60408420541603610879576121c6614878565b808252600860205260408220604051916121df83614637565b8154835260018201546020840190815260066001600160a01b03600285015416936040860194855260038101546060870152600481015460808701526001600160a01b0360058201541660a087015201546001600160a01b03811660c086019581875261010067ffffffffffffffff60e083019460ff8160a01c16865260a81c16910152330361232857600160ff825116146122e1575b6001600160a01b03807fbe613cd95a541f113a3b65266d5e5c7986d6577792f1c617a04060a3bda3a17e93600160ff610a4f95888c5260086020526109f160408d2060065f918281558260018201558260028201558260038201558260048201558260058201550155565b828652600b60205260408620548387526012602052604087205411612276576004867fb3257d59000000000000000000000000000000000000000000000000000000008152fd5b60448684635c3ac9e960e01b825233600452602452fd5b503461034c57604036600319011261034c576001600160a01b0360406123636145fb565b9260043581525f5160206154425f395f51905f526020522091165f52602052602060ff60405f2054166040519015158152f35b503461034c5761010036600319011261034c576123b16145e5565b6024356044356064356084359360a4359460c435926001600160a01b0384168094036118ca5760e43567ffffffffffffffff8116809103612abd576001600160a01b0384169761240c895f52600360205260405f2054151590565b15612aaa578515801580612a8e575b612a7b5780612a6b575b612a5c578615612a4d57612437614878565b60ff612442866148c9565b1691826128de576040516331a9108f60e11b8152600481018a90526020816024818e5afa908115612853578c916128a4575b506001600160a01b033391160361288d5760405163e985e9c560e01b81523360048201523060248201526020816044818e5afa908115612853578c9161285e575b5015806127d7575b6127a3575b60018410611d9557838510611d95578115158061279a575b611d9557801561278b576124f767ffffffffffffffff9142614797565b60405160609790971b6bffffffffffffffffffffffff191660208801908152603488018b905291169561252d8160548101610f75565b51902096878b5260086020526001600160a01b03600260408d20015416612774578a86898c8a8d6040519261256184614637565b8484526020840191825260408401908152606084019088825260808501928a845260a0860194855260c0860198338a5260e0870197600189526101008801998a52815260086020526040902095518655516001860155516001600160a01b031660028501906001600160a01b031681546001600160a01b031916179055516003840155516004830155516001600160a01b031660058201906001600160a01b031681546001600160a01b03191617905560060192516001600160a01b03166001600160a01b031683546001600160a01b03191617835551908254905160a81b67ffffffffffffffff60a81b169160a01b60ff60a01b16907fffffff000000000000000000ffffffffffffffffffffffffffffffffffffffff16171790554267ffffffffffffffff1696888c52600e60205260408c2067ffffffffffffffff891667ffffffffffffffff19825416179055888c52600f60205260408c2060ff198154166001179055888c5260136020528460408d2055888c5260126020528560408d2055888c52600d60205260408c208181546001600160a01b0319161790556040519a8b5260208b015260408a01526060890152608088015260a087016001905260c087015260e086015261010085015261012084015233926101407ffbb7c9c5c272196190f48156d10bb3d28f8c90a638cca35d18235fe9ce93b09391a460015f5160206154625f395f51905f525580f35b60448b8a8c635f89653560e11b8352600452602452fd5b60048b63e816f61960e01b8152fd5b508482106124da565b604051631c3fef8f60e21b81523360048201526001600160a01b0387166024820152600160448201525f6064820152608490fd5b5060405163020604bf60e21b8152600481018a90526020816024818e5afa908115612853578c91612815575b506001600160a01b03163014156124bd565b90506020813d60201161284b575b8161283060209383614668565b81010312612847576128419061468a565b5f612803565b8b80fd5b3d9150612823565b6040513d8e823e3d90fd5b612880915060203d602011612886575b6128788183614668565b81019061477f565b5f6124b5565b503d61286e565b60448b635c3ac9e960e01b81523360045280602452fd5b90506020813d6020116128d6575b816128bf60209383614668565b81010312612847576128d09061468a565b5f612474565b3d91506128b2565b600183036124c257604051627eeac760e11b8152336004820152602481018a90526020816044818e5afa80156128535789918d91612a18575b50106129a55760405163e985e9c560e01b81523360048201523060248201526020816044818e5afa908115612853578c91612986575b506124c257604051631c3fef8f60e21b81523360048201526001600160a01b0387166024820152604481018990525f6064820152608490fd5b61299f915060203d602011612886576128788183614668565b5f61294d565b604051627eeac760e11b8152336004820152602481018a9052889087908d6020828f8180604481015b03915afa90811561142257906113ea57604051631c3fef8f60e21b81523360048201526001600160a01b039390931660248401526044830193909352506064810191909152608490fd5b9150506020813d602011612a45575b81612a3460209383614668565b81010312611416578890515f612917565b3d9150612a27565b60048a631a4fbded60e31b8152fd5b60048a630eea332760e41b8152fd5b5060ff60055460a01c1615612425565b60248b88637d982ddb60e01b8252600452fd5b50612aa4875f52600160205260405f2054151590565b1561241b565b60248a8a637a39e08960e11b8252600452fd5b8880fd5b503461034c5760c036600319011261034c57612adb6145e5565b60243560443560643592608435906001600160a01b0382168092036118ce57612b02614620565b6001600160a01b03821695612b22875f52600360205260405f2054151590565b1561313657831580158061311a575b61310757806130f7575b6130e85780156130d95784156130ca57612b53614878565b60ff612b5e846148c9565b169182612f91576040516331a9108f60e11b81528760048201526020816024818c5afa908115612f16578a91612f57575b506001600160a01b0333911603612f405760405163e985e9c560e01b81523360048201523060248201526020816044818c5afa908115612f16578a91612f21575b501580612e9b575b612e675767ffffffffffffffff905b168015612e5857612c0167ffffffffffffffff9142614797565b60405160609590951b6bffffffffffffffffffffffff19166020860190815260348601899052911693612c378160548101610f75565b5190209485895260086020526001600160a01b03600260408b20015416612e4157888487604051612c6781614637565b818152602081018b8152604082018d815260608301878152608084019189835260a08501938d855260c0860198338a5260e08701978189526101008801998a52815260086020526040902095518655516001860155516001600160a01b031660028501906001600160a01b031681546001600160a01b031916179055516003840155516004830155516001600160a01b031660058201906001600160a01b031681546001600160a01b03191617905560060192516001600160a01b03166001600160a01b031683546001600160a01b03191617835551908254905160a81b67ffffffffffffffff60a81b169160a01b60ff60a01b16907fffffff000000000000000000ffffffffffffffffffffffffffffffffffffffff16171790554267ffffffffffffffff1694868a52600e60205260408a2067ffffffffffffffff871667ffffffffffffffff19825416179055868a52600f60205260408a2060ff19815416600117905560405198895260208901526040880152606087015260808601528560a08601528560c08601528560e086015261010085015261012084015233926101407ffbb7c9c5c272196190f48156d10bb3d28f8c90a638cca35d18235fe9ce93b09391a460015f5160206154625f395f51905f525580f35b604489888a635f89653560e11b8352600452602452fd5b60048963e816f61960e01b8152fd5b604051631c3fef8f60e21b81523360048201526001600160a01b0385166024820152600160448201525f6064820152608490fd5b5060405163020604bf60e21b81528760048201526020816024818c5afa908115612f16578a91612ed8575b506001600160a01b0316301415612bd8565b90506020813d602011612f0e575b81612ef360209383614668565b81010312612f0a57612f049061468a565b5f612ec6565b8980fd5b3d9150612ee6565b6040513d8c823e3d90fd5b612f3a915060203d602011612886576128788183614668565b5f612bd0565b604489635c3ac9e960e01b81523360045280602452fd5b90506020813d602011612f89575b81612f7260209383614668565b81010312612f0a57612f839061468a565b5f612b8f565b3d9150612f65565b60018314612fa9575b67ffffffffffffffff90612be7565b604051627eeac760e11b8152336004820152602481018890526020816044818c5afa8015612f165787918b91613095575b50106130685760405163e985e9c560e01b81523360048201523060248201526020816044818c5afa908115612f16578a91613049575b50612f9a57604051631c3fef8f60e21b81523360048201526001600160a01b0385166024820152604481018790525f6064820152608490fd5b613062915060203d602011612886576128788183614668565b5f613010565b604051627eeac760e11b815233600482015260248101889052869085908b6020828d8180604481016129ce565b9150506020813d6020116130c2575b816130b160209383614668565b81010312611416578690515f612fda565b3d91506130a4565b600488631a4fbded60e31b8152fd5b600488636262a28360e11b8152fd5b600488630eea332760e41b8152fd5b5060ff60055460a01c1615612b3b565b60248986637d982ddb60e01b8252600452fd5b50613130855f52600160205260405f2054151590565b15612b31565b60248888637a39e08960e11b8252600452fd5b503461034c5761315836614591565b91906131626147bc565b815b8381106131aa57507f6aa29692b137659a481d4fb83c29beb0e6c21657d3d1190ad11ef974726edf1691926102e260405192839267ffffffffffffffff42169184614720565b806131c66001600160a01b0361030961030460019589886146e8565b6131d1575b01613164565b6131f06001600160a01b036131ea6103048489886146e8565b16615196565b506131cb565b503461034c57602036600319011261034c5760043567ffffffffffffffff811690818103613291576132266147bc565b61322e614878565b6005549167ffffffffffffffff8360b01c1614610fe35767ffffffffffffffff60b01b7fffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffff9160b01b1691161760055560015f5160206154625f395f51905f525580f35b8280fd5b503461034c57602036600319011261034c576001600160a01b036132b76145e5565b6132bf6147bc565b166132d5815f52600360205260405f2054151590565b613311575b7fd04ed67bb8d5a1e9a327f210f612c4e3c0e48626a4fa8d6d4230748c085ceefc602060405167ffffffffffffffff42168152a280f35b61331a81615196565b506132da565b503461034c57602036600319011261034c57600435808252600f602052600360ff604084205416141580613518575b806134fe575b6134d357613361614878565b338252601060205261338481604084206001915f520160205260405f2054151590565b1561084e57808252600d6020526001600160a01b0360408320541690808352600c602052604083206001600160a01b0333165f5260205260405f20549180155f1461349e578380848015613494575b8280929181923390f115610730576107197f73179bee3c094d2ab2c68d9f001017f51535f15bbe4363a691ee89df920b8cf8915b338652601060205261341c8460408820615241565b5083865260116020526134323360408820615241565b50838652600c602052604086206001600160a01b0333165f526020528560405f2055604051918291339667ffffffffffffffff4216918491604091949367ffffffffffffffff916001600160a01b036060860197168552602085015216910152565b6108fc91506133d3565b6107197f73179bee3c094d2ab2c68d9f001017f51535f15bbe4363a691ee89df920b8cf8916134ce8533836149e4565b613407565b7f98972f02000000000000000000000000000000000000000000000000000000008252600452602490fd5b50808252600f602052600460ff6040842054161415613355565b50808252600f602052600260ff604084205416141561334f565b503461034c578060031936011261034c57602060ff60055460a01c166040519015158152f35b503461034c57602036600319011261034c5767ffffffffffffffff60406020926004358152600e8452205416604051908152f35b503461034c57602036600319011261034c576135a6614611565b6135ae6147bc565b6135b6614878565b6005549015158060ff8360a01c16151514610fe35760ff60a01b60ff60a01b199160a01b1691161760055560015f5160206154625f395f51905f525580f35b503461034c57602036600319011261034c576001600160a01b036136176145e5565b61361f6147bc565b16613635815f52600160205260405f2054151590565b15613672575b7f38ed943c96925bfb5094e2dc69bcc679f0dccd21120ce97e177bed1c203189de602060405167ffffffffffffffff42168152a280f35b61367b816152f2565b5061363b565b503461034c57602036600319011261034c5760209060043590818152600f8352600360ff604083205416149182156136e1575b82156136c7575b50506040519015158152f35b8152600f8352604090205460ff1660041490505f806136bb565b808252600f8452604082205460ff1660021492506136b4565b503461034c578060031936011261034c5760206001600160a01b0360055416604051908152f35b503461034c57602036600319011261034c5760406020916004358152601383522054604051908152f35b503461034c57604036600319011261034c576137656145fb565b336001600160a01b0382160361378157610e0590600435614f4d565b6004827f6697b232000000000000000000000000000000000000000000000000000000008152fd5b503461034c57604036600319011261034c57610e056004356137c96145fb565b906137ef610dfb825f525f5160206154425f395f51905f52602052600160405f20015490565b614ea6565b503461034c57602036600319011261034c57602061382c6004355f525f5160206154425f395f51905f52602052600160405f20015490565b604051908152f35b503461034c578060031936011261034c57602067ffffffffffffffff60055460b01c16604051908152f35b503461034c57602036600319011261034c576001600160a01b036138816145e5565b6138896147bc565b16801561048e57600654816001600160a01b03821614610fe3576001600160a01b0319161760065580f35b503461034c57602036600319011261034c576040816101209261010083516138db81614637565b82815282602082015282858201528260608201528260808201528260a08201528260c08201528260e08201520152600435815260086020522067ffffffffffffffff6040519161392a83614637565b60ff81548085526001600160a01b03600184015495602081019687528180600287015416956040830196875260038101546060840190815260048201549060808501918252836006816005860154169460a088019586520154998a988c61010060c08a0199858d168b528d60e082019d60a01c168d52019c60a81c168c5260206040519e8f92835251910152511660408c01525160608b01525160808a0152511660a0880152511660c0860152511660e08401525116610100820152f35b503461034c578060031936011261034c5760206001600160a01b0360075416604051908152f35b503461034c57602036600319011261034c5760406020916004358152601283522054604051908152f35b503461034c57613a4836614591565b9190613a526147bc565b815b838110613a9a57507f47a43adf776d496cc88b19ac140c090cafa9b8a31934c2e205f31d0690e4c4d091926102e260405192839267ffffffffffffffff42169184614720565b80613ab66001600160a01b03610d7261030460019589886146e8565b613ac1575b01613a54565b613ae06001600160a01b03613ada6103048489886146e8565b166150c7565b50613abb565b503461034c57602036600319011261034c576004357fffffffff000000000000000000000000000000000000000000000000000000008116809103611ed857807fda8def730000000000000000000000000000000000000000000000000000000060209214908115613b5e575b506040519015158152f35b7f7965db0b00000000000000000000000000000000000000000000000000000000811491508115613b91575b5082613b53565b6301ffc9a760e01b91501482613b8a565b503461141657602036600319011261141657600435613bbf6147bc565b805f52600f602052600160ff60405f2054160361457f57613bde614878565b805f52600860205260405f209060405190613bf882614637565b82548252600183015491602081019283526001600160a01b036002850154169260408201938452600385015494606083019586526004810154906080840191825260066001600160a01b036005830154169160a086019283520154600160c08601956001600160a01b038316875267ffffffffffffffff61010060ff8560a01c16928360e0820152019360a81c1683520361456c575167ffffffffffffffff16421061454057845f52600a602052876001600160a01b0360405f20541694865f52600b60205260405f205498875f52601260205260405f2054613ce46001600160a01b038b51166148c9565b908b108015969061452d575f5f918c60ff60055460a81c16614495575b5050858d6001600160a01b0389511680155f14614335575081808092613d32866001600160a01b038c5116926146bb565b9082821561432c575bf11561432157859181159081156142f1575b5050505060ff905b16806142485750506001600160a01b03808951169151168551823b156118d657604051632142170760e11b81526001600160a01b039283166004820152918816602483015260448201529082908290606490829084905af18015611c6257614233575b50505b848852600c602052604088206001600160a01b0385165f526020528760405f20558388526010602052613df18560408a20615241565b508488526011602052613e078460408a20615241565b50848852600d6020526001600160a01b036040892054168589526011602052604089205490895b8a8382106140ac57505050805b61403157505b8488526008602052613e796040892060065f918281558260018201558260028201558260038201558260048201558260058201550155565b848852600a602052604088206001600160a01b03198154169055848852600b6020528760408120558488526012602052876040812055848852601360205287604081205584885260116020526040882054805b613fce57506001600160a01b0390858952600f60205260408920600260ff198254161790555116848852600d6020526001600160a01b036040892091166001600160a01b03198254161790555f14613f7757519251604080516001600160a01b03938416815260208101969096524267ffffffffffffffff169086015216927fc0ad1e048042ed8eb184bfa07d3d2439c7ca119317a51c2ee4dc88f95eda451f908060608101610a4f565b90506001600160a01b0391935051915116917fc0ad1e048042ed8eb184bfa07d3d2439c7ca119317a51c2ee4dc88f95eda451f606060405186815286602082015267ffffffffffffffff42166040820152a4610b88565b858952601160205260408920868a52601160205260408a2080541561401d576140179291614011918c526001600160a01b0360208d20548d60031b1c1690615241565b506146dc565b80613ecc565b60248b634e487b7160e01b81526032600452fd5b8589526011602052604089205f19820190828211614098576001600160a01b03614060614076949382936150b2565b90549060031b1c161686810361407c57506146dc565b80613e3b565b61409190888c52601160205260408c20615241565b505f614011565b60248b634e487b7160e01b81526011600452fd5b6140c9826040838c6001600160a01b0395526011602052206150b2565b90549060031b1c1690888c52600c60205260408c206001600160a01b0383165f5260205260405f2054918c6001600160a01b038216918a8314614227578b8515918215614121575b5050505050600191505b01613e2e565b876141ec575050848383926141e2575b8392839283928392f115611422577f73179bee3c094d2ab2c68d9f001017f51535f15bbe4363a691ee89df920b8cf86141d56001958d935b858152601060205261417e8560408320615241565b50848152600c60205260408120865f5260205260405f205560405191829167ffffffffffffffff4216908a8491604091949367ffffffffffffffff916001600160a01b036060860197168552602085015216910152565b0390a35f8c818b81614111565b6108fc9250614131565b7f73179bee3c094d2ab2c68d9f001017f51535f15bbe4363a691ee89df920b8cf89250956141d59193614222826001998b6149e4565b614169565b5050506001915061411b565b8161423d91614668565b6118ca57875f613db8565b600114614258575b505050613dbb565b6001600160a01b03808a5116925116908651905192803b156118d257888580946142c760405197889687958694637921219560e11b865260048601929060c094926001600160a01b0380921685521660208401526040830152606082015260a060808201525f60a08201520190565b03925af18015611c62576142dc575b80614250565b816142e691614668565b6118ca57875f6142d6565b8392839283928391614317575b6001600160a01b031690f11561073057835f8080613d4d565b6108fc91506142fe565b6040513d87823e3d90fd5b506108fc613d3b565b915061435a90614353846001600160a01b038a9796975116926146bb565b90836149e4565b8261436b575b50505060ff90613d55565b9091929394956001600160a01b038851166001600160a01b03600654168091149081614480575b81614476575b5080614467575b156144445750826143bc916001600160a01b0360055416906149e4565b6001600160a01b036005541691823b1561141657604051630bdff96560e31b81526001600160a01b039290921660048301526024820152905f908290604490829084905af180156144395761441c575b509060ff8b93925b905f80614360565b60ff9b505f61442e9194939294614668565b5f9a9290919261440c565b6040513d5f823e3d90fd5b959493915060ff92614462916001600160a01b0360055416906149e4565b614414565b5060ff60075460a01c1661439f565b905015155f614398565b6007546001600160a01b031615159150614392565b6001600160a01b0360409151169160448c519151918351948593849263152a902d60e11b8452600484015260248301525afa805f925f92614509575b506144de575b508c613d01565b6001600160a01b038216151580614500575b156144d757915091505f806144d7565b508015156144f0565b909250614525915060403d604011612081576120718183614668565b90915f6144d1565b505050505061453b85614a47565b613e41565b847f3af24c2f000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b8563ddd62ef360e01b5f5260045260245ffd5b6366b9cfc760e01b5f5260045260245ffd5b9060206003198301126114165760043567ffffffffffffffff811161141657826023820112156114165780600401359267ffffffffffffffff84116114165760248460051b83010111611416576024019190565b600435906001600160a01b038216820361141657565b602435906001600160a01b038216820361141657565b60043590811515820361141657565b60a4359067ffffffffffffffff8216820361141657565b610120810190811067ffffffffffffffff82111761465457604052565b634e487b7160e01b5f52604160045260245ffd5b90601f8019910116810190811067ffffffffffffffff82111761465457604052565b51906001600160a01b038216820361141657565b91908260409103126114165760206146b58361468a565b92015190565b919082039182116146c857565b634e487b7160e01b5f52601160045260245ffd5b80156146c8575f190190565b91908110156146f85760051b0190565b634e487b7160e01b5f52603260045260245ffd5b356001600160a01b03811681036114165790565b91939293806040840160408552526060830191905f905b8082106147545750505067ffffffffffffffff6020919416910152565b9091928335906001600160a01b03821680920361141657602081600193829352019401920190614737565b90816020910312611416575180151581036114165790565b919082018092116146c857565b67ffffffffffffffff81116146545760051b60200190565b335f9081527f06484cc59dc38e4f67c31122333a17ca81b3ca18cdf02bfc298072fa52b0316a602052604090205460ff16156147f457565b63e2517d3f60e01b5f52336004527f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0860245260445ffd5b805f525f5160206154425f395f51905f5260205260405f206001600160a01b0333165f5260205260ff60405f205416156148625750565b63e2517d3f60e01b5f523360045260245260445ffd5b60025f5160206154625f395f51905f5254146148a15760025f5160206154625f395f51905f5255565b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b6001600160a01b03166040516301ffc9a760e01b81527fd9b67a26000000000000000000000000000000000000000000000000000000006004820152602081602481855afa908115614439575f916149c5575b50156149285750600190565b6020602491604051928380926301ffc9a760e01b82527f80ac58cd0000000000000000000000000000000000000000000000000000000060048301525afa908115614439575f916149a6575b501561497e575f90565b7f1faeb8b4000000000000000000000000000000000000000000000000000000005f5260045ffd5b6149bf915060203d602011612886576128788183614668565b5f614974565b6149de915060203d602011612886576128788183614668565b5f61491c565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000060208201526001600160a01b0390921660248301526044820192909252614a4591614a4082606481015b03601f198101845283614668565b615045565b565b805f52600d6020526001600160a01b0360405f205416815f52601160205260405f2054905f5b828110614ade575050805b614a80575050565b815f52601160205260405f20905f198101918183116146c8576001600160a01b03614aaf614ac39482936150b2565b90549060031b1c161680614ac957506146dc565b80614a78565b61409190845f52601160205260405f20615241565b835f5260116020526001600160a01b03614afb8260405f206150b2565b90549060031b1c1690845f52600c60205260405f206001600160a01b0383165f5260205260405f2054916001600160a01b038116908115614c5457868415918215614b50575b50505050600191505b01614a6d565b86614c1a57505083825f92614c10575b5f92839283928392f11561443957857f73179bee3c094d2ab2c68d9f001017f51535f15bbe4363a691ee89df920b8cf8614c046001955b845f526010602052614bac8460405f20615241565b50835f52600c60205260405f20855f526020525f604081205560405191829167ffffffffffffffff4216908a8491604091949367ffffffffffffffff916001600160a01b036060860197168552602085015216910152565b0390a35f808681614b41565b6108fc9250614b60565b7f73179bee3c094d2ab2c68d9f001017f51535f15bbe4363a691ee89df920b8cf891925085614c4f600197614c04938a6149e4565b614b97565b505060019150614b4a565b6001600160a01b0381165f9081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604090205460ff16614d09576001600160a01b03165f8181527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d60205260408120805460ff191660011790553391907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8180a4600190565b505f90565b6001600160a01b0381165f9081527fab71e3f32666744d246edff3f96e4bdafee2e9867098cdd118a979a7464786a8602052604090205460ff16614d09576001600160a01b03165f8181527fab71e3f32666744d246edff3f96e4bdafee2e9867098cdd118a979a7464786a860205260408120805460ff191660011790553391907f189ab7a9244df0848122154315af71fe140f3db0fe014031783b0946b8c9d2e3907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9080a4600190565b6001600160a01b0381165f9081527f06484cc59dc38e4f67c31122333a17ca81b3ca18cdf02bfc298072fa52b0316a602052604090205460ff16614d09576001600160a01b03165f8181527f06484cc59dc38e4f67c31122333a17ca81b3ca18cdf02bfc298072fa52b0316a60205260408120805460ff191660011790553391907f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b08907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9080a4600190565b805f525f5160206154425f395f51905f5260205260405f206001600160a01b0383165f5260205260ff60405f205416155f14614f4757805f525f5160206154425f395f51905f5260205260405f206001600160a01b0383165f5260205260405f20600160ff198254161790556001600160a01b03339216907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d5f80a4600190565b50505f90565b805f525f5160206154425f395f51905f5260205260405f206001600160a01b0383165f5260205260ff60405f2054165f14614f4757805f525f5160206154425f395f51905f5260205260405f206001600160a01b0383165f5260205260405f2060ff1981541690556001600160a01b03339216907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b5f80a4600190565b6040517f23b872dd0000000000000000000000000000000000000000000000000000000060208201526001600160a01b0392831660248201529290911660448301526064820192909252614a4591614a408260848101614a32565b905f602091828151910182855af115614439575f513d6150a957506001600160a01b0381163b155b6150745750565b6001600160a01b03907f5274afe7000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b6001141561506d565b80548210156146f8575f5260205f2001905f90565b5f818152600160205260409020548015614f47575f1981018181116146c8575f545f198101919082116146c85781810361514a575b5050505f548015615136575f1901615114815f6150b2565b8154905f199060031b1b191690555f555f5260016020525f6040812055600190565b634e487b7160e01b5f52603160045260245ffd5b61518061515a61516a935f6150b2565b90549060031b1c9283925f6150b2565b819391549060031b91821b915f19901b19161790565b90555f52600160205260405f20555f80806150fc565b5f818152600360205260409020548015614f47575f1981018181116146c8576002545f198101919082116146c857818103615209575b5050506002548015615136575f19016151e68160026150b2565b8154905f199060031b1b191690556002555f5260036020525f6040812055600190565b61522b61521a61516a9360026150b2565b90549060031b1c92839260026150b2565b90555f52600360205260405f20555f80806151cc565b906001820191815f528260205260405f20548015155f146152ea575f1981018181116146c85782545f198101919082116146c8578181036152b5575b50505080548015615136575f19019061529682826150b2565b8154905f199060031b1b19169055555f526020525f6040812055600190565b6152d56152c561516a93866150b2565b90549060031b1c928392866150b2565b90555f528360205260405f20555f808061527d565b505050505f90565b805f52600160205260405f2054155f14614d09575f54680100000000000000008110156146545761532d61516a8260018594015f555f6150b2565b90555f54905f52600160205260405f2055600190565b805f52600360205260405f2054155f14614d0957600254680100000000000000008110156146545761538161516a82600185940160025560026150b2565b9055600254905f52600360205260405f2055600190565b5f828152600182016020526040902054614f47578054906801000000000000000082101561465457826153d561516a8460018096018555846150b2565b90558054925f520160205260405f2055600190565b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c161561541957565b7fd7e6bcf8000000000000000000000000000000000000000000000000000000005f5260045ffdfe02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a2646970667358221220e1b8f2d1cd2858915acaac896160f3dc6ae0fe1ad5ad8118634bbd9018593b3464736f6c634300081c0033f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00