0 txs
30 calls
constructor
No constructor.
functions
borrowAssetsUser
viewfunction borrowAssetsUser() view returns (uint256 totalBorrowAssets)
collateralAssetsUser
viewfunction collateralAssetsUser() view returns (uint256 totalCollateralAssets)
getCollateralRatio
viewfunction getCollateralRatio() view returns (uint256 collateralRatio_, bool isOK_)
getMarketParams
purefunction getMarketParams() pure returns (tuple)
getNetAssets
viewfunction getNetAssets() view returns (uint256)
getProtocolAccountData
viewfunction getProtocolAccountData() view returns (uint256 mFONEAmount_, uint256 debtUSDCAmount_)
getProtocolNetAssets
viewfunction getProtocolNetAssets() view returns (uint256)
getRatio
viewfunction getRatio() view returns (uint256 ratio_)
MAX_PROTOCOL_RATIO
viewfunction MAX_PROTOCOL_RATIO() view returns (uint256)
MF_ONE
viewfunction MF_ONE() view returns (address)
owner
viewfunction owner() view returns (address)
rebalancer
viewfunction rebalancer() view returns (address)
supplyAssetsUser
viewfunction supplyAssetsUser() view returns (uint256 totalSupplyAssets)
USDC
viewfunction USDC() view returns (address)
vault
viewfunction vault() view returns (address)
VERSION
viewfunction VERSION() view returns (string)
borrow
nonpayablefunction borrow(address _asset, uint256 _amount)
callFlashLoan
nonpayablefunction callFlashLoan(uint256 _amount, bytes _data)
deposit
nonpayablefunction deposit(address _asset, uint256 _amount)
enterProtocol
nonpayablefunction enterProtocol()
initialize
nonpayablefunction initialize(bytes _initBytes)
mintMFONE
nonpayablefunction mintMFONE(uint256 _amount, uint256 _minRecv) returns (uint256)
mintMFONESlow
nonpayablefunction mintMFONESlow(uint256 _amount) returns (uint256)
onMorphoFlashLoan
nonpayablefunction onMorphoFlashLoan(uint256 _assets, bytes _data)
onTransferIn
nonpayablefunction onTransferIn(address _token, uint256 _amount) returns (bool)
reallocateLiquidity
nonpayablefunction reallocateLiquidity(tuple[] _withdrawals)
redeemMFONERapid
nonpayablefunction redeemMFONERapid(uint256 _amount, uint256 _minRecv) returns (uint256)
redeemMFONESlow
nonpayablefunction redeemMFONESlow(uint256 _amount) returns (uint256)
renounceOwnership
nonpayablefunction renounceOwnership()
repay
nonpayablefunction repay(address _asset, uint256 _amount)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
transferToVault
nonpayablefunction transferToVault(address _token, uint256 _amount)
updateMintRequestId
nonpayablefunction updateMintRequestId(uint256 _newId)
updateMorphoAllocator
nonpayablefunction updateMorphoAllocator(address _newAllocator)
updateRebalancer
nonpayablefunction updateRebalancer(address _newRebalancer)
updateRedeemRequestId
nonpayablefunction updateRedeemRequestId(uint256 _newId)
updateSafeProtocolRatio
nonpayablefunction updateSafeProtocolRatio(uint256 _newRatio)
withdraw
nonpayablefunction withdraw(address _asset, uint256 _amount)
events
Borrow
event Borrow(address token, uint256 amount)
Deposit
event Deposit(address token, uint256 amount)
Initialized
event Initialized(uint64 version)
OnTransferIn
event OnTransferIn(address token, uint256 amount)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
RedeemMFONESlow
event RedeemMFONESlow(uint256 redeemRequestId)
Repay
event Repay(address asset, uint256 amount)
TransferToVault
event TransferToVault(address token, uint256 amount)
UpdateMintRequestId
event UpdateMintRequestId(uint256 oldId, uint256 newId)
UpdateMorphoAllocator
event UpdateMorphoAllocator(address oldAllocator, address newAllocator)
UpdateRebalancer
event UpdateRebalancer(address oldRebalancer, address newRebalancer)
UpdateRedeemRequestId
event UpdateRedeemRequestId(uint256 oldId, uint256 newId)
UpdateSafeProtocolRatio
event UpdateSafeProtocolRatio(uint256 oldSafeProtocolRatio, uint256 newSafeProtocolRatio)
Withdraw
event Withdraw(address token, uint256 amount)
errors
CallerNotRebalancer
error CallerNotRebalancer()
CallerNotVault
error CallerNotVault()
InvalidAdmin
error InvalidAdmin()
InvalidAllocator
error InvalidAllocator()
InvalidAsset
error InvalidAsset()
InvalidFlashloanCall
error InvalidFlashloanCall()
InvalidInitialization
error InvalidInitialization()
InvalidLength
error InvalidLength()
InvalidRebalancer
error InvalidRebalancer()
InvalidSafeProtocolRatio
error InvalidSafeProtocolRatio()
InvalidUnderlyingToken
error InvalidUnderlyingToken()
MFONEMintPending
error MFONEMintPending()
NotInitializing
error NotInitializing()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
PriceBelowZero
error PriceBelowZero()
RatioOutOfRange
error RatioOutOfRange()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
creation bytecode
0x608080604052346015576135b3908161001a8239f35b5f80fdfe60406080815260049081361015610014575f80fd5b5f915f3560e01c908162a005e514611a7957816301d22ccd14611a4557816308bb5fb01461175a5781630d8ea7791461172c57816314d1736f146116ef578163223539b0146116a457816322867d781461163757816331f57072146113b057816339d0c1d9146112f857816340409c7e14611141578163439fab9114610f3157816347e7ef2414610ec45781634b8a352914610e525781634ea200e714610ddc57816356f4edaf14610cd057816362e8564e14610c9b5781636757b5fd14610c6e5781636ad2084f14610bf85781636f15ecb914610acb578163715018a614610a6457816384b5ab0f1461096f57816389a302711461094757816389a71faa146108875781638da5cb5b1461085257816390a0711c146106fd57816390c9427c146106d257816398a0ed7b146104fc5781639b72d8a51461047d578163ace820261461045a578163b046a449146103b7578163b270be1e1461036c578163cd377c5314610334578163dc900df114610317578163ec1ebd7a146102f3578163f2fde38b146102c3578163f3fef3a31461023657508063fbfa77cf146102025763ffa1ad74146101c1575f80fd5b346101fe57816003193601126101fe5780516101fa916101e082611bb2565b6003825262312e3160e81b60208301525191829182611c24565b0390f35b5080fd5b50346101fe57816003193601126101fe575f8051602061351e8339815191525490516001600160a01b039091168152602090f35b839150346101fe57826003193601126101fe57610251611aab565b5f805160206134fe8339815191525460243592906001600160a01b031633036102b557506102af7f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a942436493946102a58484612f0b565b5192839283611e2c565b0390a180f35b845163bd72e29160e01b8152fd5b83346102f05760203660031901126102f0576102ed6102e0611aab565b6102e8612afd565b6121b7565b80f35b80fd5b5050346101fe57816003193601126101fe576020906103106120ca565b9051908152f35b5050346101fe57816003193601126101fe5760209061031061202d565b8284346102f057806003193601126102f0575061034f6120ca565b805f8051602061353e833981519152541182519182526020820152f35b8284346102f05760203660031901126102f057505f805160206134fe833981519152546001600160a01b031633036103aa5761031060209235612dff565b5163bd72e29160e01b8152fd5b91905034610456576020366003190112610456576103d3611aab565b916103dc612afd565b6001600160a01b03908382161561044557505f805160206134fe83398151915254915191166001600160a01b039081168252821660208201526102ed91907fe2eeab472f89ac267be30e463da684fb96f56cc8e947839361fdf45bf6a3458e90604090a1611e93565b82516001626bbab960e11b03198152fd5b8280fd5b5050346101fe57816003193601126101fe5760209051670cb2bba6f17b80008152f35b919050346104565760203660031901126104565781359161049c612afd565b670cb2bba6f17b800083116104ee57507f02031c4c2df2973e7486b6a36d69dedd71289217ca87e06b77fa412947cb04025f8051602061353e8339815191529182548151908152846020820152a15580f35b9051633e3591eb60e11b8152fd5b8383346101fe5760209283600319360112610456575f805160206134fe833981519152546001600160a01b0391803591831633036106c45781156106b6575f8051602061347e83398151915292835485519063424e657560e01b8252838201527341438435c20b1c2f1fca702d387889f346a0c3de9160c082602481865afa9182156106ac57889261067b575b508682015161059781611d67565b6105a081611d67565b15918261066e575b505061065f5764e8d4a510008084029384041486171561064c5760648792875f805160206134de8339815191529388519687958694630dc4d73f60e31b865285015260248401528160448401525af1938415610641579361060e575b5082905551908152f35b9092508381813d831161063a575b6106268183611c03565b8101031261063657519184610604565b5f80fd5b503d61061c565b8351903d90823e3d90fd5b634e487b7160e01b865260118252602486fd5b508351631178073d60e11b8152fd5b51161515905088806105a8565b61069e91925060c03d60c0116106a5575b6106968183611c03565b810190611db6565b9089610589565b503d61068c565b87513d8a823e3d90fd5b8351636448d6e960e11b8152fd5b835163bd72e29160e01b8152fd5b5050346101fe57816003193601126101fe5760a0906106fb6106f2611ed8565b91518092611b35565bf35b839150346101fe5760209081600319360112610456576001600160401b0391813583811161084e573660238201121561084e578083013593841161084e5760c095602460c086028301019336851161084a575f805160206134fe833981519152546001600160a01b0316330361083c575061077785611e47565b9461078482519687611c03565b855260248386019201915b8483106107a057866102ed87612d10565b823603888112610838578251906107b682611bb2565b60a08091126108345783516107ca81611bcd565b6107d386611ac1565b81526107e0878701611ac1565b878201526107ef858701611ac1565b858201526060610800818801611ac1565b908201526080868101359082015282528401356001600160801b03811681036108345785820152815291870191830161078f565b8880fd5b8780fd5b905163bd72e29160e01b8152fd5b8680fd5b8480fd5b5050346101fe57816003193601126101fe575f8051602061349e8339815191525490516001600160a01b039091168152602090f35b839150346101fe57826003193601126101fe576108a2611aab565b5f805160206134fe83398151915254602435926001600160a01b03918216330361093957507fbd641e36a684e9917ba831e1a6fd82514a1d7b6bcc7703fa37a935a9e98d40f393946102a584836109326102af955f8051602061351e8339815191525416610924865194859263a9059cbb60e01b602085015260248401611e2c565b03601f198101845283611c03565b851661337b565b855163bd72e29160e01b8152fd5b5050346101fe57816003193601126101fe57602090515f805160206134de8339815191528152f35b9050346106365761097f36611b02565b9390919260018060a01b035f805160206134fe8339815191525416330361083c575f805160206134be83398151915280546001600160a01b03199081163317825590959094905f8051602061345e83398151915290813b15610636575f60848195835f805160206134de8339815191529489519a8b988997889563701195a160e11b8752860152602485015260606044850152816064850152848401378181018301849052601f01601f191681010301925af1908115610a5b5750610a48575b50815416905580f35b610a53919350611b9f565b5f915f610a3f565b513d5f823e3d90fd5b34610636575f36600319011261063657610a7c612afd565b5f8051602061349e83398151915280546001600160a01b031981169091555f906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b8234610636575f36600319011261063657610ae4611ed8565b91610b515f610b3960a08620855160208101918252600287820152868152610b0b81611be8565b5190208551610b3181610b2360208201943086611e2c565b03601f198101835282611c03565b5190206133d5565b845180938192637784c68560e01b8352868301611ff2565b03815f8051602061345e8339815191525afa908115610bee57610b8691610b7f915f91610bcc575b50611e5e565b5193612fe7565b505093909160018301809311610bb957620f42408501809511610bb9575092610bb461031092602095611d85565b611d98565b601190634e487b7160e01b5f525260245ffd5b610be891503d805f833e610be08183611c03565b810190611f79565b86610b79565b83513d5f823e3d90fd5b8234610636576020366003190112610636575f805160206134fe83398151915254823592906001600160a01b0316330361083c57507fadf8c022a8b880b4e5a9d17bfeadac72501ad54a298f11a6694c789f943c62e35f8051602061347e8339815191529182548151908152846020820152a155005b8234610636575f36600319011261063657610c8761202d565b610c8f611c4e565b82519182526020820152f35b8234610636575f36600319011261063657602090610310610cba61202d565b610ccb610cc5611c4e565b91612228565b611e1f565b8234610636578060031936011261063657610ce9611aab565b5f8051602061351e8339815191525460243593906001600160a01b039081163303610dcd578216905f805160206134de83398151915282141580610daf575b610da15750927f062da72b38d21d7e3e03c3fadd2657b56825f0daa8cede05226b526a3b05580191610d896020958551906323b872dd60e01b8883015233602483015230604483015284606483015260648252610d8482611bcd565b61337b565b610d97845192839283611e2c565b0390a15160018152f35b83516317dc37cb60e11b8152fd5b5073238a700ed6165261cf8b2e544ba797bc11e466ba821415610d28565b50825163edd7338f60e01b8152fd5b8234610636576020366003190112610636575f805160206134fe83398151915254823592906001600160a01b0316330361083c57507f7f3ebcb506395f07fa01e39c10a61b1679c4b748164feed7eb51898104f0aea15f8051602061355e8339815191529182548151908152846020820152a155005b905034610636578160031936011261063657610e6c611aab565b5f805160206134fe8339815191525460243592906001600160a01b031633036106c45750610ebf7fcbc04eca7e9da35cb1393a6135a199ca52e450d5e9251cbd99f7847d33a36750936102a58484612c5f565b0390a1005b905034610636578160031936011261063657610ede611aab565b5f805160206134fe8339815191525460243592906001600160a01b031633036106c45750610ebf7fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c936102a58484612b35565b905034610636576020366003190112610636576001600160401b03813581811161063657610f629036908401611ad5565b927ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0093845460ff81881c161594811680159081611139575b600114908161112f575b159081611126575b506111165767ffffffffffffffff19811660011786556060918491866110f7575b5081010312610636578135610fef86610fe860208601611ac1565b9401611ac1565b6001600160a01b0393841693169183156110e957670cb2bba6f17b800082116110db5782156110ca575061108c9291611036915f8051602061353e83398151915255611e93565b5f8051602061351e83398151915280546001600160a01b031990811633179091555f805160206134be833981519152805490911690555f5f8051602061355e83398151915255611084613309565b6102e8613309565b61109257005b805460ff60401b1916905551600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a1005b86516001626bbab960e11b03198152fd5b8651633e3591eb60e11b8152fd5b8651630b5eba9f60e41b8152fd5b68ffffffffffffffffff19166801000000000000000117875588610fcd565b865163f92ee8a960e01b81528390fd5b90501588610fac565b303b159150610fa4565b869150610f9a565b8234610636575f3660031901126106365761115a612afd565b805163095ea7b360e01b8082525f8051602061345e8339815191528483018190525f1960248401819052602095935f805160206134de8339815191529087816044815f865af180156112d1576112db575b508551928484528584015281602484015273238a700ed6165261cf8b2e544ba797bc11e466ba9287816044815f885af180156112d1579188915f936112b4575b5060448851809481938983527341438435c20b1c2f1fca702d387889f346a0c3de8b8401528760248401525af180156112aa577344b0440e35c596e858cea433d0d82f5a985fd19c9695936044938996935f9361128d575b5087519889968795865285015260248401525af1908115610a5b575061126557005b8161128492903d10611286575b61127c8183611c03565b810190611ec0565b005b503d611272565b6112a390883d8a116112865761127c8183611c03565b508a611243565b86513d5f823e3d90fd5b6112ca90833d85116112865761127c8183611c03565b50896111eb565b87513d5f823e3d90fd5b6112f190883d8a116112865761127c8183611c03565b50876111ab565b90503461063657602036600319011261063657611313611aab565b9161131c612afd565b6001600160a01b03928084169283156113a257507f55b56c2b7b0ade067e2f23207523ef37d0d7aa50097f20967c0e14c73800bdd1805492516001600160a01b03958416861681529190941660208201527fb22a79d23dd610aad60912118dbba6dbf11049ef88dd7e26e0ae06d8eae602b890604090a16001600160a01b031916179055005b82516359dad76160e01b8152fd5b905034610636576113c036611b02565b5f805160206134be833981519152549293926001600160a01b0316158015611620575b611610578101938082860312610636576001600160401b03823581811161063657830190601f9087601f840112156106365782359460209361142487611e47565b9661143187519889611c03565b808852858089019160051b830101918b8311610636578601905b8282106115f757505050838101359082821161063657019188601f840112156106365782359061147a82611e47565b9961148787519b8c611c03565b828b5285808c019360051b8601019481861161063657868101935b868510611584578c8c8c8c8c81518551811490811591611579575b5061156a57505f91835b82515f198101908111611557578410156115095761150160019160ff6114ed8787611e7f565b5116906114fa878a611e7f565b5191612824565b9301926114c7565b50838583515f19948582019182116115445760ff9161152791611e7f565b5116928151948501948511610bb95750611284936114fa91611e7f565b601185634e487b7160e01b5f525260245ffd5b601183634e487b7160e01b5f525260245ffd5b5163251f56a160e21b81529050fd5b6001915010866114bd565b843586811161063657820183603f820112156106365788810135918783116115e4578a516115ba848801601f19168c0182611c03565b838152858c8585010111610636575f8b8581968f83970183860137830101528152019401936114a2565b60418d634e487b7160e01b5f525260245ffd5b813560ff8116810361063657815290860190860161144b565b845163691046a960e11b81528390fd5b505f8051602061345e8339815191523314156113e3565b905034610636578160031936011261063657611651611aab565b5f805160206134fe8339815191525460243592906001600160a01b031633036106c45750610ebf7f5c16de4f8b59bd9caf0f49a545f25819a895ed223294290b408242e72a594231936102a584846125c7565b8234610636576116b336611a95565b5f805160206134fe833981519152549093906001600160a01b031633036116e157506020926103109161248b565b825163bd72e29160e01b8152fd5b8234610636576116fe36611a95565b5f805160206134fe833981519152549093906001600160a01b031633036116e15750602092610310916122c7565b8234610636575f366003190112610636576020905173238a700ed6165261cf8b2e544ba797bc11e466ba8152f35b8234610636575f3660031901126106365761177361202d565b9181516370a0823160e01b908181523083820152602094858260248173238a700ed6165261cf8b2e544ba797bc11e466ba5afa908115611a0a575f91611a14575b6117be9250611d46565b906117c7611c4e565b928451918252308183015285826024815f805160206134de8339815191525afa918215611a0a575f926119db575b505f8051602061355e8339815191525485519063e85ba3e960e01b82528282015260c09182826024817344b0440e35c596e858cea433d0d82f5a985fd19c5afa9182156112d1575f92611957575b505f918781015161185381611d67565b61185c81611d67565b1561192a575b505f8051602061347e83398151915254875163424e657560e01b81529182015282816024817341438435c20b1c2f1fca702d387889f346a0c3de5afa9283156112d157936103109695936118ef93610cc593610ccb975f9361190b575b50505f918a8101516118d081611d67565b6118d981611d67565b156118f5575b506118ea9192611d46565b611d46565b90611d46565b6060015164e8d4a51000900491506118ea6118df565b611922929350803d106106a5576106968183611c03565b908b806118bf565b6c0c9f2c9cd04674edea40000000919250806060608061194f93015191015190611d85565b049088611862565b9091508281813d83116119d4575b61196f8183611c03565b810103126106365786519061198382611b70565b61198c81611d53565b8252611999898201611d53565b89830152878101519060038210156106365760a091898401526060810151606084015260808101516080840152015160a08201529088611843565b503d611965565b9091508581813d8311611a03575b6119f38183611c03565b81010312610636575190866117f5565b503d6119e9565b85513d5f823e3d90fd5b90508582813d8311611a3e575b611a2b8183611c03565b81010312610636576117be9151906117b4565b503d611a21565b8234610636575f366003190112610636575f805160206134fe8339815191525490516001600160a01b039091168152602090f35b8234610636575f36600319011261063657602090610310611c4e565b6040906003190112610636576004359060243590565b600435906001600160a01b038216820361063657565b35906001600160a01b038216820361063657565b9181601f84011215610636578235916001600160401b038311610636576020838186019501011161063657565b9060406003198301126106365760043591602435906001600160401b03821161063657611b3191600401611ad5565b9091565b6080809160018060a01b0380825116855280602083015116602086015280604083015116604086015260608201511660608501520151910152565b60c081019081106001600160401b03821117611b8b57604052565b634e487b7160e01b5f52604160045260245ffd5b6001600160401b038111611b8b57604052565b604081019081106001600160401b03821117611b8b57604052565b60a081019081106001600160401b03821117611b8b57604052565b606081019081106001600160401b03821117611b8b57604052565b90601f801991011681019081106001600160401b03821117611b8b57604052565b602060409281835280519182918282860152018484015e5f828201840152601f01601f1916010190565b611c56611ed8565b611c895f611c6f611c6a3060a08620612ec1565b6133d5565b60405180938192637784c68560e01b835260048301611ff2565b03815f8051602061345e8339815191525afa8015611d3b57611cc7915f91611d21575b506001600160801b0390611cbf90611e5e565b511691612fe7565b939250905060018101809111611d0d57620f4240830191828411611d0d57620f423f91611cf391611d85565b920191818311611d0d57611d0a92610bb491611d46565b90565b634e487b7160e01b5f52601160045260245ffd5b611d3591503d805f833e610be08183611c03565b5f611cac565b6040513d5f823e3d90fd5b91908201809211611d0d57565b51906001600160a01b038216820361063657565b60031115611d7157565b634e487b7160e01b5f52602160045260245ffd5b81810292918115918404141715611d0d57565b8115611da2570490565b634e487b7160e01b5f52601260045260245ffd5b908160c09103126106365760405190611dce82611b70565b611dd781611d53565b8252611de560208201611d53565b602083015260408101519060038210156106365760a09160408401526060810151606084015260808101516080840152015160a082015290565b91908203918211611d0d57565b6001600160a01b039091168152602081019190915260400190565b6001600160401b038111611b8b5760051b60200190565b805115611e6b5760200190565b634e487b7160e01b5f52603260045260245ffd5b8051821015611e6b5760209160051b010190565b5f805160206134fe83398151915280546001600160a01b0319166001600160a01b03909216919091179055565b90816020910312610636575180151581036106365790565b5f6080604051611ee781611bcd565b8281528260208201528260408201528260608201520152604051611f0a81611bcd565b5f805160206134de833981519152815273238a700ed6165261cf8b2e544ba797bc11e466ba6020820152730cb1928eca8783f05a07d9ae2afb33f38bfbeb78604082015273870ac11d48b15db9a138cf899d20f13f79ba00bc6060820152670cb2bba6f17b8000608082015290565b6020908181840312610636578051906001600160401b03821161063657019180601f84011215610636578251611fae81611e47565b93611fbc6040519586611c03565b818552838086019260051b820101928311610636578301905b828210611fe3575050505090565b81518152908301908301611fd5565b60209060206040818301928281528551809452019301915f5b828110612019575050505090565b83518552938101939281019260010161200b565b6120815f60405161203d81611bb2565b600181526020368183013761205d60a0612055611ed8565b203090612ec1565b61206682611e5e565b5260405180938192637784c68560e01b835260048301611ff2565b03815f8051602061345e8339815191525afa8015611d3b576120a9915f916120b05750611e5e565b5160801c90565b6120c491503d805f833e610be08183611c03565b5f610b79565b6120d261202d565b60405163501ad8ff60e11b8152602081600481730cb1928eca8783f05a07d9ae2afb33f38bfbeb785afa908115611d3b575f9161217b575b506121209069d3c21bcecceda100000092611d85565b04612129611c4e565b9080156121755764e8d4a5100091828102928184041481151715611d0d576c0c9f2c9cd04674edea400000000291808304670de0b6b3a76400001490151715611d0d57611d0a91611d98565b50505f90565b90506020813d6020116121af575b8161219660209383611c03565b81010312610636575169d3c21bcecceda100000061210a565b3d9150612189565b6001600160a01b03908116908115612210575f8051602061349e83398151915280546001600160a01b031981168417909155167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b604051631e4fbdf760e01b81525f6004820152602490fd5b60405163bb23ae2560e01b815290602082600481738d51dbc85ceef637c97d02bdaabb5e274850e68c5afa918215611d3b575f92612293575b505f82126122815768056bc75e2d631000009161227d91611d85565b0490565b604051633253194b60e21b8152600490fd5b9091506020813d6020116122bf575b816122af60209383611c03565b810103126106365751905f612261565b3d91506122a2565b905f198214612411575b60408051916370a0823160e01b8084525f903060048601526020925f805160206134de8339815191529684876024818b5afa9687156112aa575f976123e2575b507344b0440e35c596e858cea433d0d82f5a985fd19c90813b15610636576064895f80948a5196879586946345a9fbaf60e11b86526004860152602485015260448401525af18015611a0a57908492916123cc575b50602485518098819382523060048301525afa9283156123c2575091612392575b50611d0a9250611e1f565b905082813d83116123bb575b6123a88183611c03565b8101031261063657611d0a91515f612387565b503d61239e565b51903d90823e3d90fd5b9092506123d99150611b9f565b815f915f612366565b9096508481813d831161240a575b6123fa8183611c03565b810103126106365751955f612311565b503d6123f0565b6040516370a0823160e01b815230600482015290915060208160248173238a700ed6165261cf8b2e544ba797bc11e466ba5afa908115611d3b575f91612459575b50906122d1565b90506020813d602011612483575b8161247460209383611c03565b8101031261063657515f612452565b3d9150612467565b905f9180156125965764e8d4a5100080820291820403611d0d577341438435c20b1c2f1fca702d387889f346a0c3de91823b156106365760845f92836040519586948593636016e93d60e11b85525f805160206134de8339815191526004860152602485015260448401528160648401525af18015611d3b57612585575b506040516370a0823160e01b815230600482015260208160248173238a700ed6165261cf8b2e544ba797bc11e466ba5afa918215612579579161254a575090565b90506020813d602011612571575b8161256560209383611c03565b81010312610636575190565b3d9150612558565b604051903d90823e3d90fd5b61258f9150611b9f565b5f80612509565b5050505f90565b51906001600160801b038216820361063657565b9190826040910312610636576020825192015190565b6001600160a01b031673a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4719016127eb5780156127e8575f19811461269057612601611ed8565b6040516320b76e8160e01b8152919061261e906004840190611b35565b60a48201525f60c48201523060e48201526101206101048201525f610124820152604081610144815f5f8051602061345e8339815191525af18015611d3b576126645750565b6126859060403d604011612689575b61267d8183611c03565b8101906125b1565b5050565b503d612673565b5060a061269b611ed8565b206040908151906349e2903160e11b825260048201523060248201525f8051602061345e83398151915290606081604481855afa908115610bee579083915f9161276d575b50602001516001600160801b03169161271c90610144905f612700611ed8565b85516320b76e8160e01b81529687958694926004860190611b35565b8260a485015260c48401523060e4840152610120610104840152816101248401525af180156127635761274d575050565b8161268592903d106126895761267d8183611c03565b82513d5f823e3d90fd5b9150506060813d6060116127e0575b8161278960609383611c03565b8101031261063657825190606082018281106001600160401b03821117611b8b5784926127d58461271c94610144948252805184526127ca6020820161259d565b60208501520161259d565b8482015291506126e0565b3d915061277c565b50565b604051636448d6e960e11b8152600490fd5b91908260409103126106365781516001600160a01b03811681036106365760209092015190565b60ff168061286957506128438260208061285d955183010191016127fd565b916001198314612861575b506001600160a01b0316612b35565b5f90565b91505f61284e565b600181036128aa57506128888260208061285d955183010191016127fd565b9160011983146128a2575b506001600160a01b0316612f0b565b91505f612893565b600281036128eb57506128c98260208061285d955183010191016127fd565b9160011983146128e3575b506001600160a01b0316612c5f565b91505f6128d4565b6003810361292c575061290a8260208061285d955183010191016127fd565b916001198314612924575b506001600160a01b03166125c7565b91505f612915565b60048103612964575061294b82602080611d0a955183010191016125b1565b91600119821461295c575b5061248b565b90505f612956565b6005810361299c575061298382602080611d0a955183010191016125b1565b916001198214612994575b506122c7565b90505f61298e565b600681036129d35750602082805181010312610636576020611d0a9201519060011982146129cb575b50612dff565b90505f6129c5565b60079150146129e2575b505f90565b80518101919060208381019180850382136106365781810151906001600160401b03821161063657019180603f84011215610636578183015191604093612a2884611e47565b94612a3581519687611c03565b848652828601918160c0809702820101948511610636578101915b848310612a6e57505050505050612a68919250612d10565b5f6129dd565b83838a030186811261063657825191612a8683611bb2565b60a0809212610636578792612aee87938651612aa181611bcd565b612aaa89611d53565b8152612ab7868a01611d53565b86820152612ac6888a01611d53565b888201526060612ad7818b01611d53565b908201526080808a0151908201528352870161259d565b83820152815201920191612a50565b5f8051602061349e833981519152546001600160a01b03163303612b1d57565b60405163118cdaa760e01b8152336004820152602490fd5b73238a700ed6165261cf8b2e544ba797bc11e466ba906001600160a01b031673238a700ed6165261cf8b2e544ba797bc11e466b919016127eb578115612685575f198214612bf7575b50612b87611ed8565b5f8051602061345e83398151915290813b1561063657610124612bc3915f8094604051968795869463238d657960e01b86526004860190611b35565b60a48401523060c484015261010060e4840152816101048401525af18015611d3b57612bec5750565b612bf590611b9f565b565b6040516370a0823160e01b81523060048201529150602090829060249082905afa908115611d3b575f91612c2d575b505f612b7e565b90506020813d602011612c57575b81612c4860209383611c03565b8101031261063657515f612c26565b3d9150612c3b565b6001600160a01b031673a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4719016127eb5780156127e857612c91611ed8565b6040516350d8cd4b60e01b81529190612cae906004840190611b35565b60a48201525f60c48201523060e482015230610104820152604081610124815f5f8051602061345e8339815191525af18015611d3b57612cf2575b50612bf561334a565b612d0a9060403d6040116126895761267d8183611c03565b50612ce9565b7f55b56c2b7b0ade067e2f23207523ef37d0d7aa50097f20967c0e14c73800bdd1546001600160a01b0316612d43611ed8565b91813b156106365760405163833947fd60e01b815273beefff209270748ddd194831b3fa287a5386f5bc600482015260e06024820152815160e48201819052909384926101048401926020918201915f5b828110612dc457505050505f83819593612db382946044840190611b35565b03925af18015611d3b57612bec5750565b9193948396509060c0600192829551612dde828251611b35565b83858060801b039101511660a0820152019601910191879594939192612d94565b60405190635fe16a3560e11b82525f805160206134de833981519152600483015260248201526020816044815f7344b0440e35c596e858cea433d0d82f5a985fd19c5af1908115611d3b575f91612e8f575b50805f8051602061355e833981519152557f6978ae84faedae296efd87712d026c2599abb5f6ba47ea463a7f2716eaac37f16020604051838152a190565b90506020813d602011612eb9575b81612eaa60209383611c03565b8101031261063657515f612e51565b3d9150612e9d565b612efa610b2391604051602081019182526002604082015260408152612ee681611be8565b519020604051928391602083019586611e2c565b51902060018101809111611d0d5790565b6001600160a01b031673238a700ed6165261cf8b2e544ba797bc11e466b919016127eb5780156127e8575f198114612fb7575b612f46611ed8565b5f8051602061345e83398151915290813b1561063657610104612f82915f80946040519687958694638720316d60e01b86526004860190611b35565b60a48401523060c48401523060e48401525af18015611d3b57612fa85750612bf561334a565b612fb190611b9f565b5f612ce9565b50612fc061202d565b612fc8611c4e565b50612f3e565b6001600160801b039182169082160191908211611d0d57565b60a0812090604092835192632e3071cd60e11b8452600484015260c0836024815f8051602061345e8339815191525afa9283156132ff575f93613263575b506080830180516001600160801b0393919061304390851642611e1f565b9081151580613255575b8061323f575b61307a575b5050508183511691606081806020870151169686015116940151169193929190565b60608301518751638c00bf6b60e01b81526001600160a01b03909116936130a5906004830190611b35565b8587511660a482015260208701938685511660c483015286898901938185511660e48501528160608b01511661010485015251166101248301526020826101648160a08c01948b8651166101448301525afa80156132355787925f916131fc575b5061316061311b6118ea968587511693611d85565b9161315a671bc16d674ec800006131328580611d85565b0493670de0b6b3a764000098856729a2241af62c0000613153848d99611d85565b0492611d46565b90611d85565b04928261317861316f866133fa565b82845116612fce565b16905281613191613188856133fa565b828b5116612fce565b1688525116806131a2575b50613058565b6131ab91611d85565b046131b98185875116611e1f565b8483511691620f42408301809311611d0d5760018201809211611d0d576131eb6131f092610bb4889561316f94611d85565b6133fa565b1690525f80808061319c565b9250506020823d60201161322d575b8161321860209383611c03565b81010312610636579051869190613160613106565b3d915061320b565b89513d5f823e3d90fd5b5060608301516001600160a01b03161515613053565b50848787015116151561304d565b90925060c0813d60c0116132f7575b8161327f60c09383611c03565b81010312610636576132eb60a085519261329884611b70565b6132a18161259d565b84526132af6020820161259d565b60208501526132bf87820161259d565b878501526132cf6060820161259d565b60608501526132e06080820161259d565b60808501520161259d565b60a0820152915f613025565b3d9150613272565b84513d5f823e3d90fd5b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c161561333857565b604051631afcd79f60e31b8152600490fd5b6133526120ca565b5f8051602061353e83398151915254111561336957565b6040516348bce5fd60e11b8152600490fd5b905f602091828151910182855af115611d3b575f513d6133cc57506001600160a01b0381163b155b6133aa5750565b604051635274afe760e01b81526001600160a01b039091166004820152602490fd5b600114156133a3565b604051906133e282611bb2565b60018252602036818401376133f682611e5e565b5290565b6040516001600160801b03919061341081611bb2565b60148152731b585e081d5a5b9d0c4c8e08195e18d95959195960621b602082015282821161343d57501690565b60405162461bcd60e51b81529081906134599060048301611c24565b0390fdfe000000000000000000000000bbbbbbbbbb9cc5e90e3b3af64bdaf62c37eeffcb55b56c2b7b0ade067e2f23207523ef37d0d7aa50097f20967c0e14c73800bdd29016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055b56c2b7b0ade067e2f23207523ef37d0d7aa50097f20967c0e14c73800bdcf000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4855b56c2b7b0ade067e2f23207523ef37d0d7aa50097f20967c0e14c73800bdcd55b56c2b7b0ade067e2f23207523ef37d0d7aa50097f20967c0e14c73800bdcc55b56c2b7b0ade067e2f23207523ef37d0d7aa50097f20967c0e14c73800bdce55b56c2b7b0ade067e2f23207523ef37d0d7aa50097f20967c0e14c73800bdd0a2646970667358221220e2362550f0a5df12f8819c886b189a62758cd6eb9ad10aa37f32bf583e84f49164736f6c63430008190033