0 txs
0 calls
constructor
constructor()
functions
comptroller
viewfunction comptroller() view returns (address)
eligibleERC20Tokens
viewfunction eligibleERC20Tokens(uint256) view returns (address)
emissionCap
viewfunction emissionCap() view returns (uint256)
getAllMarketConfigs
viewfunction getAllMarketConfigs(address _pToken) view returns (tuple[])
getConfigForMarket
viewfunction getConfigForMarket(address _pToken, address _emissionToken) view returns (tuple)
getCurrentEmissionCap
viewfunction getCurrentEmissionCap() view returns (uint256)
getCurrentOwner
viewfunction getCurrentOwner(address _pToken, address _emissionToken) view returns (address)
getGlobalBorrowIndex
viewfunction getGlobalBorrowIndex(address pToken, uint256 index) view returns (uint256)
getGlobalSupplyIndex
viewfunction getGlobalSupplyIndex(address pToken, uint256 index) view returns (uint256)
getOutstandingRewardsForUser
viewfunction getOutstandingRewardsForUser(address _pToken, address _user) view returns (tuple[])
getOutstandingRewardsForUser
viewfunction getOutstandingRewardsForUser(address _user) view returns (tuple[])
initialIndexConstant
viewfunction initialIndexConstant() view returns (uint224)
isEligibleForReward
viewfunction isEligibleForReward(address _user) view returns (bool)
marketConfigs
viewfunction marketConfigs(address, uint256) view returns (tuple config)
paused
viewfunction paused() view returns (bool)
pauseGuardian
viewfunction pauseGuardian() view returns (address)
rewardEligibilityNFTs
viewfunction rewardEligibilityNFTs(uint256) view returns (address)
rewardEligibilityTokens
viewfunction rewardEligibilityTokens(address) view returns (uint256)
_addEmissionConfig
nonpayablefunction _addEmissionConfig(address _pToken, address _owner, address _emissionToken, uint256 _supplyEmissionPerSec, uint256 _borrowEmissionsPerSec, uint256 _endTime)
_pauseRewards
nonpayablefunction _pauseRewards()
_rescueFunds
nonpayablefunction _rescueFunds(address _tokenAddress, uint256 _amount)
_setEligibleERC20Token
nonpayablefunction _setEligibleERC20Token(address _token, uint256 _minAmount)
_setEligibleNFT
nonpayablefunction _setEligibleNFT(address _nftContract)
_setEmissionCap
nonpayablefunction _setEmissionCap(uint256 _newEmissionCap)
_setPauseGuardian
nonpayablefunction _setPauseGuardian(address _newPauseGuardian)
_unpauseRewards
nonpayablefunction _unpauseRewards()
_updateBorrowSpeed
nonpayablefunction _updateBorrowSpeed(address _pToken, address _emissionToken, uint256 _newBorrowSpeed)
_updateEndTime
nonpayablefunction _updateEndTime(address _pToken, address _emissionToken, uint256 _newEndTime)
_updateOwner
nonpayablefunction _updateOwner(address _pToken, address _emissionToken, address _newOwner)
_updateSupplySpeed
nonpayablefunction _updateSupplySpeed(address _pToken, address _emissionToken, uint256 _newSupplySpeed)
disburseBorrowerRewards
nonpayablefunction disburseBorrowerRewards(address _pToken, address _borrower, bool _sendTokens)
disburseSupplierRewards
nonpayablefunction disburseSupplierRewards(address _pToken, address _supplier, bool _sendTokens)
initialize
nonpayablefunction initialize(address _comptroller, address _pauseGuardian)
updateMarketBorrowIndex
nonpayablefunction updateMarketBorrowIndex(address _pToken)
updateMarketBorrowIndexAndDisburseBorrowerRewards
nonpayablefunction updateMarketBorrowIndexAndDisburseBorrowerRewards(address _pToken, address _borrower, bool _sendTokens)
updateMarketSupplyIndex
nonpayablefunction updateMarketSupplyIndex(address _pToken)
updateMarketSupplyIndexAndDisburseSupplierRewards
nonpayablefunction updateMarketSupplyIndexAndDisburseSupplierRewards(address _pToken, address _supplier, bool _sendTokens)
events
DisbursedBorrowerRewards
event DisbursedBorrowerRewards(address pToken, address indexed borrower, address indexed emissionToken, uint256 totalAccrued)
DisbursedSupplierRewards
event DisbursedSupplierRewards(address pToken, address indexed supplier, address indexed emissionToken, uint256 totalAccrued)
ERC20TokenAdded
event ERC20TokenAdded(address indexed token, uint256 minAmount)
ERC20TokenRemoved
event ERC20TokenRemoved(address indexed token)
FundsRescued
event FundsRescued(address token, uint256 amount)
GlobalBorrowIndexUpdated
event GlobalBorrowIndexUpdated(address pToken, address emissionToken, uint256 newIndex, uint32 newTimestamp)
GlobalSupplyIndexUpdated
event GlobalSupplyIndexUpdated(address pToken, address emissionToken, uint256 newSupplyIndex, uint32 newSupplyGlobalTimestamp)
Initialized
event Initialized(uint64 version)
InsufficientTokensToEmit
event InsufficientTokensToEmit(address user, address rewardToken, uint256 amount)
NewBorrowRewardSpeed
event NewBorrowRewardSpeed(address pToken, address indexed emissionToken, uint256 oldRewardSpeed, uint256 newRewardSpeed)
NewConfigCreated
event NewConfigCreated(address pToken, address indexed owner, address indexed emissionToken, uint256 supplySpeed, uint256 borrowSpeed, uint256 endTime)
NewEmissionCap
event NewEmissionCap(uint256 oldEmissionCap, uint256 newEmissionCap)
NewEmissionConfigOwner
event NewEmissionConfigOwner(address pToken, address indexed emissionToken, address currentOwner, address newOwner)
NewPauseGuardian
event NewPauseGuardian(address oldPauseGuardian, address newPauseGuardian)
NewRewardEndTime
event NewRewardEndTime(address pToken, address indexed emissionToken, uint256 currentEndTime, uint256 newEndTime)
NewSupplyRewardSpeed
event NewSupplyRewardSpeed(address pToken, address indexed emissionToken, uint256 oldRewardSpeed, uint256 newRewardSpeed)
NFTAdded
event NFTAdded(address indexed nftContract)
NFTRemoved
event NFTRemoved(address indexed nftContract)
Paused
event Paused(address account)
RewardsPaused
event RewardsPaused()
RewardsUnpaused
event RewardsUnpaused()
Unpaused
event Unpaused(address account)
errors
AddressEmptyCode
error AddressEmptyCode(address target)
AddressInsufficientBalance
error AddressInsufficientBalance(address account)
EligibilityNFTCanNotBeZeroAddress
error EligibilityNFTCanNotBeZeroAddress()
EligibilityTokenAmountNotBeZero
error EligibilityTokenAmountNotBeZero()
EligibilityTokenCanNotBeZeroAddress
error EligibilityTokenCanNotBeZeroAddress()
EnforcedPause
error EnforcedPause()
ExpectedPause
error ExpectedPause()
FailedInnerCall
error FailedInnerCall()
InvalidInitialization
error InvalidInitialization()
NotInitializing
error NotInitializing()
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
creation bytecode
0x60808060405234620000c95760ff195f54165f55600180557ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a009081549060ff8260401c16620000ba57506001600160401b036002600160401b03198282160162000074575b604051613e4b9081620000ce8239f35b6001600160401b031990911681179091556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f808062000064565b63f92ee8a960e01b8152600490fd5b5f80fdfe6080806040526004361015610012575f80fd5b5f3560e01c908163019047d6146121a15750806307e8ce85146121035780630cd8bbc51461062357806310d47dc71461207257806314f5577314611fe157806324a3d62214611fb95780632839238014611f0c5780632e71094014611ee35780633616b04b14611d5c578063375fea2914611c5c578063472db55d14611b79578063485cc955146118fb5780635c975abb146118da5780635dab0e0c146116d55780635f5af1aa146115c25780635fe3b5671461159a578063610393a01461144f57806371d4c2551461142257806373a1f3d0146113d15780637e218f90146112d85780637f7336ba1461115e5780638220d7cf146110bd5780638b62a51a1461107f57806390e9f21314610e76578063ad1a928014610e36578063adc75e5214610d97578063b2fa9e1014610d46578063b3330a8d14610d0e578063c11a70b314610cad578063c9a06b4514610a43578063d37cacd814610a01578063dbc7779b14610818578063e0ed911614610777578063e66b98c914610640578063e88d9c1b14610623578063ea0f3dff146101e05763ed302dfd146101b3575f80fd5b346101dc575f3660031901126101dc5760206040516ec097ce7bc90715b34b9f10000000008152f35b5f80fd5b346101dc5760c03660031901126101dc576101f961223d565b610201612253565b9061020a612269565b6002546040516303e1469160e61b81526001600160a01b039460649392909190861690602081600481855afa9182156105e957610257886024946040945f916105f4575b501633146129a4565b8151638e8f294b60e01b8152878916600482015292839182905afa9081156105e9575f916105af575b5015610553576102a26004546102998160643510612b79565b60843510612d85565b6001936001420180421161053f5760a43511156104e4578581165f52600760205260405f20945f948654955b868110610482575050506103036102e3612df7565b6102f564010000000042109182613ae6565b6102fd612df7565b90613ae6565b7fa76959d76a349a0b8fd3120607e3aea6af58897ae6531bfe60a0267c4ea0c27260808780604051966103358861241a565b8187168852818116602089015260a43560408901526ec097ce7bc90715b34b9f1000000000606089015263ffffffff4216848901526ec097ce7bc90715b34b9f100000000060a089015263ffffffff421660c089015260643560e089015260843561010089015281604051961686526064356020870152608435604087015260a435606087015216941692a3600160401b82101561046e576103e2826006946001610100950181556123e5565b50815181549086166001600160a01b031991821617825560208301516001830180549190971691161790945560408101516002850155606081015160808201516001600160e01b039182166001600160e01b031960e092831b811691909117600388015560a084015160c085015193169290911b1617600485015560e081015160058501550151910155005b634e487b7160e01b5f52604160045260245ffd5b61048c81896123e5565b508301548916868a16146104a15782016102ce565b5060405162461bcd60e51b815260206004820152601e60248201527f456d697373696f6e20746f6b656e20616c7265616479206c69737465642100006044820152fd5b60405162461bcd60e51b815260206004820152602d60248201527f546865205f656e6454696d6520706172616d65746572206d757374206265206960448201526c6e20746865206675747572652160981b6064820152608490fd5b634e487b7160e01b5f52601160045260245ffd5b60405162461bcd60e51b815260206004820152602e60248201527f546865206d61726b65742072657175657374656420746f20626520616464656460448201526d20697320756e2d6c69737465642160901b6064820152608490fd5b90506040813d6040116105e1575b816105ca6040938361246f565b810103126101dc576105db90612b5f565b86610280565b3d91506105bd565b6040513d5f823e3d90fd5b610616915060203d60201161061c575b61060e818361246f565b81019061250c565b8b61024e565b503d610604565b346101dc575f3660031901126101dc576020600454604051908152f35b346101dc5760603660031901126101dc5761065961223d565b610661612253565b610669612269565b9061067481846137d3565b546001600160a01b0392908316331480156106f2575b917f6ca67f2e3675f2b549fe77271364ebde88b3c7eb3ef84af329c373ca64fa257893916106b9606094612a0a565b826106c483886137d3565b80546001600160a01b03198116938316938417909155604080519883168952911660208801528601521692a2005b509160049160208260025416604051948580926303e1469160e61b82525afa9384156105e9576106b9837f6ca67f2e3675f2b549fe77271364ebde88b3c7eb3ef84af329c373ca64fa2578966060965f91610758575b501633149294505091935061068a565b610771915060203d60201161061c5761060e818361246f565b89610748565b346101dc576107853661227f565b9060018060a01b03928360025416938433149485156107bd575b50506107ad6107bb9461252b565b6107b681613880565b6133c6565b005b6040516303e1469160e61b8152919550602090829060049082905afa9485156105e9576107bb956107ad925f916107f9575b501633149461079f565b610812915060203d60201161061c5761060e818361246f565b876107ef565b346101dc5760403660031901126101dc5761083161223d565b6002546040516303e1469160e61b808252926024359290916020916001600160a01b03908116918381600481865afa9081156105e95761087c9183915f916109e457501633146129a4565b838116915f19860361097157508290600254169560046040518098819382525afa9485156105e9575f95610952575b506040516370a0823160e01b81523060048201528281602481855afa9283156105e9575f93610920575b5050907fc4474c2790e13695f6d2b6f1d8e164290b55370f87a542fd7711abe0a1bf40ac94610903926139f5565b604080516001600160a01b039290921682526020820192909252a1005b90809350813d831161094b575b610937818361246f565b810103126101dc57905190846109036108d5565b503d61092d565b61096a919550823d841161061c5761060e818361246f565b93856108ab565b92919582915060046040518095819382525afa80156105e9577fc4474c2790e13695f6d2b6f1d8e164290b55370f87a542fd7711abe0a1bf40ac956109c09386935f936109c5575b50506139f5565b610903565b6109dc929350803d1061061c5761060e818361246f565b9087806109b9565b6109fb9150863d881161061c5761060e818361246f565b8961024e565b346101dc5760203660031901126101dc576004356006548110156101dc57610a2a602091612306565b905460405160039290921b1c6001600160a01b03168152f35b346101dc576020806003193601126101dc57610a5d61223d565b60025460405163b0772d0b60e01b81526001600160a01b0393915f908290600490829088165afa9081156105e9575f91610c17575b50805193610ab8610aa28661259c565b95610ab0604051978861246f565b80875261259c565b601f1901835f5b828110610bf4575050505f5b8251811015610b2a5780610aed8684610ae6600195886125c1565b51166125d5565b83610af883876125c1565b51169060405191610b08836123fe565b825286820152610b1882896125c1565b52610b2381886125c1565b5001610acb565b8184876040519180830190808452825180925260408401948160408460051b8701019401955f915b848310610b5f5786860387f35b909192809495603f1988820301845288518260608160408501938781511686520151936040838201528451809452019201905f905b808210610bb05750505097810197959493600101920190610b52565b825180516001600160a01b03168552602080820151908601526040808201519086015260609081015190850152889460809094019390920191600190910190610b94565b604051610c00816123fe565b5f815260608382015282828a010152018490610abf565b90503d805f833e610c28818361246f565b81019082818303126101dc5780519067ffffffffffffffff82116101dc57019080601f830112156101dc578151610c5e8161259c565b92610c6c604051948561246f565b818452848085019260051b8201019283116101dc578401905b828210610c955750505084610a92565b815187811681036101dc578152908401908401610c85565b346101dc5760403660031901126101dc57610cc661223d565b6001600160a01b03165f9081526007602052604090208054602435908110156101dc57610cf9610cff91610120936123e5565b50612491565b610d0c6040518092612370565bf35b346101dc5760203660031901126101dc576001600160a01b03610d2f61223d565b165f526008602052602060405f2054604051908152f35b346101dc5760403660031901126101dc576001600160a01b03610d6761223d565b165f5260076020526020610d8060243560405f206123e5565b50600401546040516001600160e01b039091168152f35b346101dc57610da53661227f565b9060018060a01b0392836002541693843314948515610ddb575b5050610dcd6107bb9461252b565b610dd681612e30565b613573565b6040516303e1469160e61b8152919550602090829060049082905afa9485156105e9576107bb95610dcd925f91610e17575b5016331494610dbf565b610e30915060203d60201161061c5761060e818361246f565b87610e0d565b346101dc5760403660031901126101dc576020610e5161223d565b6001600160a01b0390610e6c90610e66612253565b906137d3565b5416604051908152f35b346101dc5760203660031901126101dc57610e8f61223d565b6002546040516303e1469160e61b81526001600160a01b03916020908290600490829086165afa9081156105e957610ed29183915f9161106057501633146129a4565b80821691821561104e575f915f926005938454905b818110611022575b5050610f5c5750815491600160401b83101561046e5782610f18916001610f36950190556122bd565b90919060018060a01b038084549260031b9316831b921b1916179055565b7fd807855971ef740a3ec46115ddc8adae6ade044d91ff1c498578b1ff7f1e011b5f80a2005b90505f915b805492838110156107bb578285610f77836122bd565b929054600393841b1c1614610f9157506001019250610f61565b91935f199384820191821161053f57610fbc93610fb0610f18936122bd565b9054911b1c16916122bd565b8154801561100e570190610fe7610fd2836122bd565b81549060018060a01b039060031b1b19169055565b557fd3dc7080cc379140adfc80034dcc1cd2d6957e1181c0ff0ae3170c4be1152fc35f80a2005b634e487b7160e01b5f52603160045260245ffd5b868461102d836122bd565b90549060031b1c161461104257600101610ee7565b50505060018580610eef565b604051635d83d44960e11b8152600490fd5b611079915060203d60201161061c5761060e818361246f565b8561024e565b346101dc5760403660031901126101dc57610120610cff6110b86110a161223d565b6110a9612253565b906110b2612d42565b506137d3565b612491565b346101dc5760203660031901126101dc576110d661223d565b6002546001600160a01b039081163381149291908315611103575b6107bb836110fe8661252b565b613880565b6040516303e1469160e61b8152919350602090829060049082905afa9283156105e9576107bb936110fe925f9161113f575b50163314926110f1565b611158915060203d60201161061c5761060e818361246f565b85611135565b346101dc5761116c3661233b565b9061117781846137d3565b546001600160a01b03919082163314801561127d575b61119690612a0a565b60066111a282866137d3565b01805493848114611219577f8fc43850ed5c7aaa0ce83829a1a40202c3fcf8257788d69881611dff1a0b32e99481611214936111e16004548310612d85565b6111ea89612e30565b55604080516001600160a01b03909816885260208801919091528601529116929081906060820190565b0390a2005b60405162461bcd60e51b815260206004820152603660248201527f43616e277420736574206e657720626f72726f7720656d697373696f6e7320746044820152756f20626520657175616c20746f2063757272656e742160501b6064820152608490fd5b50600460208360025416604051928380926303e1469160e61b82525afa9081156105e9576111969184915f916112b9575b50163314905061118d565b6112d2915060203d60201161061c5761060e818361246f565b876112ae565b346101dc576020806003193601126101dc576001600160a01b036112fa61223d565b165f526007815260405f209081546113118161259c565b9261131f604051948561246f565b81845261132b8261259c565b601f1901835f5b8281106113bb575050505f5b82811061138f5760408051858152865181870181905287870192820190875f5b82811061136b5784840385f35b90919282610120826113806001948a51612370565b0196019101949291909461135e565b8061139f610cf9600193856123e5565b6113a982886125c1565b526113b481876125c1565b500161133e565b6113c3612d42565b828289010152018490611332565b346101dc5760403660031901126101dc576001600160a01b036113f261223d565b165f526007602052602061140b60243560405f206123e5565b50600301546040516001600160e01b039091168152f35b346101dc5760203660031901126101dc57602061144561144061223d565b612beb565b6040519015158152f35b346101dc5761145d3661233b565b9061146881846137d3565b546001600160a01b03919082163314801561153f575b61148790612a0a565b600561149382866137d3565b018054938481146114db577fc4d50731808aa5d941c471c0b29364fecd810aa0565344f6cdcab2c873422baf9481611214936114d26004548310612b79565b6111ea89613880565b60405162461bcd60e51b815260206004820152603660248201527f43616e277420736574206e657720737570706c7920656d697373696f6e7320746044820152756f20626520657175616c20746f2063757272656e742160501b6064820152608490fd5b50600460208360025416604051928380926303e1469160e61b82525afa9081156105e9576114879184915f9161157b575b50163314905061147e565b611594915060203d60201161061c5761060e818361246f565b87611570565b346101dc575f3660031901126101dc576002546040516001600160a01b039091168152602090f35b346101dc5760203660031901126101dc576115db61223d565b600354906001600160a01b0380831691338314801561164e575b917f0613b6ee6a04f0d09f390e4d9318894b9f6ac7fd83897cd8d18896ba579c401e949161162560409594612a86565b168091611633821515612b04565b6001600160a01b0319161760035582519182526020820152a1005b50928160206004949360025416604051958680926303e1469160e61b82525afa9485156105e957611625827f0613b6ee6a04f0d09f390e4d9318894b9f6ac7fd83897cd8d18896ba579c401e976040975f916116b6575b5016331492949550509194506115f5565b6116cf915060203d60201161061c5761060e818361246f565b896116a5565b346101dc5760403660031901126101dc576116ee61223d565b6002546040516303e1469160e61b8152602492916020918435916001600160a01b03919084908290600490829086165afa9081156105e95761173b9183915f916118bd57501633146129a4565b81156118ab5780841694851561189957855f526008906008855260405f2054155f146117be57505050600654600160401b81101561046e577fcd91532fdf792a63e2508c31041e551824b20b4533faba32451519a1fcddafd393610f188260016117a89401600655612306565b835f52600882528060405f2055604051908152a2005b9194509291505f5b60068054808310156107bb5786886117dd85612306565b929054600393841b1c16146117f7575050506001016117c6565b5f979194939295969719948581019081116118865791610f189161181e61182a9594612306565b9054911b1c1691612306565b825490811561187357500190611842610fd283612306565b55825f52525f60408120557f90387a30bef2980f7747512c8766fbb69ddb92b45d201abf34eb8915299f8d6a5f80a2005b634e487b7160e01b5f9081526031600452fd5b84634e487b7160e01b5f5260116004525ffd5b604051636f81274360e11b8152600490fd5b604051630522115b60e01b8152600490fd5b6118d49150863d881161061c5761060e818361246f565b8861024e565b346101dc575f3660031901126101dc57602060ff5f54166040519015158152f35b346101dc5760403660031901126101dc5761191461223d565b61191c612253565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a009182549060ff8260401c16159167ffffffffffffffff811680159081611b71575b6001149081611b67575b159081611b5e575b50611b4c5767ffffffffffffffff198116600117855582611b2d575b506001600160a01b03908116928315611adc57166119ab811515612b04565b6bffffffffffffffffffffffff60a01b838160025416176002556040518094623f1ee960e11b825281600460209788935afa9081156105e9575f91611aa7575b5015611a4857600354161760035568056bc75e2d63100000600455611a0c57005b7fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29168ff000000000000000019815416905560405160018152a1005b60405162461bcd60e51b815260048101859052603160248201527f43616e27742062696e6420746f20736f6d657468696e6720746861742773206e6044820152706f74206120636f6d7074726f6c6c65722160781b6064820152608490fd5b90508481813d8311611ad5575b611abe818361246f565b810103126101dc57611acf90612b5f565b866119eb565b503d611ab4565b60405162461bcd60e51b815260206004820152602360248201527f436f6d7074726f6c6c65722063616e277420626520746865203020616464726560448201526273732160e81b6064820152608490fd5b68ffffffffffffffffff1916680100000000000000011784558461198c565b60405163f92ee8a960e01b8152600490fd5b90501586611970565b303b159150611968565b84915061195e565b346101dc575f3660031901126101dc576002546040516303e1469160e61b8152906001600160a01b03906020908390600490829085165afa80156105e957611bca925f91611c3d57501633146129a4565b5f5460ff811615611c2b5760ff19165f557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a17f24abc2b8df8d63728da8fe06c1555853a3f293f812e1ebd4303a5d6df7173e6c5f80a1005b604051638dfc202b60e01b8152600490fd5b611c56915060203d60201161061c5761060e818361246f565b8361024e565b346101dc575f3660031901126101dc57600354336001600160a01b0391821614908115611d04575b50611c8e90612a86565b5f5460ff8116611cf25760019060ff1916175f557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a17fb83b93884b98604cbc549e7e4a81a9e49bd62c603026ec82f04915037258c5645f80a1005b60405163d93c066560e01b8152600490fd5b6004915060208160025416604051938480926303e1469160e61b82525afa80156105e957611c8e925f91611d3d575b5016331490611c84565b611d56915060203d60201161061c5761060e818361246f565b83611d33565b346101dc57611d6a3661233b565b90611d7581846137d3565b546001600160a01b039190821633148015611e88575b611d9490612a0a565b6002611da082866137d3565b0180549384811115611e375742811115611de4577f10f16113484fbc6e60553a394eb2a3ae47999b610e4212fad6903486dbca7f929481611214936114d289612e30565b60405162461bcd60e51b815260206004820152602560248201527f5f6e6577456e6454696d65204d555354206265203e20626c6f636b2e74696d6560448201526407374616d760dc1b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f5f6e6577456e6454696d65204d555354206265203e2063757272656e74456e6460448201526354696d6560e01b6064820152608490fd5b50600460208360025416604051928380926303e1469160e61b82525afa9081156105e957611d949184915f91611ec4575b501633149050611d8b565b611edd915060203d60201161061c5761060e818361246f565b87611eb9565b346101dc5760203660031901126101dc576004356005548110156101dc57610a2a6020916122bd565b346101dc5760203660031901126101dc576002546040516303e1469160e61b81526001600160a01b039160048035916020918491829087165afa9182156105e9577f8d2ad4bb95e94ce8d50ed07769a97467ba4db3f80fc0badf6c81d0907a0b410a93604093611f85925f91611f9a57501633146129a4565b600454908060045582519182526020820152a1005b611fb3915060203d60201161061c5761060e818361246f565b8661024e565b346101dc575f3660031901126101dc576003546040516001600160a01b039091168152602090f35b346101dc57611fef3661227f565b9060018060a01b0392836002541693843314948515612017575b5050610dd66107bb9461252b565b6040516303e1469160e61b8152919550602090829060049082905afa9485156105e9576107bb95610dd6925f91612053575b5016331494612009565b61206c915060203d60201161061c5761060e818361246f565b87612049565b346101dc576120803661227f565b9060018060a01b03928360025416938433149485156120a8575b50506107b66107bb9461252b565b6040516303e1469160e61b8152919550602090829060049082905afa9485156105e9576107bb956107b6925f916120e4575b501633149461209a565b6120fd915060203d60201161061c5761060e818361246f565b876120da565b346101dc5760403660031901126101dc5761212d61211f61223d565b612127612253565b906125d5565b604051602091602082016020835281518091526020604084019201935f5b8281106121585784840385f35b90919282612195600192885190606060809260018060a01b0381511683526020810151602084015260408101516040840152015160608201520190565b9601959392910161214b565b346101dc5760203660031901126101dc576121ba61223d565b6002546001600160a01b03908116338114939084156121e6575b6107bb846121e18761252b565b612e30565b81929450906004816020936303e1469160e61b82525afa9283156105e9576107bb936121e1925f9161221e575b5016331492846121d4565b612237915060203d60201161061c5761060e818361246f565b85612213565b600435906001600160a01b03821682036101dc57565b602435906001600160a01b03821682036101dc57565b604435906001600160a01b03821682036101dc57565b60609060031901126101dc576001600160a01b039060043582811681036101dc579160243590811681036101dc579060443580151581036101dc5790565b6005548110156122f25760055f527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db001905f90565b634e487b7160e01b5f52603260045260245ffd5b6006548110156122f25760065f527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f01905f90565b60609060031901126101dc576001600160a01b039060043582811681036101dc579160243590811681036101dc579060443590565b60018060a01b03808251168352602082015116602083015260408101516040830152606081015160018060e01b03809116606084015260808201519063ffffffff809216608085015260a08301511660a084015260c08201511660c083015260e081015160e083015261010080910151910152565b80548210156122f2575f52600b60205f20910201905f90565b6040810190811067ffffffffffffffff82111761046e57604052565b610120810190811067ffffffffffffffff82111761046e57604052565b6080810190811067ffffffffffffffff82111761046e57604052565b6020810190811067ffffffffffffffff82111761046e57604052565b90601f8019910116810190811067ffffffffffffffff82111761046e57604052565b9060405161249e8161241a565b82546001600160a01b03908116825260018401541660208201526002830154604082015260038301546001600160e01b03808216606084015260e091821c6080840152600485015490811660a0840152811c60c0830152600584015490820152600690920154610100830152565b908160209103126101dc57516001600160a01b03811681036101dc5790565b1561253257565b608460405162461bcd60e51b815260206004820152604060248201527f4f6e6c792074686520636f6d7074726f6c6c6572206f7220636f6d7074726f6c60448201527f6c65722061646d696e2063616e2063616c6c20746869732066756e6374696f6e6064820152fd5b67ffffffffffffffff811161046e5760051b60200190565b9190820180921161053f57565b80518210156122f25760209160051b010190565b9060018060a01b03809216805f5260209060078252604092835f20908154946125fd8661259c565b9661260a8251988961246f565b868852601f196126198861259c565b01865f5b828110612978575050508151936318160ddd60e01b8552600493878686818a5afa95861561296e575f9661293f575b5083516308f7a6e360e31b815291888387818b5afa928315612935575f93612906575b50845163aa5af0fd60e01b8152898188818c5afa908115612881575f916128d9575b5085519061269e82612453565b81528551936060986060860186811067ffffffffffffffff8211176128c657885285528a850152858401528451976370a0823160e01b895284831680888b01528a8a602481855afa998a156128bc57908b915f9b61288b575b5060248851809481936395dd919360e01b83528c8301525afa908115612881575f91612854575b5085519861272b8a6123fe565b89528989015284519261273d846123fe565b83528883019788525f5b8a811061275c57505050505050505050505090565b898c828b8a898b8961276e868b6123e5565b5094828d8760058101549160038201548d60e090600160e01b6001900396879660028701549485875151918a811690871c6127a89461300b565b9c6006870154960154945191820151910151906127c3613b4b565b6127cc91613ceb565b90516127d791613b84565b92858116911c6127e69461300b565b965116838351516127f7928a613219565b955116928d51015190519061280c93876132e8565b9260010154169461281d82846125b4565b908c519661282a88612437565b87528601528a8501528b840152612840916125c1565b5261284b818d6125c1565b50600101612747565b90508981813d831161287a575b61286b818361246f565b810103126101dc57515f61271e565b503d612861565b86513d5f823e3d90fd5b828193929c503d83116128b5575b6128a3818361246f565b810103126101dc578a9051995f6126f7565b503d612899565b87513d5f823e3d90fd5b60418a634e487b7160e01b5f525260245ffd5b90508981813d83116128ff575b6128f0818361246f565b810103126101dc57515f612691565b503d6128e6565b9092508881813d831161292e575b61291e818361246f565b810103126101dc5751915f61266f565b503d612914565b85513d5f823e3d90fd5b9095508781813d8311612967575b612957818361246f565b810103126101dc5751945f61264c565b503d61294d565b84513d5f823e3d90fd5b845161298381612437565b5f81525f838201525f868201525f606082015282828d01015201879061261d565b156129ab57565b60405162461bcd60e51b815260206004820152603160248201527f4f6e6c792074686520636f6d7074726f6c6c657227732061646d696e6973747260448201527061746f722063616e20646f20746869732160781b6064820152608490fd5b15612a1157565b60405162461bcd60e51b815260206004820152604160248201527f4f6e6c792074686520636f6e666967206f776e6572206f7220636f6d7074726f60448201527f6c6c65722061646d696e2063616e2063616c6c20746869732066756e6374696f6064820152603760f91b608482015260a490fd5b15612a8d57565b60405162461bcd60e51b815260206004820152604360248201527f4f6e6c792074686520706175736520677561726469616e206f7220636f6d707460448201527f726f6c6c65722061646d696e2063616e2063616c6c20746869732066756e637460648201526234b7b760e91b608482015260a490fd5b15612b0b57565b60405162461bcd60e51b815260206004820152602660248201527f506175736520477561726469616e2063616e277420626520746865203020616460448201526564726573732160d01b6064820152608490fd5b519081151582036101dc57565b9190820391821161053f57565b15612b8057565b60405162461bcd60e51b815260206004820152603e60248201527f43616e6e6f7420736574206120737570706c792072657761726420737065656460448201527f20686967686572207468616e2074686520656d697373696f6e206361702100006064820152608490fd5b6006545f5b818110612cac575050600554905f5b828110612c0d575050505f90565b6024612c18826122bd565b9054604080516370a0823160e01b81526001600160a01b038781166004830152919490936020938493869392849260039190911b1c165afa928315612ca357505f92612c75575b5050612c6d57600101612bff565b505050600190565b90809250813d8311612c9c575b612c8c818361246f565b810103126101dc57515f80612c5f565b503d612c82565b513d5f823e3d90fd5b612cb581612306565b9060018060a01b03918291549060031b1c16805f526020906008825260409180835f20549460248551809581936370a0823160e01b83528c1660048301525afa928315612ca357505f92612d14575b50501015612c6d57600101612bf0565b90809250813d8311612d3b575b612d2b818361246f565b810103126101dc57515f80612d04565b503d612d21565b60405190612d4f8261241a565b5f610100838281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e08201520152565b15612d8c57565b60405162461bcd60e51b815260206004820152603e60248201527f43616e6e6f7420736574206120626f72726f772072657761726420737065656460448201527f20686967686572207468616e2074686520656d697373696f6e206361702100006064820152608490fd5b60405190612e04826123fe565b601f82527f626c6f636b2074696d657374616d7020657863656564732033322062697473006020830152565b6001600160a01b038181165f81815260076020908152604091829020825163aa5af0fd60e01b8152939593946004929091818785818b5afa968715612935575f97612fdc575b508160049798865199612e888b612453565b8a5286516308f7a6e360e31b815298899182905afa968715612935575f97612fad575b505f5b8154811015612fa2578888612ec383856123e5565b5086600682015491878a82019384549060e096600160e01b6001900398600286015491612eee613b4b565b612ef791613ceb565b9051612f0291613b84565b90898416848a1c612f129461300b565b80519201516001600160e01b03928816831660e09190911b6001600160e01b031916179485905550600191909101548b516001600160a01b038e81168252939091169092166020830152938216909316604084015263ffffffff911c1660608201527f24b735e493aede533ed6134442bad7e2ea2e72d71739de4c97f020174f5e3bcd90608090a1600101612eae565b505050505050505050565b9096508181813d8311612fd5575b612fc5818361246f565b810103126101dc5751955f612eab565b503d612fbb565b96508187813d8311613004575b612ff3818361246f565b810103126101dc5795519581612e76565b503d612fe9565b9190929360409485519361301e856123fe565b5f85525f602080960152613040613033612df7565b6401000000004210613ae6565b63ffffffff8042169616875190613056826123fe565b60158252613085747375627472616374696f6e20756e646572666c6f7760581b92838982015289831115613ae6565b61308f8189612b6c565b938089116131cf575b505050811580156131c7575b6131a757906130bb916130b5613b4b565b91613d75565b811561318f5761312a916130e76130ec925f89516130d881612453565b526130e1613b4b565b90613d33565b613b84565b8551906130f882612453565b81525b855161310681612453565b6001600160e01b03938416815286515f9061312081612453565b5251905190613bd9565b9384815161313781612453565b5261317b8151613146816123fe565b601a81527f6e657720696e646578206578636565647320323234206269747300000000000085820152600160e01b8710613ae6565b5193613186856123fe565b16835282015290565b505061312a845161319f81612453565b5f81526130fb565b5050509251926131b6846123fe565b6001600160e01b0316835282015290565b5080156130a4565b92935090918082101561320f57613200613205938a51906131ef826123fe565b601582528982015282841115613ae6565b612b6c565b905b5f8080613098565b5050505f90613207565b6ec097ce7bc90715b34b9f10000000006132b8600893946132a26132ca9760018060a01b031696875f526007860160205260405f2054908115806132d5575b6132cd575b6132006040519161326d836123fe565b60158352747375627472616374696f6e20756e646572666c6f7760581b60208401526001600160e01b03169182841115613ae6565b806040516132af81612453565b526130b5613b4b565b04925f520160205260405f2054613bd9565b90565b85915061325d565b506001600160e01b038116861115613258565b90926132b86ec097ce7bc90715b34b9f1000000000916133a1600a9561339960206133796132ca9b60018060a01b03169a8b5f5260098a01835260405f2054908115806133b3575b6133ab575b61320060405191613345836123fe565b60158352747375627472616374696f6e20756e646572666c6f7760581b868401526001600160e01b03169182841115613ae6565b946040519561338787612453565b86520151613393613b4b565b90613ceb565b905190613b84565b90516130b5613b4b565b899150613335565b506001600160e01b0381168a1115613330565b9291926133d282612beb565b1561356d5760018060a01b0380821694855f526007958460209260078452604095865f208751906370a0823160e01b825286826024818b60049916998a60048301525afa918215613563575f92613534575b505f5b8154811015613525578a886134c88f8d8b7f51761e1f6548bc99f2a61f299986e1b08a489f06622f689a413e02d7654a47668f938b8d958c61348761346c8d8f6123e5565b506003810154909c6001600160e01b0390911692838e613219565b93865f528b018a52865f205560088a0180995282865f20556001809a015416968795519283928360209093929193604081019460018060a01b031681520152565b0390a36134db575b505050600101613427565b895f52818b528c5f2054600280855414613515578455600194939291613501918c613c1b565b918055895f528a528b5f2055905f806134d0565b8e51633ee5aeb560e01b81528b90fd5b50505050505050505050509050565b9091508681813d831161355c575b61354c818361246f565b810103126101dc5751905f613424565b503d613542565b89513d5f823e3d90fd5b50509050565b92919061357f81612beb565b1561356d5760018060a01b03808516805f5260209060078252604093845f209585519863aa5af0fd60e01b8a52600492858b600481885afa9a8b156137c9575f9b61379a575b5087519a6135d28c612453565b8b528751986370a0823160e01b8a52878216958660048c0152878b602481845afa9a8b15613761575f9b61376b575b50876024918b51928380926395dd919360e01b82528b60048301525afa908115613761575f91613734575b5089519a6136398c6123fe565b8b52878b01525f5b8154811015613525578c886136e7878d8f7f48a32d6daeb4317b45f49c3a1c0b1bd7d53a175d1f46c425138e328900cdccb48f8b8f93918f928d6136a49161368a8f8f906123e5565b5095860154959c6001600160e01b0390961695868e6132e8565b92855f5260098b018a52865f2055600a8a0180995282865f20556001809a015416968795519283928360209093929193604081019460018060a01b031681520152565b0390a36136fa575b505050600101613641565b895f52818b528c5f2054600280855414613515578455600194939291613720918c613c1b565b918055895f528a528b5f2055905f806136ef565b90508781813d831161375a575b61374b818361246f565b810103126101dc57515f61362c565b503d613741565b8a513d5f823e3d90fd5b909a508781813d8311613793575b613783818361246f565b810103126101dc57519987613601565b503d613779565b909a508581813d83116137c2575b6137b2818361246f565b810103126101dc5751995f6135c5565b503d6137a8565b88513d5f823e3d90fd5b6001600160a01b039081165f908152600760205260408120805493915b8481106138545760405162461bcd60e51b815260206004820152602f60248201527f556e61626c6520746f2066696e6420656d697373696f6e20746f6b656e20696e60448201526e2070546f6b656e20636f6e6669677360881b6064820152608490fd5b61385e81836123e5565b50846001820154168585161461387757506001016137f0565b94505050505090565b6001600160a01b038082165f8181526007602090815260409182902082516318160ddd60e01b81529296959491938490849060049082905afa9283156105e9575f936139c6575b505f5b81548110156139bc57807f79af45fe3972eecc4b95252214ad1d36529435ab4d4ae291d62a2ee5a0cc050085876139b387600161390881988a6123e5565b5061396f63ffffffff600583015496600384019761393d89549a878060e01b03928c6002890154918582169160e01c9061300b565b90815116809a8460e01b1617895501511680969081549063ffffffff60e01b9060e01b169060018060e01b0316179055565b01548e516001600160a01b03808f168252929091169190911660208201526001600160e01b03909316604084015263ffffffff909116606083015281906080820190565b0390a1016138ca565b5050505050509050565b9092508381813d83116139ee575b6139de818361246f565b810103126101dc5751915f6138c7565b503d6139d4565b60405163a9059cbb60e01b602082019081526001600160a01b03939093166024820152604480820194909452928352601f19915f91829190613a3860648761246f565b60018060a01b031694519082865af1903d15613ad9573d9167ffffffffffffffff831161046e57613a8892613a78602060405194601f840116018461246f565b82523d5f602084013e5b83613db2565b8051908115159182613ab6575b5050613a9e5750565b60249060405190635274afe760e01b82526004820152fd5b81925090602091810103126101dc576020613ad19101612b5f565b155f80613a95565b50613a8890606090613a82565b15613aee5750565b6040519062461bcd60e51b82528160208060048301528251908160248401525f935b828510613b32575050604492505f838284010152601f80199101168101030190fd5b8481018201518686016044015293810193859350613b10565b60405190613b58826123fe565b601782527f6d756c7469706c69636174696f6e206f766572666c6f770000000000000000006020830152565b906132ca91613bbb604051613b98816123fe565b600e81526d646976696465206279207a65726f60901b6020820152831515613ae6565b8115613bc5570490565b634e487b7160e01b5f52601260045260245ffd5b906132ca90613c1260405191613bee836123fe565b60118352706164646974696f6e206f766572666c6f7760781b6020840152846125b4565b92831015613ae6565b8115613ce55760ff5f5416613ce5576040516370a0823160e01b81523060048201526001600160a01b039384169190602081602481865afa9081156105e9575f91613cb3575b508311613c7757613c739316906139f5565b5f90565b6060917f8b079e2b0be6cc9631b7883d8478590fe708e9d360391aab49aa147901fc7a379394604051921682526020820152836040820152a190565b90506020813d602011613cdd575b81613cce6020938361246f565b810103126101dc57515f613c61565b3d9150613cc1565b50905090565b801591828015613d2c575b613d2557670de0b6b3a7640000808302938385048214171561053f57613d1f6132ca9385613bbb565b14613ae6565b5050505f90565b505f613cf6565b801591828015613d6e575b613d25576ec097ce7bc90715b34b9f1000000000808302938385048214171561053f57613d1f6132ca9385613bbb565b505f613d3e565b9091811592838015613daa575b613da257808302938385048214171561053f57613d1f6132ca9385613bbb565b505050505f90565b508015613d82565b90613dd95750805115613dc757805190602001fd5b604051630a12f52160e11b8152600490fd5b81511580613e0c575b613dea575090565b604051639996b31560e01b81526001600160a01b039091166004820152602490fd5b50803b15613de256fea264697066735822122005d8e7775b68984d727a4fb13618b66f5f3c7f5e81af89f78b0c4bd919dc451e64736f6c63430008170033