233 txs
1.3k calls
constructor
constructor(address _owner, string _name, string _symbol, uint8 _decimals)
functions
addressToClaimant
viewfunction addressToClaimant(address user) view returns (address claimant)
addressToIsDisabled
viewfunction addressToIsDisabled(address user) view returns (bool isDisabled)
allowance
viewfunction allowance(address, address) view returns (uint256)
authority
viewfunction authority() view returns (address)
balanceOf
viewfunction balanceOf(address) view returns (uint256)
balanceUpdates
viewfunction balanceUpdates(address user, uint256) view returns (uint48 epoch, uint128 totalSharesBalance)
boringSafe
viewfunction boringSafe() view returns (address)
currentEpoch
viewfunction currentEpoch() view returns (uint48)
decimals
viewfunction decimals() view returns (uint8)
DOMAIN_SEPARATOR
viewfunction DOMAIN_SEPARATOR() view returns (bytes32)
epochs
viewfunction epochs(uint48) view returns (uint128 eligibleShares, uint64 startTimestamp, uint64 endTimestamp)
getBalanceUpdates
viewfunction getBalanceUpdates(address user) view returns (tuple[])
getTotalBalanceUpdates
viewfunction getTotalBalanceUpdates(address user) view returns (uint256)
getUserEligibleBalance
viewfunction getUserEligibleBalance(address user) view returns (uint128)
getUserRewardBalance
viewfunction getUserRewardBalance(address user, uint256 rewardId) view returns (uint256)
hook
viewfunction hook() view returns (address)
maxRewardId
viewfunction maxRewardId() view returns (uint256)
name
viewfunction name() view returns (string)
nonces
viewfunction nonces(address) view returns (uint256)
owner
viewfunction owner() view returns (address)
rewards
viewfunction rewards(uint256 rewardId) view returns (uint48 startEpoch, uint48 endEpoch, address token, uint256 rewardRate)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
symbol
viewfunction symbol() view returns (string)
totalSupply
viewfunction totalSupply() view returns (uint256)
userToRewardBucketToClaimedRewards
viewfunction userToRewardBucketToClaimedRewards(address user, uint256 rewardBucket) view returns (uint256 claimedRewards)
approve
nonpayablefunction approve(address spender, uint256 amount) returns (bool)
assignClaimantForUser
nonpayablefunction assignClaimantForUser(address user, address claimant)
claimRewards
nonpayablefunction claimRewards(uint256[] rewardIds)
claimRewardsOnBehalfOfUser
nonpayablefunction claimRewardsOnBehalfOfUser(uint256[] rewardIds, address user)
disableRewardAccrual
nonpayablefunction disableRewardAccrual(address user)
distributeRewards
nonpayablefunction distributeRewards(address[] tokens, uint256[] amounts, uint48[] startEpochs, uint48[] endEpochs)
enableRewardAccrual
nonpayablefunction enableRewardAccrual(address user)
enter
nonpayablefunction enter(address from, address asset, uint256 assetAmount, address to, uint256 shareAmount)
exit
nonpayablefunction exit(address to, address asset, uint256 assetAmount, address from, uint256 shareAmount)
manage
nonpayablefunction manage(address target, bytes data, uint256 value) returns (bytes result)
manage
nonpayablefunction manage(address[] targets, bytes[] data, uint256[] values) returns (bytes[] results)
onERC1155BatchReceived
nonpayablefunction onERC1155BatchReceived(address, address, uint256[], uint256[], bytes) returns (bytes4)
onERC1155Received
nonpayablefunction onERC1155Received(address, address, uint256, uint256, bytes) returns (bytes4)
onERC721Received
nonpayablefunction onERC721Received(address, address, uint256, bytes) returns (bytes4)
permit
nonpayablefunction permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s)
rollOverEpoch
nonpayablefunction rollOverEpoch()
setAuthority
nonpayablefunction setAuthority(address newAuthority)
setBeforeTransferHook
nonpayablefunction setBeforeTransferHook(address _hook)
transfer
nonpayablefunction transfer(address to, uint256 amount) returns (bool)
transferFrom
nonpayablefunction transferFrom(address from, address to, uint256 amount) returns (bool)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
events
Approval
event Approval(address indexed owner, address indexed spender, uint256 amount)
AuthorityUpdated
event AuthorityUpdated(address indexed user, address indexed newAuthority)
Enter
event Enter(address indexed from, address indexed asset, uint256 amount, address indexed to, uint256 shares)
EpochStarted
event EpochStarted(uint256 indexed epoch, uint256 eligibleShares, uint256 startTimestamp)
Exit
event Exit(address indexed to, address indexed asset, uint256 amount, address indexed from, uint256 shares)
OwnershipTransferred
event OwnershipTransferred(address indexed user, address indexed newOwner)
RewardsDistributed
event RewardsDistributed(address indexed token, uint256 indexed startEpoch, uint256 indexed endEpoch, uint256 amount, uint256 rewardId)
Transfer
event Transfer(address indexed from, address indexed to, uint256 amount)
UserDepositedIntoEpoch
event UserDepositedIntoEpoch(address indexed user, uint256 indexed epoch, uint256 shareAmount)
UserRewardsClaimed
event UserRewardsClaimed(address indexed user, address indexed token, uint256 rewardId, uint256 amount)
UserWithdrawnFromEpoch
event UserWithdrawnFromEpoch(address indexed user, uint256 indexed epoch, uint256 shareAmount)
errors
AddressEmptyCode
error AddressEmptyCode(address target)
ArrayLengthMismatch
error ArrayLengthMismatch()
CannotClaimFutureReward
error CannotClaimFutureReward()
CannotDisableRewardAccrualMoreThanOnce
error CannotDisableRewardAccrualMoreThanOnce()
CannotEnableRewardAccrualMoreThanOnce
error CannotEnableRewardAccrualMoreThanOnce()
FailedCall
error FailedCall()
InsufficientBalance
error InsufficientBalance(uint256 balance, uint256 needed)
InvalidRewardCampaignDuration
error InvalidRewardCampaignDuration()
MustClaimAtLeastOneReward
error MustClaimAtLeastOneReward()
NoFutureEpochRewards
error NoFutureEpochRewards()
OnlyClaimant
error OnlyClaimant()
RewardClaimedAlready
error RewardClaimedAlready(uint256 rewardId)
creation bytecode
0x61010060405234801562000011575f80fd5b50604051620052cc380380620052cc8339810160408190526200003491620002b3565b5f80546001600160a01b0386166001600160a01b0319918216811783556001805490921690915560405186928692869286928592859285928992909133907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908490a36040516001600160a01b0382169033907fa3396fd7f6e0a21b50e5089d2da70d5ac0a3bbbd1f617a93f134b76389980198905f90a35060029050620000dd8482620003dc565b506003620000ec8382620003dc565b5060ff81166080524660a052620001026200014c565b60c0525050604051620001169150620001e7565b604051809103905ff08015801562000130573d5f803e3d5ffd5b506001600160a01b031660e052506200051e9650505050505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60026040516200017f9190620004a4565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b61053a8062004d9283390190565b634e487b7160e01b5f52604160045260245ffd5b5f82601f83011262000219575f80fd5b81516001600160401b0380821115620002365762000236620001f5565b604051601f8301601f19908116603f01168101908282118183101715620002615762000261620001f5565b816040528381526020925086838588010111156200027d575f80fd5b5f91505b83821015620002a0578582018301518183018401529082019062000281565b5f93810190920192909252949350505050565b5f805f8060808587031215620002c7575f80fd5b84516001600160a01b0381168114620002de575f80fd5b60208601519094506001600160401b0380821115620002fb575f80fd5b620003098883890162000209565b945060408701519150808211156200031f575f80fd5b506200032e8782880162000209565b925050606085015160ff8116811462000345575f80fd5b939692955090935050565b600181811c908216806200036557607f821691505b6020821081036200038457634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620003d7575f81815260208120601f850160051c81016020861015620003b25750805b601f850160051c820191505b81811015620003d357828155600101620003be565b5050505b505050565b81516001600160401b03811115620003f857620003f8620001f5565b620004108162000409845462000350565b846200038a565b602080601f83116001811462000446575f84156200042e5750858301515b5f19600386901b1c1916600185901b178555620003d3565b5f85815260208120601f198616915b82811015620004765788860151825594840194600190910190840162000455565b50858210156200049457878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b5f808354620004b38162000350565b60018281168015620004ce5760018114620004e45762000512565b60ff198416875282151583028701945062000512565b875f526020805f205f5b85811015620005095781548a820152908401908201620004ee565b50505082870194505b50929695505050505050565b60805160a05160c05160e051614832620005605f395f818161077c0152818161129e015261237001525f610e6301525f610e2e01525f61044201526148325ff3fe608060405260043610610278575f3560e01c80637a9e5e4b1161014a578063b7ba9fa2116100be578063dd62ed3e11610078578063dd62ed3e146108f9578063f23a6e611461092f578063f2fde38b1461095a578063f301af4214610979578063f549794014610a0b578063f6e715d014610a2a575f80fd5b8063b7ba9fa21461081b578063b82148141461083a578063bc197c8114610871578063bf7e214f1461089c578063c7ad155a146108bb578063d505accf146108da575f80fd5b80638da5cb5b1161010f5780638da5cb5b1461074d5780639579b6891461076b57806395d89b411461079e5780639c0fed1f146107b2578063a887b71c146107e8578063a9059cbb146107fc575f80fd5b80637a9e5e4b146106915780637d2066e6146106b05780637ecebe00146106e45780637f5a7c7b1461070f5780638929565f1461072e575f80fd5b80633644e515116101ec5780635c2ff63b116101a65780635c2ff63b1461055f5780635eac62391461057457806366c6822c1461059357806370a0823114610612578063766718081461063d578063773caf4114610672575f80fd5b80633644e51514610476578063369874101461048a57806339d6ba32146104d657806354ee9b52146104f5578063556c6f68146105145780635a795d6614610540575f80fd5b806318160ddd1161023d57806318160ddd1461037457806318457e6114610397578063224d8703146103b857806323b872dd146103e45780632fd867b114610403578063313ce56714610431575f80fd5b806301ffc9a71461028357806306fdde03146102b7578063095ea7b3146102d85780630e9de728146102f7578063150b7a021461033c575f80fd5b3661027f57005b5f80fd5b34801561028e575f80fd5b506102a261029d366004613baf565b610a49565b60405190151581526020015b60405180910390f35b3480156102c2575f80fd5b506102cb610a7f565b6040516102ae9190613c23565b3480156102e3575f80fd5b506102a26102f2366004613c49565b610b0b565b348015610302575f80fd5b50610316610311366004613c49565b610b76565b6040805165ffffffffffff90931683526001600160801b039091166020830152016102ae565b348015610347575f80fd5b5061035b610356366004613d22565b610bba565b6040516001600160e01b031990911681526020016102ae565b34801561037f575f80fd5b5061038960045481565b6040519081526020016102ae565b3480156103a2575f80fd5b506103b66103b1366004613d89565b610bcb565b005b3480156103c3575f80fd5b506103d76103d2366004613e20565b610c90565b6040516102ae9190613eb2565b3480156103ef575f80fd5b506102a26103fe366004613f12565b610e0b565b34801561040e575f80fd5b506102a261041d366004613f50565b600d6020525f908152604090205460ff1681565b34801561043c575f80fd5b506104647f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020016102ae565b348015610481575f80fd5b50610389610e2b565b348015610495575f80fd5b506104be6104a4366004613f50565b600e6020525f90815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016102ae565b3480156104e1575f80fd5b506103b66104f0366004613d89565b610e85565b348015610500575f80fd5b506103b661050f366004613f6b565b610f33565b34801561051f575f80fd5b5061053361052e366004613f50565b611423565b6040516102ae9190614025565b34801561054b575f80fd5b506103b661055a366004614084565b6114b2565b34801561056a575f80fd5b50610389600c5481565b34801561057f575f80fd5b506103b661058e3660046140bb565b611510565b34801561059e575f80fd5b506105e36105ad3660046140f9565b60096020525f90815260409020546001600160801b038116906001600160401b03600160801b8204811691600160c01b90041683565b604080516001600160801b0390941684526001600160401b0392831660208501529116908201526060016102ae565b34801561061d575f80fd5b5061038961062c366004613f50565b60056020525f908152604090205481565b348015610648575f80fd5b5060085461065b9065ffffffffffff1681565b60405165ffffffffffff90911681526020016102ae565b34801561067d575f80fd5b506103b661068c366004613f50565b611550565b34801561069c575f80fd5b506103b66106ab366004613f50565b6115f5565b3480156106bb575f80fd5b506103896106ca366004613f50565b6001600160a01b03165f908152600a602052604090205490565b3480156106ef575f80fd5b506103896106fe366004613f50565b60076020525f908152604090205481565b34801561071a575f80fd5b506010546104be906001600160a01b031681565b348015610739575f80fd5b506103b6610748366004613f50565b6116d9565b348015610758575f80fd5b505f546104be906001600160a01b031681565b348015610776575f80fd5b506104be7f000000000000000000000000000000000000000000000000000000000000000081565b3480156107a9575f80fd5b506102cb61172c565b3480156107bd575f80fd5b506103896107cc366004613c49565b600f60209081525f928352604080842090915290825290205481565b3480156107f3575f80fd5b506103b6611739565b348015610807575f80fd5b506102a2610816366004613c49565b611774565b348015610826575f80fd5b506103b661083536600461411e565b611789565b348015610845575f80fd5b50610859610854366004613f50565b611803565b6040516001600160801b0390911681526020016102ae565b34801561087c575f80fd5b5061035b61088b3660046141e1565b63bc197c8160e01b95945050505050565b3480156108a7575f80fd5b506001546104be906001600160a01b031681565b3480156108c6575f80fd5b506103b66108d5366004613f50565b611833565b3480156108e5575f80fd5b506103b66108f4366004614287565b6118e7565b348015610904575f80fd5b50610389610913366004614084565b600660209081525f928352604080842090915290825290205481565b34801561093a575f80fd5b5061035b6109493660046142f8565b63f23a6e6160e01b95945050505050565b348015610965575f80fd5b506103b6610974366004613f50565b611b26565b348015610984575f80fd5b506109d361099336600461435b565b600b6020525f90815260409020805460019091015465ffffffffffff80831692600160301b810490911691600160601b9091046001600160a01b03169084565b6040805165ffffffffffff95861681529490931660208501526001600160a01b039091169183019190915260608201526080016102ae565b348015610a16575f80fd5b50610389610a25366004613c49565b611ba1565b348015610a35575f80fd5b506102cb610a44366004614372565b611ce5565b5f6001600160e01b03198216630271189760e51b1480610a7957506301ffc9a760e01b6001600160e01b03198316145b92915050565b60028054610a8c906143f5565b80601f0160208091040260200160405190810160405280929190818152602001828054610ab8906143f5565b8015610b035780601f10610ada57610100808354040283529160200191610b03565b820191905f5260205f20905b815481529060010190602001808311610ae657829003601f168201915b505050505081565b335f8181526006602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610b659086815260200190565b60405180910390a350600192915050565b600a602052815f5260405f208181548110610b8f575f80fd5b5f9182526020909120015465ffffffffffff81169250600160301b90046001600160801b0316905082565b630a85bd0160e11b5b949350505050565b610be0335f356001600160e01b031916611d73565b610c055760405162461bcd60e51b8152600401610bfc9061442d565b60405180910390fd5b610c0f8282611e18565b8215610c2957610c296001600160a01b0385168685611e2c565b816001600160a01b0316846001600160a01b0316866001600160a01b03167fe0c82280a1164680e0cf43be7db4c4c9f985423623ad7a544fb76c772bdc60438685604051610c81929190918252602082015260400190565b60405180910390a45050505050565b6060610ca7335f356001600160e01b031916611d73565b610cc35760405162461bcd60e51b8152600401610bfc9061442d565b610ccb611ebb565b85806001600160401b03811115610ce457610ce4613c73565b604051908082528060200260200182016040528015610d1757816020015b6060815260200190600190039081610d025790505b5091505f5b81811015610dff57610dd1878783818110610d3957610d39614453565b9050602002810190610d4b9190614467565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250899250889150859050818110610d9357610d93614453565b905060200201358b8b85818110610dac57610dac614453565b9050602002016020810190610dc19190613f50565b6001600160a01b0316919061202a565b838281518110610de357610de3614453565b602002602001018190525080610df8906144bd565b9050610d1c565b50509695505050505050565b5f610e1684846120ca565b610e21848484612146565b90505b9392505050565b5f7f00000000000000000000000000000000000000000000000000000000000000004614610e6057610e5b612168565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b610e9a335f356001600160e01b031916611d73565b610eb65760405162461bcd60e51b8152600401610bfc9061442d565b8215610ed157610ed16001600160a01b038516863086612201565b610edb82826122a5565b816001600160a01b0316846001600160a01b0316866001600160a01b03167fea00f88768a86184a6e515238a549c171769fe7460a011d6fd0bcd48ca078ea48685604051610c81929190918252602082015260400190565b610f48335f356001600160e01b031916611d73565b610f645760405162461bcd60e51b8152600401610bfc9061442d565b868581141580610f745750808414155b80610f7f5750808214155b15610f9d5760405163512509d360e11b815260040160405180910390fd5b5f5b8181101561141757838382818110610fb957610fb9614453565b9050602002016020810190610fce91906140f9565b65ffffffffffff16868683818110610fe857610fe8614453565b9050602002016020810190610ffd91906140f9565b65ffffffffffff16111561102457604051630c2b941b60e41b815260040160405180910390fd5b60085465ffffffffffff1684848381811061104157611041614453565b905060200201602081019061105691906140f9565b65ffffffffffff161061107c5760405163383ed2a960e01b815260040160405180910390fd5b5f60095f88888581811061109257611092614453565b90506020020160208101906110a791906140f9565b65ffffffffffff1665ffffffffffff1681526020019081526020015f2090505f60095f8787868181106110dc576110dc614453565b90506020020160208101906110f191906140f9565b65ffffffffffff1665ffffffffffff1681526020019081526020015f209050604051806080016040528089898681811061112d5761112d614453565b905060200201602081019061114291906140f9565b65ffffffffffff16815260200187878681811061116157611161614453565b905060200201602081019061117691906140f9565b65ffffffffffff1681526020018d8d8681811061119557611195614453565b90506020020160208101906111aa9190613f50565b6001600160a01b0316815283548354602090920191611218916111e8916001600160401b03600160801b909204821691600160c01b909104166144d5565b6001600160401b03168d8d8881811061120357611203614453565b905060200201356122b990919063ffffffff16565b9052600c545f908152600b602090815260409182902083518154928501519385015165ffffffffffff9182166bffffffffffffffffffffffff1990941693909317600160301b9190941602929092176bffffffffffffffffffffffff16600160601b6001600160a01b039092169190910217815560609091015160019091015561130e337f00000000000000000000000000000000000000000000000000000000000000008c8c878181106112cf576112cf614453565b905060200201358f8f888181106112e8576112e8614453565b90506020020160208101906112fd9190613f50565b6001600160a01b0316929190612201565b85858481811061132057611320614453565b905060200201602081019061133591906140f9565b65ffffffffffff1688888581811061134f5761134f614453565b905060200201602081019061136491906140f9565b65ffffffffffff168d8d8681811061137e5761137e614453565b90506020020160208101906113939190613f50565b6001600160a01b03167fdb2ae7fd4c873ab5f72ed0c2a86f8403da7fca4a50110ef5381f6c365829322d8d8d888181106113cf576113cf614453565b90506020020135600c5f8154809291906113e8906144bd565b909155506040805192835260208301919091520160405180910390a4505080611410906144bd565b9050610f9f565b50505050505050505050565b6001600160a01b0381165f908152600a60209081526040808320805482518185028101850190935280835260609492939192909184015b828210156114a7575f848152602090819020604080518082019091529084015465ffffffffffff81168252600160301b90046001600160801b03168183015282526001909201910161145a565b505050509050919050565b6114c7335f356001600160e01b031916611d73565b6114e35760405162461bcd60e51b8152600401610bfc9061442d565b6001600160a01b039182165f908152600e6020526040902080546001600160a01b03191691909216179055565b611525335f356001600160e01b031916611d73565b6115415760405162461bcd60e51b8152600401610bfc9061442d565b61154c8282336122cd565b5050565b611565335f356001600160e01b031916611d73565b6115815760405162461bcd60e51b8152600401610bfc9061442d565b6001600160a01b0381165f908152600d602052604081205460ff16151590036115bd5760405163e58d4f7960e01b815260040160405180910390fd5b6001600160a01b0381165f908152600d60209081526040808320805460ff1916905560059091529020546115f29082906123e4565b50565b5f546001600160a01b0316331480611686575060015460405163b700961360e01b81526001600160a01b039091169063b70096139061164790339030906001600160e01b03195f3516906004016144fc565b602060405180830381865afa158015611662573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116869190614529565b61168e575f80fd5b600180546001600160a01b0319166001600160a01b03831690811790915560405133907fa3396fd7f6e0a21b50e5089d2da70d5ac0a3bbbd1f617a93f134b76389980198905f90a350565b6116ee335f356001600160e01b031916611d73565b61170a5760405162461bcd60e51b8152600401610bfc9061442d565b601080546001600160a01b0319166001600160a01b0392909216919091179055565b60038054610a8c906143f5565b61174e335f356001600160e01b031916611d73565b61176a5760405162461bcd60e51b8152600401610bfc9061442d565b611772611ebb565b565b5f61177f33846120ca565b610e24838361267f565b61179e335f356001600160e01b031916611d73565b6117ba5760405162461bcd60e51b8152600401610bfc9061442d565b6001600160a01b038181165f908152600e60205260409020541633146117f357604051632070af6360e01b815260040160405180910390fd5b6117fe8383836122cd565b505050565b6008546001600160a01b0382165f908152600a6020526040812090918291610bc39165ffffffffffff16906126a0565b611848335f356001600160e01b031916611d73565b6118645760405162461bcd60e51b8152600401610bfc9061442d565b6001600160a01b0381165f908152600d602052604090205460ff1615156001036118a157604051632ebc8f1160e11b815260040160405180910390fd5b6001600160a01b0381165f908152600560205260409020546118c4908290612826565b6001600160a01b03165f908152600d60205260409020805460ff19166001179055565b428410156119375760405162461bcd60e51b815260206004820152601760248201527f5045524d49545f444541444c494e455f455850495245440000000000000000006044820152606401610bfc565b5f6001611942610e2b565b6001600160a01b038a81165f8181526007602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938d166060840152608083018c905260a083019390935260c08083018b90528151808403909101815260e08301909152805192019190912061190160f01b6101008301526101028201929092526101228101919091526101420160408051601f1981840301815282825280516020918201205f84529083018083525260ff871690820152606081018590526080810184905260a0016020604051602081039080840390855afa158015611a4a573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811615801590611a805750876001600160a01b0316816001600160a01b0316145b611abd5760405162461bcd60e51b815260206004820152600e60248201526d24a72b20a624a22fa9a4a3a722a960911b6044820152606401610bfc565b6001600160a01b039081165f9081526006602090815260408083208a8516808552908352928190208990555188815291928a16917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a350505050505050565b611b3b335f356001600160e01b031916611d73565b611b575760405162461bcd60e51b8152600401610bfc9061442d565b5f80546001600160a01b0319166001600160a01b0383169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6001600160a01b0382165f908152600a60209081526040808320848452600b9092528220600181015483908190611be090670de0b6b3a7640000614548565b835490915065ffffffffffff165b835465ffffffffffff600160301b909104811690821611611cc7575f611c1482876126a0565b9150506001600160801b03811615611cb45765ffffffffffff82165f9081526009602052604081208054909190611c57906001600160801b0385811691166122b9565b82549091505f90611c81906001600160401b03600160801b8204811691600160c01b9004166144d5565b6001600160401b031690505f611c978783612f06565b9050611ca38184612f06565b611cad908961455f565b9750505050505b5080611cbf81614572565b915050611bee565b50611cda670de0b6b3a7640000836145aa565b979650505050505050565b6060611cfc335f356001600160e01b031916611d73565b611d185760405162461bcd60e51b8152600401610bfc9061442d565b611d20611ebb565b611d6a84848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050506001600160a01b0388169190508461202a565b95945050505050565b6001545f906001600160a01b03168015801590611dfa575060405163b700961360e01b81526001600160a01b0382169063b700961390611dbb908790309088906004016144fc565b602060405180830381865afa158015611dd6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611dfa9190614529565b80610bc357505f546001600160a01b03858116911614949350505050565b611e228282612f1a565b61154c8282612826565b5f60405163a9059cbb60e01b81526001600160a01b038416600482015282602482015260205f6044835f895af191505080601f3d1160015f511416151615611e765750823b153d17155b80611eb55760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b6044820152606401610bfc565b50505050565b60085465ffffffffffff165f818152600960205260409020805442600160801b9091046001600160401b031603611ef0575050565b5f600981611efd85614572565b65ffffffffffff8116825260208201929092526040015f90812084546001600160401b034216600160c01b81026001600160c01b039092169190911786558154600160801b90910267ffffffffffffffff60801b1982168117835586549497509194506001600160801b0393841693859392611f809286929182169116176145bd565b92506101000a8154816001600160801b0302191690836001600160801b0316021790555060085f81819054906101000a900465ffffffffffff16611fc390614572565b825465ffffffffffff9182166101009390930a83810292021916179091558154604080516001600160801b0390921682524260208301527f29db3deb62ef2036e5eb93aad68d2362aec0711af592cb365566603bd88651d4910160405180910390a2505050565b6060814710156120565760405163cf47918160e01b815247600482015260248101839052604401610bfc565b5f80856001600160a01b0316848660405161207191906145dd565b5f6040518083038185875af1925050503d805f81146120ab576040519150601f19603f3d011682016040523d82523d5f602084013e6120b0565b606091505b50915091506120c0868383612f81565b9695505050505050565b6010546001600160a01b03161561154c57601054604051630abd626b60e41b81526001600160a01b03848116600483015283811660248301523360448301529091169063abd626b0906064015f6040518083038186803b15801561212c575f80fd5b505afa15801561213e573d5f803e3d5ffd5b505050505050565b5f612152848484612fdd565b905061215e8483612826565b610e2483836123e4565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f600260405161219991906145f8565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b5f6040516323b872dd60e01b81526001600160a01b03851660048201526001600160a01b038416602482015282604482015260205f6064835f8a5af191505080601f3d1160015f51141615161561225a5750833b153d17155b8061229e5760405162461bcd60e51b81526020600482015260146024820152731514905394d1915497d19493d357d1905253115160621b6044820152606401610bfc565b5050505050565b6122af82826130b7565b61154c82826123e4565b5f610e2483670de0b6b3a764000084613106565b5f805f6122db868686613121565b6001600160a01b0387165f908152600a60205260408120805494975092955090935090918290829061230f5761230f614453565b5f9182526020909120015465ffffffffffff90811691508516811115612333578094505b5f806123408787866134a5565b915091505f806123548c8c898c8888613789565b604051631d664b4f60e21b815291935091506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906375992d3c906123a990859085903390600401614694565b5f604051808303815f87803b1580156123c0575f80fd5b505af11580156123d2573d5f803e3d5ffd5b50505050505050505050505050505050565b6001600160a01b0382165f908152600d602052604090205460ff1615612408575050565b6008545f906124209065ffffffffffff166001614724565b6001600160a01b0384165f908152600a6020526040812080549293509190036124a9576040805180820190915265ffffffffffff80841682526001600160801b03808616602080850191825285546001810187555f878152919091209451940180549151909216600160301b026001600160b01b031990911693909216929092171790556125c8565b80545f9082906124bb90600190614743565b815481106124cb576124cb614453565b5f918252602090912001805490915065ffffffffffff8085169116036125385780548490829060069061250f908490600160301b90046001600160801b03166145bd565b92506101000a8154816001600160801b0302191690836001600160801b031602179055506125c6565b8160405180604001604052808565ffffffffffff16815260200186845f0160069054906101000a90046001600160801b031661257491906145bd565b6001600160801b0390811690915282546001810184555f9384526020938490208351910180549490930151909116600160301b026001600160b01b031990931665ffffffffffff909116179190911790555b505b65ffffffffffff82165f9081526009602052604081208054909185918391906125fb9084906001600160801b03166145bd565b92506101000a8154816001600160801b0302191690836001600160801b031602179055508265ffffffffffff16856001600160a01b03167ff618eaac43bda1b7a8ca1344c0d6084f93d0b08e7beb0554b03ba72c4ca72bac8660405161267091906001600160801b0391909116815260200190565b60405180910390a35050505050565b5f61268a8383613a30565b90506126963383612826565b610a7983836123e4565b80545f90819081036126b657505f90508061281f565b825f815481106126c8576126c8614453565b5f9182526020909120015465ffffffffffff90811690851610156126f757505065ffffffffffff82165f61281f565b82545f9061270790600190614743565b905083818154811061271b5761271b614453565b5f9182526020909120015465ffffffffffff90811690861610612772578084828154811061274b5761274b614453565b5f91825260209091200154909350600160301b90046001600160801b0316915061281f9050565b5f815b808210156127e8575f600161278a838561455f565b61279590600161455f565b901c90508765ffffffffffff168782815481106127b4576127b4614453565b5f9182526020909120015465ffffffffffff16116127d4578092506127e2565b6127df600182614743565b91505b50612775565b818683815481106127fb576127fb614453565b5f91825260209091200154909550600160301b90046001600160801b031693505050505b9250929050565b6001600160a01b0382165f908152600d602052604090205460ff161561284a575050565b60085465ffffffffffff165f612861826001614724565b6001600160a01b0385165f908152600a60205260408120805492935091908261288b600184614743565b8154811061289b5761289b614453565b5f918252602090912001805490915065ffffffffffff808716911611612a3a57805465ffffffffffff80871691160361291b578054869082906006906128f2908490600160301b90046001600160801b0316614756565b92506101000a8154816001600160801b0302191690836001600160801b031602179055506129a9565b8260405180604001604052808765ffffffffffff16815260200188845f0160069054906101000a90046001600160801b03166129579190614756565b6001600160801b0390811690915282546001810184555f9384526020938490208351910180549490930151909116600160301b026001600160b01b031990931665ffffffffffff909116179190911790555b65ffffffffffff85165f90815260096020526040812080548892906129d89084906001600160801b0316614756565b92506101000a8154816001600160801b0302191690836001600160801b031602179055508465ffffffffffff16876001600160a01b03165f805160206147bd83398151915288604051611b1591906001600160801b0391909116815260200190565b81600103612b1157805486908290600690612a66908490600160301b90046001600160801b0316614756565b82546101009290920a6001600160801b0381810219909316918316021790915565ffffffffffff86165f90815260096020526040812080548a94509092612aaf91859116614756565b92506101000a8154816001600160801b0302191690836001600160801b031602179055508365ffffffffffff16876001600160a01b03165f805160206147bd83398151915288604051611b1591906001600160801b0391909116815260200190565b5f83612b1e600285614743565b81548110612b2e57612b2e614453565b5f918252602082200180548454919350612b5f916001600160801b03600160301b9283900481169290910416614756565b9050806001600160801b0316886001600160801b03161115612e24575f612b86828a614756565b835490915065ffffffffffff808a16911603612cab57825481908490600690612bc0908490600160301b90046001600160801b0316614756565b82546101009290920a6001600160801b0381810219909316918316021790915565ffffffffffff8a165f90815260096020526040812080548594509092612c0991859116614756565b82546101009290920a6001600160801b0381810219909316918316021790915565ffffffffffff89165f90815260096020526040812080548694509092612c5291859116614756565b92506101000a8154816001600160801b0302191690836001600160801b0316021790555085805480612c8657612c86614776565b5f8281526020902081015f1990810180546001600160b01b0319169055019055612d9c565b835465ffffffffffff191665ffffffffffff89161780855589908590600690612ce5908490600160301b90046001600160801b0316614756565b82546101009290920a6001600160801b0381810219909316918316021790915565ffffffffffff8a165f90815260096020526040812080548594509092612d2e91859116614756565b82546101009290920a6001600160801b0381810219909316918316021790915565ffffffffffff89165f90815260096020526040812080548694509092612d7791859116614756565b92506101000a8154816001600160801b0302191690836001600160801b031602179055505b6040516001600160801b038316815265ffffffffffff8816906001600160a01b038c16905f805160206147bd8339815191529060200160405180910390a36040516001600160801b038216815265ffffffffffff8916906001600160a01b038c16905f805160206147bd8339815191529060200160405180910390a350505050505050505050565b825488908490600690612e48908490600160301b90046001600160801b0316614756565b82546101009290920a6001600160801b0381810219909316918316021790915565ffffffffffff88165f90815260096020526040812080548c94509092612e9191859116614756565b92506101000a8154816001600160801b0302191690836001600160801b031602179055508565ffffffffffff16896001600160a01b03165f805160206147bd8339815191528a604051612ef391906001600160801b0391909116815260200190565b60405180910390a3505050505050505050565b5f610e248383670de0b6b3a7640000613106565b6001600160a01b0382165f9081526005602052604081208054839290612f41908490614743565b90915550506004805482900390556040518181525f906001600160a01b038416905f805160206147dd833981519152906020015b60405180910390a35050565b606082612f9657612f9182613a93565b610e24565b8151158015612fad57506001600160a01b0384163b155b15612fd657604051639996b31560e01b81526001600160a01b0385166004820152602401610bfc565b5080610e24565b6001600160a01b0383165f9081526006602090815260408083203384529091528120545f198114613036576130128382614743565b6001600160a01b0386165f9081526006602090815260408083203384529091529020555b6001600160a01b0385165f908152600560205260408120805485929061305d908490614743565b90915550506001600160a01b038085165f81815260056020526040908190208054870190555190918716905f805160206147dd833981519152906130a49087815260200190565b60405180910390a3506001949350505050565b8060045f8282546130c8919061455f565b90915550506001600160a01b0382165f818152600560209081526040808320805486019055518481525f805160206147dd8339815191529101612f75565b5f825f19048411830215820261311a575f80fd5b5091020490565b5f80606084808303613146576040516372c4448b60e11b815260040160405180910390fd5b806001600160401b0381111561315e5761315e613c73565b6040519080825280602002602001820160405280156131ae57816020015b604080516080810182525f8082526020808301829052928201819052606082015282525f1990920191018161317c5790505b5091505f6001600c546131c19190614743565b905065ffffffffffff94505f93505f805f5b8481101561347157838b8b838181106131ee576131ee614453565b905060200201351115613214576040516301dbc85f60e51b815260040160405180910390fd5b5f6101008c8c8481811061322a5761322a614453565b9050602002013561323b91906145aa565b9050815f03613272576001600160a01b038a165f908152600f602090815260408083208484529091529020549093509150826132ab565b8084146132ab576001600160a01b038a165f908152600f6020908152604080832096835295905284812093909355808352929091205490825b5f6101008d8d858181106132c1576132c1614453565b905060200201356132d2919061478a565b9050600184821c8116148015613317578d8d858181106132f4576132f4614453565b905060200201356040516340e47ccb60e11b8152600401610bfc91815260200190565b506001901b929092179150600b5f8c8c8481811061333757613337614453565b602090810292909201358352508181019290925260409081015f208151608081018352815465ffffffffffff8082168352600160301b82041694820194909452600160601b9093046001600160a01b03169183019190915260010154606082015286518790839081106133ac576133ac614453565b60200260200101819052508765ffffffffffff168682815181106133d2576133d2614453565b60200260200101515f015165ffffffffffff16101561340b578581815181106133fd576133fd614453565b60200260200101515f015197505b8665ffffffffffff1686828151811061342657613426614453565b60200260200101516020015165ffffffffffff1611156134615785818151811061345257613452614453565b60200260200101516020015196505b61346a816144bd565b90506131d3565b506001600160a01b039097165f908152600f6020908152604080832093835292905220959095555091959094509092509050565b6060805f6134b3868661479d565b6134be906001614724565b65ffffffffffff169050806001600160401b038111156134e0576134e0613c73565b604051908082528060200260200182016040528015613509578160200160208202803683370190505b509250806001600160401b0381111561352457613524613c73565b60405190808252806020026020018201604052801561354d578160200160208202803683370190505b5084549092505f8061355f89886126a0565b9092506001600160801b031690505f613579600185614743565b604080518082019091525f8082526020820152908410915081156135ef57886135a385600161455f565b815481106135b3576135b3614453565b5f9182526020918290206040805180820190915291015465ffffffffffff81168252600160301b90046001600160801b03169181019190915290505b8a5b8a65ffffffffffff168165ffffffffffff161161377a57815165ffffffffffff82811691161480156136205750825b156136ad5760208201516001600160801b03169350613640600187614743565b613649866144bd565b95508510925082156136ad578961366186600161455f565b8154811061367157613671614453565b5f9182526020918290206040805180820190915291015465ffffffffffff81168252600160301b90046001600160801b03169181019190915291505b65ffffffffffff81165f90815260096020526040902080546001600160801b03168015613767575f6136df8f8561479d565b65ffffffffffff1690506136fc876001600160801b0384166122b9565b8c828151811061370e5761370e614453565b6020908102919091010152825461373e906001600160401b03600160801b8204811691600160c01b9004166144d5565b6001600160401b03168b828151811061375957613759614453565b602002602001018181525050505b50508061377390614572565b90506135f1565b50505050505050935093915050565b60608086806001600160401b038111156137a5576137a5613c73565b6040519080825280602002602001820160405280156137ce578160200160208202803683370190505b509250806001600160401b038111156137e9576137e9613c73565b604051908082528060200260200182016040528015613812578160200160208202803683370190505b5091505f805b82811015613a13575f61384e8a838151811061383657613836614453565b60200260200101518a65ffffffffffff168a8a613abc565b90508015613a02575f805b848110156138f3578b848151811061387357613873614453565b6020026020010151604001516001600160a01b031688828151811061389a5761389a614453565b60200260200101516001600160a01b0316036138e357828782815181106138c3576138c3614453565b602002602001018181516138d7919061455f565b905250600191506138f3565b6138ec816144bd565b9050613859565b5080613975578a838151811061390b5761390b614453565b60200260200101516040015187858151811061392957613929614453565b60200260200101906001600160a01b031690816001600160a01b0316815250508186858151811061395c5761395c614453565b602090810291909101015283613971816144bd565b9450505b8a838151811061398757613987614453565b6020026020010151604001516001600160a01b0316336001600160a01b03167f82439202f33af72917462d0ce3d8c285b0d26c8c1d3e2797c600d8466dcbaff38f8f878181106139d9576139d9614453565b90506020020135856040516139f8929190918252602082015260400190565b60405180910390a3505b50613a0c816144bd565b9050613818565b5081811015613a23578084528083525b5050965096945050505050565b335f90815260056020526040812080548391908390613a50908490614743565b90915550506001600160a01b0383165f81815260056020526040908190208054850190555133905f805160206147dd83398151915290610b659086815260200190565b805115613aa35780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b5f808560600151670de0b6b3a7640000613ad69190614548565b865190915065ffffffffffff165b866020015165ffffffffffff168111613b9c57856001600160801b03168110613b8c575f613b1b6001600160801b03881683614743565b90505f868281518110613b3057613b30614453565b602002602001015190505f811115613b89575f613b6f878481518110613b5857613b58614453565b602002602001015186612f0690919063ffffffff16565b9050613b7b8183612f06565b613b85908761455f565b9550505b50505b613b95816144bd565b9050613ae4565b506120c0670de0b6b3a7640000836145aa565b5f60208284031215613bbf575f80fd5b81356001600160e01b031981168114610e24575f80fd5b5f5b83811015613bf0578181015183820152602001613bd8565b50505f910152565b5f8151808452613c0f816020860160208601613bd6565b601f01601f19169290920160200192915050565b602081525f610e246020830184613bf8565b6001600160a01b03811681146115f2575f80fd5b5f8060408385031215613c5a575f80fd5b8235613c6581613c35565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b0381118282101715613caf57613caf613c73565b604052919050565b5f82601f830112613cc6575f80fd5b81356001600160401b03811115613cdf57613cdf613c73565b613cf2601f8201601f1916602001613c87565b818152846020838601011115613d06575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f8060808587031215613d35575f80fd5b8435613d4081613c35565b93506020850135613d5081613c35565b92506040850135915060608501356001600160401b03811115613d71575f80fd5b613d7d87828801613cb7565b91505092959194509250565b5f805f805f60a08688031215613d9d575f80fd5b8535613da881613c35565b94506020860135613db881613c35565b9350604086013592506060860135613dcf81613c35565b949793965091946080013592915050565b5f8083601f840112613df0575f80fd5b5081356001600160401b03811115613e06575f80fd5b6020830191508360208260051b850101111561281f575f80fd5b5f805f805f8060608789031215613e35575f80fd5b86356001600160401b0380821115613e4b575f80fd5b613e578a838b01613de0565b90985096506020890135915080821115613e6f575f80fd5b613e7b8a838b01613de0565b90965094506040890135915080821115613e93575f80fd5b50613ea089828a01613de0565b979a9699509497509295939492505050565b5f602080830181845280855180835260408601915060408160051b87010192508387015f5b82811015613f0557603f19888603018452613ef3858351613bf8565b94509285019290850190600101613ed7565b5092979650505050505050565b5f805f60608486031215613f24575f80fd5b8335613f2f81613c35565b92506020840135613f3f81613c35565b929592945050506040919091013590565b5f60208284031215613f60575f80fd5b8135610e2481613c35565b5f805f805f805f806080898b031215613f82575f80fd5b88356001600160401b0380821115613f98575f80fd5b613fa48c838d01613de0565b909a50985060208b0135915080821115613fbc575f80fd5b613fc88c838d01613de0565b909850965060408b0135915080821115613fe0575f80fd5b613fec8c838d01613de0565b909650945060608b0135915080821115614004575f80fd5b506140118b828c01613de0565b999c989b5096995094979396929594505050565b602080825282518282018190525f919060409081850190868401855b82811015614077578151805165ffffffffffff1685528601516001600160801b0316868501529284019290850190600101614041565b5091979650505050505050565b5f8060408385031215614095575f80fd5b82356140a081613c35565b915060208301356140b081613c35565b809150509250929050565b5f80602083850312156140cc575f80fd5b82356001600160401b038111156140e1575f80fd5b6140ed85828601613de0565b90969095509350505050565b5f60208284031215614109575f80fd5b813565ffffffffffff81168114610e24575f80fd5b5f805f60408486031215614130575f80fd5b83356001600160401b03811115614145575f80fd5b61415186828701613de0565b909450925050602084013561416581613c35565b809150509250925092565b5f82601f83011261417f575f80fd5b813560206001600160401b0382111561419a5761419a613c73565b8160051b6141a9828201613c87565b92835284810182019282810190878511156141c2575f80fd5b83870192505b84831015611cda578235825291830191908301906141c8565b5f805f805f60a086880312156141f5575f80fd5b853561420081613c35565b9450602086013561421081613c35565b935060408601356001600160401b038082111561422b575f80fd5b61423789838a01614170565b9450606088013591508082111561424c575f80fd5b61425889838a01614170565b9350608088013591508082111561426d575f80fd5b5061427a88828901613cb7565b9150509295509295909350565b5f805f805f805f60e0888a03121561429d575f80fd5b87356142a881613c35565b965060208801356142b881613c35565b95506040880135945060608801359350608088013560ff811681146142db575f80fd5b9699959850939692959460a0840135945060c09093013592915050565b5f805f805f60a0868803121561430c575f80fd5b853561431781613c35565b9450602086013561432781613c35565b9350604086013592506060860135915060808601356001600160401b0381111561434f575f80fd5b61427a88828901613cb7565b5f6020828403121561436b575f80fd5b5035919050565b5f805f8060608587031215614385575f80fd5b843561439081613c35565b935060208501356001600160401b03808211156143ab575f80fd5b818701915087601f8301126143be575f80fd5b8135818111156143cc575f80fd5b8860208285010111156143dd575f80fd5b95986020929092019750949560400135945092505050565b600181811c9082168061440957607f821691505b60208210810361442757634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252600c908201526b15539055551213d49256915160a21b604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b5f808335601e1984360301811261447c575f80fd5b8301803591506001600160401b03821115614495575f80fd5b60200191503681900382131561281f575f80fd5b634e487b7160e01b5f52601160045260245ffd5b5f600182016144ce576144ce6144a9565b5060010190565b6001600160401b038281168282160390808211156144f5576144f56144a9565b5092915050565b6001600160a01b0393841681529190921660208201526001600160e01b0319909116604082015260600190565b5f60208284031215614539575f80fd5b81518015158114610e24575f80fd5b8082028115828204841417610a7957610a796144a9565b80820180821115610a7957610a796144a9565b5f65ffffffffffff80831681810361458c5761458c6144a9565b6001019392505050565b634e487b7160e01b5f52601260045260245ffd5b5f826145b8576145b8614596565b500490565b6001600160801b038181168382160190808211156144f5576144f56144a9565b5f82516145ee818460208701613bd6565b9190910192915050565b5f80835481600182811c91508083168061461357607f831692505b6020808410820361463257634e487b7160e01b86526022600452602486fd5b818015614646576001811461465b57614686565b60ff1986168952841515850289019650614686565b5f8a8152602090205f5b8681101561467e5781548b820152908501908301614665565b505084890196505b509498975050505050505050565b606080825284519082018190525f906020906080840190828801845b828110156146d55781516001600160a01b0316845292840192908401906001016146b0565b505050838103828501528551808252868301918301905f5b81811015614709578351835292840192918401916001016146ed565b50506001600160a01b03861660408601529250610bc3915050565b65ffffffffffff8181168382160190808211156144f5576144f56144a9565b81810381811115610a7957610a796144a9565b6001600160801b038281168282160390808211156144f5576144f56144a9565b634e487b7160e01b5f52603160045260245ffd5b5f8261479857614798614596565b500690565b65ffffffffffff8281168282160390808211156144f5576144f56144a956fe632056710afd218e9699548c7020044b84740417c6b482b438054907f72cceaeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212201b4c656d143d3b2a3e1590fe259223adc5a6f5069d7ce18604aae2ff8f82007d64736f6c63430008150033608060405234801561000f575f80fd5b505f80546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506104dd8061005d5f395ff3fe608060405234801561000f575f80fd5b506004361061003f575f3560e01c806375992d3c146100435780638da5cb5b14610058578063f2fde38b14610086575b5f80fd5b610056610051366004610386565b610099565b005b5f5461006a906001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b61005661009436600461044f565b61017a565b5f546001600160a01b031633146100e65760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b60448201526064015b60405180910390fd5b8251825181146101095760405163512509d360e11b815260040160405180910390fd5b5f5b8181101561017357610163838583815181106101295761012961046f565b60200260200101518784815181106101435761014361046f565b60200260200101516001600160a01b031661020c9092919063ffffffff16565b61016c81610483565b905061010b565b5050505050565b5f546001600160a01b031633146101c25760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b60448201526064016100dd565b5f80546001600160a01b0319166001600160a01b0383169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b5f60405163a9059cbb60e01b81526001600160a01b038416600482015282602482015260205f6044835f895af191505080601f3d1160015f5114161516156102565750823b153d17155b806102955760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b60448201526064016100dd565b50505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff811182821017156102d8576102d861029b565b604052919050565b5f67ffffffffffffffff8211156102f9576102f961029b565b5060051b60200190565b80356001600160a01b0381168114610319575f80fd5b919050565b5f82601f83011261032d575f80fd5b8135602061034261033d836102e0565b6102af565b82815260059290921b84018101918181019086841115610360575f80fd5b8286015b8481101561037b5780358352918301918301610364565b509695505050505050565b5f805f60608486031215610398575f80fd5b833567ffffffffffffffff808211156103af575f80fd5b818601915086601f8301126103c2575f80fd5b813560206103d261033d836102e0565b82815260059290921b8401810191818101908a8411156103f0575f80fd5b948201945b838610156104155761040686610303565b825294820194908201906103f5565b9750508701359250508082111561042a575f80fd5b506104378682870161031e565b92505061044660408501610303565b90509250925092565b5f6020828403121561045f575f80fd5b61046882610303565b9392505050565b634e487b7160e01b5f52603260045260245ffd5b5f600182016104a057634e487b7160e01b5f52601160045260245ffd5b506001019056fea2646970667358221220448b9387a0e251403453025084a9a5810d9e05a9ba53dbb3c6a19102633462fc64736f6c6343000815003300000000000000000000000047cec90facc9364d7c21a8ab5e2ad9f1f75d740c000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000010526f79636f2055534443205661756c74000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007726f795553444300000000000000000000000000000000000000000000000000