1 tx
449.3k calls
constructor
constructor(address registry, address nonFungiblePositionManager, address aerodromeVoter, address rewardToken)
functions
ASSET_TYPE
viewfunction ASSET_TYPE() view returns (uint256)
assetToUnderlyingAssets
viewfunction assetToUnderlyingAssets(bytes32 assetKey, uint256) view returns (bytes32 underlyingAssetKeys)
balanceOf
viewfunction balanceOf(address owner) view returns (uint256)
baseURI
viewfunction baseURI() view returns (string)
getApproved
viewfunction getApproved(uint256) view returns (address)
getRiskFactors
viewfunction getRiskFactors(address creditor, address asset, uint256 assetId) view returns (uint16 collateralFactor, uint16 liquidationFactor)
getValue
viewfunction getValue(address creditor, address asset, uint256 assetId, uint256 assetAmount) view returns (uint256 valueInUsd, uint256 collateralFactor, uint256 liquidationFactor)
inAssetModule
viewfunction inAssetModule(address) view returns (bool)
isAllowed
viewfunction isAllowed(address asset, uint256 assetId) view returns (bool)
isApprovedForAll
viewfunction isApprovedForAll(address, address) view returns (bool)
lastExposureAssetToUnderlyingAsset
viewfunction lastExposureAssetToUnderlyingAsset(address creditor, bytes32 assetKey, bytes32 underlyingAssetKey) view returns (uint256 exposure)
lastExposuresAsset
viewfunction lastExposuresAsset(address creditor, bytes32 assetKey) view returns (uint112 lastExposureAsset, uint112 lastUsdExposureAsset)
name
viewfunction name() view returns (string)
onERC721Received
purefunction onERC721Received(address, address, uint256, bytes) pure returns (bytes4)
owner
viewfunction owner() view returns (address)
ownerOf
viewfunction ownerOf(uint256 id) view returns (address owner)
poolToGauge
viewfunction poolToGauge(address pool) view returns (address gauge)
positionState
viewfunction positionState(uint256 position) view returns (int24 tickLower, int24 tickUpper, uint128 liquidity, address gauge)
REGISTRY
viewfunction REGISTRY() view returns (address)
REWARD_TOKEN
viewfunction REWARD_TOKEN() view returns (address)
rewardOf
viewfunction rewardOf(uint256 positionId) view returns (uint256 rewards)
riskParams
viewfunction riskParams(address creditor) view returns (uint112 lastUsdExposureProtocol, uint112 maxUsdExposureProtocol, uint16 riskFactor)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
symbol
viewfunction symbol() view returns (string)
tokenURI
viewfunction tokenURI(uint256 tokenId) view returns (string uri)
addGauge
nonpayablefunction addGauge(address gauge)
approve
nonpayablefunction approve(address spender, uint256 id)
burn
nonpayablefunction burn(uint256 positionId) returns (uint256 rewards)
claimReward
nonpayablefunction claimReward(uint256 positionId) returns (uint256 rewards)
initialize
nonpayablefunction initialize()
mint
nonpayablefunction mint(uint256 assetId) returns (uint256 positionId)
processDirectDeposit
nonpayablefunction processDirectDeposit(address creditor, address asset, uint256 assetId, uint256 amount) returns (uint256 recursiveCalls)
processDirectWithdrawal
nonpayablefunction processDirectWithdrawal(address creditor, address asset, uint256 assetId, uint256 amount)
processIndirectDeposit
nonpayablefunction processIndirectDeposit(address creditor, address asset, uint256 assetId, uint256 exposureUpperAssetToAsset, int256 deltaExposureUpperAssetToAsset) returns (uint256 recursiveCalls, uint256 usdExposureUpperAssetToAsset)
processIndirectWithdrawal
nonpayablefunction processIndirectWithdrawal(address creditor, address asset, uint256 assetId, uint256 exposureUpperAssetToAsset, int256 deltaExposureUpperAssetToAsset) returns (uint256 usdExposureUpperAssetToAsset)
safeTransferFrom
nonpayablefunction safeTransferFrom(address from, address to, uint256 id, bytes data)
safeTransferFrom
nonpayablefunction safeTransferFrom(address from, address to, uint256 id)
setApprovalForAll
nonpayablefunction setApprovalForAll(address operator, bool approved)
setBaseURI
nonpayablefunction setBaseURI(string newBaseURI)
setRiskParameters
nonpayablefunction setRiskParameters(address creditor, uint112 maxUsdExposureProtocol_, uint16 riskFactor)
transferFrom
nonpayablefunction transferFrom(address from, address to, uint256 id)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
events
Approval
event Approval(address indexed owner, address indexed spender, uint256 indexed id)
ApprovalForAll
event ApprovalForAll(address indexed owner, address indexed operator, bool approved)
OwnershipTransferred
event OwnershipTransferred(address indexed user, address indexed newOwner)
RewardPaid
event RewardPaid(uint256 indexed positionId, address indexed reward, uint128 amount)
Transfer
event Transfer(address indexed from, address indexed to, uint256 indexed id)
errors
AssetNotAllowed
error AssetNotAllowed()
ExposureNotInLimits
error ExposureNotInLimits()
GaugeNotValid
error GaugeNotValid()
InvalidId
error InvalidId()
NotOwner
error NotOwner()
OnlyRegistry
error OnlyRegistry()
Overflow
error Overflow()
RewardTokenNotAllowed
error RewardTokenNotAllowed()
RewardTokenNotValid
error RewardTokenNotValid()
RiskFactorNotInLimits
error RiskFactorNotInLimits()
ZeroLiquidity
error ZeroLiquidity()
creation bytecode
0x6101406040526001600b5534801562000016575f80fd5b5060405162004dd038038062004dd083398101604081905262000039916200022e565b60405180606001604052806023815260200162004dad60239139604080518082018252600781526606153534c4950560cc1b60208201525f80546001600160a01b03191633908117825592519192889260029284928492909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506001600160a01b0390911660a0526080525060059050620000dc838262000326565b506006620000eb828262000326565b5050604051630f8350ed60e41b81526001600160a01b0383811660048301525f60248301528616915063f8350ed090604401602060405180830381865afa15801562000139573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200015f9190620003f2565b6200017d5760405163c52db36360e01b815260040160405180910390fd5b6001600160a01b038083166101005281811660e05283166101208190526040805163c45a015560e01b8152905163c45a01559160048082019260209290919082900301815f875af1158015620001d5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001fb91906200041a565b6001600160a01b031660c052506200043692505050565b80516001600160a01b038116811462000229575f80fd5b919050565b5f805f806080858703121562000242575f80fd5b6200024d8562000212565b93506200025d6020860162000212565b92506200026d6040860162000212565b91506200027d6060860162000212565b905092959194509250565b634e487b7160e01b5f52604160045260245ffd5b600181811c90821680620002b157607f821691505b602082108103620002d057634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200032157805f5260205f20601f840160051c81016020851015620002fd5750805b601f840160051c820191505b818110156200031e575f815560010162000309565b50505b505050565b81516001600160401b0381111562000342576200034262000288565b6200035a816200035384546200029c565b84620002d6565b602080601f83116001811462000390575f8415620003785750858301515b5f19600386901b1c1916600185901b178555620003ea565b5f85815260208120601f198616915b82811015620003c0578886015182559484019460019091019084016200039f565b5085821015620003de57878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f6020828403121562000403575f80fd5b8151801515811462000413575f80fd5b9392505050565b5f602082840312156200042b575f80fd5b620004138262000212565b60805160a05160c05160e051610100516101205161488e6200051f5f395f81816110d201528181611922015281816119890152611cc001525f6114ad01525f818161069e01528181610f620152818161101f0152818161105f0152818161153b01528181611c2b01528181611fdb0152818161206301526120a301525f611a5901525f818161029b0152818161082f01528181610a2201528181610b25015281816112a5015281816113ff015281816116510152818161176a015281816121cc0152818161261801528181612b160152612fa401525f818161065d01526113c8015261488e5ff3fe608060405234801561000f575f80fd5b5060043610610255575f3560e01c806370a0823111610140578063a0712d68116100bf578063ba9270ff11610084578063ba9270ff14610747578063c87b56dd1461075a578063daa3770c1461076d578063e985e9c514610780578063f2fde38b146107ad578063f8350ed0146107c0575f80fd5b8063a0712d68146106d3578063a22cb465146106e6578063aa3f22b8146106f9578063ae169a5014610721578063b88d4fde14610734575f80fd5b80638815eb39116101055780638815eb39146106585780638da5cb5b1461067f57806395d89b411461069157806399248ea7146106995780639da882ac146106c0575f80fd5b806370a082311461053957806373aecb981461054c5780638129fc1c1461055f57806382d6b1661461056757806384b2fc50146105c5575f80fd5b80632341eb86116101d757806342966c681161019c57806342966c681461045f57806349bccc5d1461047257806353b85a50146104a057806355f804b31461050b5780636352211e1461051e5780636c0360eb14610531575f80fd5b80632341eb86146103ce57806323b872dd146103f65780633a8fe5e7146104095780633c0ac4f61461043957806342842e0e1461044c575f80fd5b8063095ea7b31161021d578063095ea7b314610312578063150b7a021461032557806315ed93bc1461035d578063172350931461037f5780631ba0408c146103a0575f80fd5b806301ffc9a714610259578063024874c71461028157806306433b1b1461029657806306fdde03146102d5578063081812fc146102ea575b5f80fd5b61026c610267366004613dc2565b6107d3565b60405190151581526020015b60405180910390f35b61029461028f366004613df1565b610824565b005b6102bd7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610278565b6102dd6108a6565b6040516102789190613e56565b6102bd6102f8366004613e88565b60096020525f90815260409020546001600160a01b031681565b610294610320366004613e9f565b610932565b610344610333366004613f0e565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610278565b61026c61036b366004613f7c565b60016020525f908152604090205460ff1681565b61039261038d366004613f97565b610a16565b604051908152602001610278565b6103b36103ae366004613fe4565b610abd565b6040805161ffff938416815292909116602083015201610278565b6103e16103dc366004613f97565b610b18565b60408051928352602083019190915201610278565b610294610404366004613fe4565b610bcb565b610392610417366004614022565b600460209081525f938452604080852082529284528284209052825290205481565b610392610447366004614054565b610d8d565b61029461045a366004613fe4565b610db8565b61039261046d366004613e88565b610e89565b610485610480366004613df1565b61113c565b60408051938452602084019290925290820152606001610278565b6104e16104ae366004613f7c565b60026020525f90815260409020546001600160701b0380821691600160701b810490911690600160e01b900461ffff1683565b604080516001600160701b03948516815293909216602084015261ffff1690820152606001610278565b610294610519366004614074565b6111a0565b6102bd61052c366004613e88565b6111d6565b6102dd61122c565b610392610547366004613f7c565b611239565b61029461055a3660046140b3565b61129a565b61029461136d565b6105a5610575366004613e9f565b600360209081525f92835260408084209091529082529020546001600160701b0380821691600160701b90041682565b604080516001600160701b03938416815292909116602083015201610278565b61061a6105d3366004613e88565b600f6020525f908152604090208054600190910154600282810b926301000000810490910b9166010000000000009091046001600160801b0316906001600160a01b031684565b60408051600295860b81529390940b60208401526001600160801b03909116928201929092526001600160a01b039091166060820152608001610278565b6103927f000000000000000000000000000000000000000000000000000000000000000081565b5f546102bd906001600160a01b031681565b6102dd611458565b6102bd7f000000000000000000000000000000000000000000000000000000000000000081565b6102946106ce366004613f7c565b611465565b6103926106e1366004613e88565b6118b0565b6102946106f4366004614119565b611e97565b6102bd610707366004613f7c565b600e6020525f90815260409020546001600160a01b031681565b61039261072f366004613e88565b611f02565b610294610742366004613f0e565b6120fe565b610392610755366004613df1565b6121c0565b6102dd610768366004613e88565b612243565b61039261077b366004613e88565b61229f565b61026c61078e366004614150565b600a60209081525f928352604080842090915290825290205460ff1681565b6102946107bb366004613f7c565b61231e565b61026c6107ce366004613e9f565b612391565b5f6301ffc9a760e01b6001600160e01b03198316148061080357506380ac58cd60e01b6001600160e01b03198316145b8061081e5750635b5e139f60e01b6001600160e01b03198316145b92915050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461086d576040516310f5403960e31b815260040160405180910390fd5b5f61087a848460a01b1790565b90505f610890868361088b86614190565b6123d4565b905061089d8683836124c5565b50505050505050565b600580546108b3906141aa565b80601f01602080910402602001604051908101604052809291908181526020018280546108df906141aa565b801561092a5780601f106109015761010080835404028352916020019161092a565b820191905f5260205f20905b81548152906001019060200180831161090d57829003601f168201915b505050505081565b5f818152600760205260409020546001600160a01b03163381148061097957506001600160a01b0381165f908152600a6020908152604080832033845290915290205460ff165b6109bb5760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b60448201526064015b60405180910390fd5b5f8281526009602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b5f336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610a60576040516310f5403960e31b815260040160405180910390fd5b5f610a6d868660a01b1790565b90505f610a7b8883866123d4565b90505f610a898984846124c5565b9050811580610a96575080155b15610aa3575f9350610ab1565b610aae8187846127c9565b93505b50505095945050505050565b5f805f610acc858560a01b1790565b90505f610ad8826127e4565b90505f610ae88884600185612843565b5090505f610af6898461298c565b90505f80610b058b8585612b9d565b909d909c509a5050505050505050505050565b5f80336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610b63576040516310f5403960e31b815260040160405180910390fd5b5f610b70878760a01b1790565b90505f610b7e8983876123d4565b90505f80610b8d838c86612e69565b91509150825f1480610b9d575080155b15610baa575f9450610bb8565b610bb58189856127c9565b94505b5060010199929850919650505050505050565b5f818152600760205260409020546001600160a01b03848116911614610c205760405162461bcd60e51b815260206004820152600a60248201526957524f4e475f46524f4d60b01b60448201526064016109b2565b6001600160a01b038216610c6a5760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b60448201526064016109b2565b336001600160a01b0384161480610ca357506001600160a01b0383165f908152600a6020908152604080832033845290915290205460ff165b80610cc357505f818152600960205260409020546001600160a01b031633145b610d005760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b60448201526064016109b2565b6001600160a01b038084165f81815260086020908152604080832080545f19019055938616808352848320805460010190558583526007825284832080546001600160a01b03199081168317909155600990925284832080549092169091559251849392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600d602052815f5260405f208181548110610da6575f80fd5b905f5260205f20015f91509150505481565b610dc3838383610bcb565b6001600160a01b0382163b1580610e685750604051630a85bd0160e11b8082523360048301526001600160a01b03858116602484015260448301849052608060648401525f608484015290919084169063150b7a029060a4016020604051808303815f875af1158015610e38573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e5c91906141e2565b6001600160e01b031916145b610e845760405162461bcd60e51b81526004016109b2906141fd565b505050565b5f600b54600114610eac5760405162461bcd60e51b81526004016109b290614227565b6002600b555f828152600760205260409020546001600160a01b03163314610ee7576040516330cd747160e01b815260040160405180910390fd5b5f828152600f602052604090819020600101549051632e1a7d4d60e01b8152600481018490526001600160a01b0390911690632e1a7d4d906024015f604051808303815f87803b158015610f39575f80fd5b505af1158015610f4b573d5f803e3d5ffd5b50506040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031692506370a082319150602401602060405180830381865afa158015610fb1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fd5919061424b565b5f838152600f6020526040902080546001600160b01b031916815560010180546001600160a01b0319169055905061100c826131a1565b80156110b0576110466001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016338361326b565b6040516001600160801b03821681526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169083907f99eb7ece63bef2ec97b991da7cf3763c7c533b1614782a4afd1b7b028db3189f9060200160405180910390a35b604051632142170760e11b8152306004820152336024820152604481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906342842e0e906064015f604051808303815f87803b15801561111b575f80fd5b505af115801561112d573d5f803e3d5ffd5b50506001600b55509092915050565b5f805f8061114c878760a01b1790565b90505f611158826127e4565b90505f806111688b858a86612843565b9150915080515f036111815761117e8b8461298c565b90505b61118c8b8383612b9d565b919d909c50909a5098505050505050505050565b5f546001600160a01b031633146111c95760405162461bcd60e51b81526004016109b290614262565b600c610e848284836142e0565b5f818152600760205260409020546001600160a01b0316806112275760405162461bcd60e51b815260206004820152600a6024820152691393d517d3525395115160b21b60448201526064016109b2565b919050565b600c80546108b3906141aa565b5f6001600160a01b03821661127f5760405162461bcd60e51b815260206004820152600c60248201526b5a45524f5f4144445245535360a01b60448201526064016109b2565b506001600160a01b03165f9081526008602052604090205490565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146112e3576040516310f5403960e31b815260040160405180910390fd5b6127108161ffff16111561130a57604051630b1c8e2560e01b815260040160405180910390fd5b6001600160a01b039092165f908152600260205260409020805461ffff909316600160e01b0261ffff60e01b196001600160701b03909316600160701b02929092166fffffffffffffffffffffffffffffffff60701b1990931692909217179055565b5f546001600160a01b031633146113965760405162461bcd60e51b81526004016109b290614262565b305f81815260016020819052604091829020805460ff191690911790555163f1751c7b60e01b81526001600160601b037f000000000000000000000000000000000000000000000000000000000000000016600482015260248101919091526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063f1751c7b906044015f604051808303815f87803b158015611440575f80fd5b505af1158015611452573d5f803e3d5ffd5b50505050565b600680546108b3906141aa565b5f546001600160a01b0316331461148e5760405162461bcd60e51b81526004016109b290614262565b60405163aa79979b60e01b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063aa79979b906024016020604051808303815f875af11580156114f3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611517919061439a565b15156001146115395760405163e1a93ebd60e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b031663f7c618c16040518163ffffffff1660e01b81526004016020604051808303815f875af11580156115a0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115c491906143c0565b6001600160a01b0316146115eb57604051633616e34b60e11b815260040160405180910390fd5b5f816001600160a01b03166316f0115b6040518163ffffffff1660e01b81526004016020604051808303815f875af1158015611629573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061164d91906143c0565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f8350ed0826001600160a01b0316630dfe16816040518163ffffffff1660e01b81526004016020604051808303815f875af11580156116bb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116df91906143c0565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201525f6024820152604401602060405180830381865afa158015611727573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061174b919061439a565b61176857604051634847234360e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f8350ed0826001600160a01b031663d21220a76040518163ffffffff1660e01b81526004016020604051808303815f875af11580156117d4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117f891906143c0565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201525f6024820152604401602060405180830381865afa158015611840573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611864919061439a565b61188157604051634847234360e01b815260040160405180910390fd5b6001600160a01b039081165f908152600e602052604090208054919092166001600160a01b0319909116179055565b5f600b546001146118d35760405162461bcd60e51b81526004016109b290614227565b6002600b556001600160601b0382111561190057604051631bf4348160e31b815260040160405180910390fd5b604051632142170760e11b8152336004820152306024820152604481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906342842e0e906064015f604051808303815f87803b15801561196b575f80fd5b505af115801561197d573d5f803e3d5ffd5b505050505f805f805f807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166399fbab88896040518263ffffffff1660e01b81526004016119d591815260200190565b61018060405180830381865afa1580156119f1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a159190614402565b505050509750975097509750975097505050806001600160801b03165f03611a5057604051630200e8a960e31b815260040160405180910390fd5b5f600e5f611a807f00000000000000000000000000000000000000000000000000000000000000008a8a8a6132e8565b6001600160a01b03166001600160a01b031681526020019081526020015f205f9054906101000a90046001600160a01b0316905060405180608001604052808560020b81526020018460020b8152602001836001600160801b03168152602001826001600160a01b0316815250600f5f8b81526020019081526020015f205f820151815f015f6101000a81548162ffffff021916908360020b62ffffff1602179055506020820151815f0160036101000a81548162ffffff021916908360020b62ffffff1602179055506040820151815f0160066101000a8154816001600160801b0302191690836001600160801b031602179055506060820151816001015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055509050505f600367ffffffffffffffff811115611bc057611bc0614288565b604051908082528060200260200182016040528015611be9578160200160208202803683370190505b50905087815f81518110611bff57611bff6144d6565b60209081029190910101528681600181518110611c1e57611c1e6144d6565b60209081029190910101527f000000000000000000000000000000000000000000000000000000000000000081600281518110611c5d57611c5d6144d6565b60200260200101818152505080600d5f611c79308e60a01b1790565b81526020019081526020015f209080519060200190611c99929190613d56565b5060405163095ea7b360e01b81526001600160a01b038381166004830152602482018c90527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044015f604051808303815f87803b158015611d01575f80fd5b505af1158015611d13573d5f803e3d5ffd5b505060405163b6b55f2560e01b8152600481018d90526001600160a01b038516925063b6b55f2591506024015f604051808303815f87803b158015611d56575f80fd5b505af1158015611d68573d5f803e3d5ffd5b50506040516370a0823160e01b81523060048201525f92506001600160a01b038b1691506370a0823190602401602060405180830381865afa158015611db0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611dd4919061424b565b6040516370a0823160e01b81523060048201529091505f906001600160a01b038a16906370a0823190602401602060405180830381865afa158015611e1b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e3f919061424b565b90508115611e5b57611e5b6001600160a01b038b16338461326b565b8015611e7557611e756001600160a01b038a16338361326b565b8b9a50611e82338c613411565b50506001600b55509698975050505050505050565b335f818152600a602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b5f600b54600114611f255760405162461bcd60e51b81526004016109b290614227565b6002600b555f828152600760205260409020546001600160a01b03163314611f60576040516330cd747160e01b815260040160405180910390fd5b5f828152600f602052604090819020600101549051631c4b774b60e01b8152600481018490526001600160a01b0390911690631c4b774b906024015f604051808303815f87803b158015611fb2575f80fd5b505af1158015611fc4573d5f803e3d5ffd5b50506040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031692506370a082319150602401602060405180830381865afa15801561202a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061204e919061424b565b905080156120f45761208a6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016338361326b565b6040516001600160801b03821681526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169083907f99eb7ece63bef2ec97b991da7cf3763c7c533b1614782a4afd1b7b028db3189f9060200160405180910390a35b6001600b55919050565b612109858585610bcb565b6001600160a01b0384163b158061219d5750604051630a85bd0160e11b808252906001600160a01b0386169063150b7a02906121519033908a908990899089906004016144ea565b6020604051808303815f875af115801561216d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061219191906141e2565b6001600160e01b031916145b6121b95760405162461bcd60e51b81526004016109b2906141fd565b5050505050565b5f336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461220a576040516310f5403960e31b815260040160405180910390fd5b5f612217858560a01b1790565b90505f6122258783866123d4565b90505f612233828985612e69565b5060010198975050505050505050565b60605f600c8054612253906141aa565b90501161226e5760405180602001604052805f81525061081e565b600c612279836134dd565b60405160200161228a92919061453c565b60405160208183030381529060405292915050565b5f818152600f6020526040808220600101549051633e491d4760e01b8152306004820152602481018490526001600160a01b0390911690633e491d4790604401602060405180830381865afa1580156122fa573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061081e919061424b565b5f546001600160a01b031633146123475760405162461bcd60e51b81526004016109b290614262565b5f80546001600160a01b0319166001600160a01b0383169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b5f6001600160a01b038316301480156123bf57505f828152600760205260409020546001600160a01b031615155b156123cc5750600161081e565b505f92915050565b5f8082131561241b576001600160a01b0384165f9081526003602090815260408083208684529091529020546124149083906001600160701b03166145bf565b9050612473565b6001600160a01b0384165f9081526003602090815260408083208684529091529020546001600160701b031661245083614190565b811161245c575f61246f565b61246583614190565b61246f90826145d2565b9150505b61247c816135e2565b6001600160a01b03949094165f9081526003602090815260408083209583529490529290922080546001600160701b0319166001600160701b0390941693909317909255919050565b5f806124d0846127e4565b90505f6124df86868685612843565b5090505f805f805b85518110156126fa576001600160a01b038a165f9081526004602090815260408083208c845290915281208751909190889084908110612529576125296144d6565b602002602001015181526020019081526020015f2054858281518110612551576125516144d6565b602002602001015161256391906145e5565b9350848181518110612577576125776144d6565b602002602001015160045f8c6001600160a01b03166001600160a01b031681526020019081526020015f205f8b81526020019081526020015f205f8884815181106125c4576125c46144d6565b602002602001015181526020019081526020015f208190555061260e8682815181106125f2576125f26144d6565b60200260200101516001600160a01b0381169160a09190911c90565b80935081945050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316631e3b06628b858589868151811061265a5761265a6144d6565b60209081029190910101516040516001600160e01b031960e087901b1681526001600160a01b039485166004820152939092166024840152604483015260648201526084810187905260a4016020604051808303815f875af11580156126c2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126e6919061424b565b6126f090886145bf565b96506001016124e7565b506001600160a01b0389165f8181526003602090815260408083208c8452825280832080546001600160701b038c8116600160701b908102600160701b600160e01b0319841617909355958552600290935290832054910483169216908289106127695750818803810161277a565b88830382111561277a575087820381035b612783816135e2565b6001600160a01b039c909c165f90815260026020526040902080546001600160701b0319166001600160701b03909d169c909c17909b5550959998505050505050505050565b5f825f1904841183021582026127dd575f80fd5b5091020490565b5f818152600d602090815260409182902080548351818402810184019094528084526060939283018282801561283757602002820191905f5260205f20905b815481526020019060010190808311612823575b50505050509050919050565b606080835f0361287357604080516003808252608082019092529060208201606080368337019050509150612983565b61287d868461298c565b6040805160038082526080820190925291925060a087901c919060208201606080368337019050505f828152600f6020526040812054845192955061291e92600282810b936301000000840490910b92660100000000000090046001600160801b0316918791906128f0576128f06144d6565b60200260200101515f01518660018151811061290e5761290e6144d6565b60200260200101515f01516135f6565b845f81518110612930576129306144d6565b602002602001018560018151811061294a5761294a6144d6565b6020908102919091010191909152526129628161229f565b83600281518110612975576129756144d6565b602002602001018181525050505b94509492505050565b80516060905f8167ffffffffffffffff8111156129ab576129ab614288565b6040519080825280602002602001820160405280156129d4578160200160208202803683370190505b5090505f8267ffffffffffffffff8111156129f1576129f1614288565b604051908082528060200260200182016040528015612a1a578160200160208202803683370190505b5090505f8367ffffffffffffffff811115612a3757612a37614288565b604051908082528060200260200182016040528015612a60578160200160208202803683370190505b5090505f5b84811015612afe57612a828782815181106125f2576125f26144d6565b858381518110612a9457612a946144d6565b60200260200101858481518110612aad57612aad6144d6565b6020026020010182815250826001600160a01b03166001600160a01b03168152505050670de0b6b3a7640000828281518110612aeb57612aeb6144d6565b6020908102919091010152600101612a65565b5060405163cbdcbc3b60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063cbdcbc3b90612b51908a90879087908790600401614645565b5f60405180830381865afa158015612b6b573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612b929190810190614717565b979650505050505050565b5f805f80612bf585600181518110612bb757612bb76144d6565b60200260200101515f0151670de0b6b3a764000088600181518110612bde57612bde6144d6565b60200260200101516127c99092919063ffffffff16565b612c30865f81518110612c0a57612c0a6144d6565b60200260200101515f0151670de0b6b3a7640000895f81518110612bde57612bde6144d6565b612c3a91906145bf565b90505f612c7a86600281518110612c5357612c536144d6565b60200260200101515f0151670de0b6b3a764000089600281518110612bde57612bde6144d6565b9050612c8681836145bf565b9450845f03612c9f575f805f9450945094505050612e60565b85600181518110612cb257612cb26144d6565b602002602001015160200151865f81518110612cd057612cd06144d6565b60200260200101516020015110612d055785600181518110612cf457612cf46144d6565b602002602001015160200151612d24565b855f81518110612d1757612d176144d6565b6020026020010151602001515b935085600181518110612d3957612d396144d6565b602002602001015160400151865f81518110612d5757612d576144d6565b60200260200101516040015110612d8c5785600181518110612d7b57612d7b6144d6565b602002602001015160400151612dab565b855f81518110612d9e57612d9e6144d6565b6020026020010151604001515b92508486600281518110612dc157612dc16144d6565b60200260200101516020015182028584020181612de057612de06147e4565b0493508486600281518110612df757612df76144d6565b60200260200101516040015182028484020181612e1657612e166147e4565b6001600160a01b038a165f908152600260205260409020549190049350600160e01b900461ffff16612e4b81866127106127c9565b9450612e5a81856127106127c9565b93505050505b93509350939050565b5f805f80612e76856127e4565b90505f612e8587878a85612843565b5090505f805f805f805b875181101561308e576001600160a01b038d165f9081526004602090815260408083208f8452909152812089519091908a9084908110612ed157612ed16144d6565b602002602001015181526020019081526020015f2054878281518110612ef957612ef96144d6565b6020026020010151612f0b91906145e5565b9550868181518110612f1f57612f1f6144d6565b602002602001015160045f8f6001600160a01b03166001600160a01b031681526020019081526020015f205f8e81526020019081526020015f205f8a8481518110612f6c57612f6c6144d6565b602002602001015181526020019081526020015f2081905550612f9a8882815181106125f2576125f26144d6565b80955081965050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636a6674a78e87878b8681518110612fe657612fe66144d6565b60209081029190910101516040516001600160e01b031960e087901b1681526001600160a01b039485166004820152939092166024840152604483015260648201526084810189905260a40160408051808303815f875af115801561304d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061307191906147f8565b9093509150613080828b6145bf565b9a83019a9950600101612e8f565b506001600160a01b038c165f8181526003602090815260408083208f8452825280832080546001600160701b038f8116600160701b908102600160701b600160e01b0319841617909355958552600290935292205491900482169116818b106130fd57818b038101995061310f565b8a820381111561310f578a8203810399505b6001600160a01b038e165f90815260026020526040902054600160701b90046001600160701b03168a10613156576040516366b09a5960e01b815260040160405180910390fd5b5050506001600160a01b03909a165f90815260026020526040902080546001600160701b039097166001600160701b0319909716969096179095555094989397509295505050505050565b5f818152600760205260409020546001600160a01b0316806131f25760405162461bcd60e51b815260206004820152600a6024820152691393d517d3525395115160b21b60448201526064016109b2565b6001600160a01b0381165f81815260086020908152604080832080545f190190558583526007825280832080546001600160a01b031990811690915560099092528083208054909216909155518492907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b5f60405163a9059cbb60e01b81526001600160a01b038416600482015282602482015260205f6044835f895af13d15601f3d1160015f5114161716915050806114525760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b60448201526064016109b2565b5f826001600160a01b0316846001600160a01b031610613306575f80fd5b613408856001600160a01b031663cefa77996040518163ffffffff1660e01b8152600401602060405180830381865afa158015613345573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061336991906143c0565b604080516001600160a01b038089166020830152871691810191909152600285900b60608201526080016040516020818303038152906040528051906020012087604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b8152606093841b60148201526f5af43d82803e903d91602b57fd5bf3ff60801b6028820152921b6038830152604c8201526037808220606c830152605591012090565b95945050505050565b61341b8282613630565b6001600160a01b0382163b15806134bd5750604051630a85bd0160e11b8082523360048301525f6024830181905260448301849052608060648401526084830152906001600160a01b0384169063150b7a029060a4016020604051808303815f875af115801561348d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134b191906141e2565b6001600160e01b031916145b6134d95760405162461bcd60e51b81526004016109b2906141fd565b5050565b6060815f036135035750506040805180820190915260018152600360fc1b602082015290565b815f5b811561352c57806135168161481a565b91506135259050600a83614832565b9150613506565b5f8167ffffffffffffffff81111561354657613546614288565b6040519080825280601f01601f191660200182016040528015613570576020820181803683370190505b5090505b84156135da576135856001836145d2565b9150613592600a86614845565b61359d9060306145bf565b60f81b8183815181106135b2576135b26144d6565b60200101906001600160f81b03191690815f1a9053506135d3600a86614832565b9450613574565b949350505050565b5f600160701b82106135f2575f80fd5b5090565b5f805f6136038585613739565b9050613621816136128a613796565b61361b8a613796565b89613ac4565b90999098509650505050505050565b6001600160a01b03821661367a5760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b60448201526064016109b2565b5f818152600760205260409020546001600160a01b0316156136cf5760405162461bcd60e51b815260206004820152600e60248201526d1053149150511657d3525395115160921b60448201526064016109b2565b6001600160a01b0382165f81815260086020908152604080832080546001019055848352600790915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b5f815f0361375c575073fffd8963efd1fc6a506488495d951d5263988d2661081e565b5f613774846b204fce5e3e25026110000000856127c9565b90505f61378082613b5e565b9050613408655af3107a4000606083901b614832565b5f805f8360020b126137ab578260020b6137b2565b8260020b5f035b9050620d89e88111156137eb5760405162461bcd60e51b81526020600482015260016024820152601560fa1b60448201526064016109b2565b5f816001165f0361380057600160801b613812565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff1690506002821615613846576ffff97272373d413259a46990580e213a0260801c5b6004821615613865576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615613884576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b60108216156138a3576fffcb9843d60f6159c9db58835c9266440260801c5b60208216156138c2576fff973b41fa98c081472e6896dfb254c00260801c5b60408216156138e1576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615613900576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615613920576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615613940576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615613960576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615613980576fe7159475a2c29b7443b29c7fa6e889d90260801c5b6110008216156139a0576fd097f3bdfd2022b8845ad8f792aa58250260801c5b6120008216156139c0576fa9f746462d870fdf8a65dc1f90e061e50260801c5b6140008216156139e0576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615613a00576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615613a21576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615613a41576e5d6af8dedb81196699c329225ee6040260801c5b62040000821615613a60576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615613a7d576b048a170391f7dc42444e8fa20260801c5b5f8460020b1315613a9c57805f1981613a9857613a986147e4565b0490505b640100000000810615613ab0576001613ab2565b5f5b60ff16602082901c0192505050919050565b5f80836001600160a01b0316856001600160a01b03161115613ae4579293925b846001600160a01b0316866001600160a01b031611613b0f57613b08858585613c02565b9150612983565b836001600160a01b0316866001600160a01b03161015613b4857613b34868585613c02565b9150613b41858785613c72565b9050612983565b613b53858585613c72565b905094509492505050565b60b581600160881b8110613b775760409190911b9060801c5b69010000000000000000008110613b935760209190911b9060401c5b650100000000008110613bab5760109190911b9060201c5b63010000008110613bc15760089190911b9060101c5b62010000010260121c80820401600190811c80830401811c80830401811c80830401811c80830401811c80830401811c80830401901c908190048111900390565b5f826001600160a01b0316846001600160a01b03161115613c21579192915b836001600160a01b0316613c5a606060ff16846001600160801b0316901b8686036001600160a01b0316866001600160a01b0316613cb0565b81613c6757613c676147e4565b0490505b9392505050565b5f826001600160a01b0316846001600160a01b03161115613c91579192915b6135da826001600160801b03168585036001600160a01b0316600160601b5b5f80805f19858709858702925082811083820303915050805f03613ce4575f8411613cd9575f80fd5b508290049050613c6b565b808411613cef575f80fd5b5f8486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091025f889003889004909101858311909403939093029303949094049190911702949350505050565b828054828255905f5260205f20908101928215613d8f579160200282015b82811115613d8f578251825591602001919060010190613d74565b506135f29291505b808211156135f2575f8155600101613d97565b6001600160e01b031981168114613dbf575f80fd5b50565b5f60208284031215613dd2575f80fd5b8135613c6b81613daa565b6001600160a01b0381168114613dbf575f80fd5b5f805f8060808587031215613e04575f80fd5b8435613e0f81613ddd565b93506020850135613e1f81613ddd565b93969395505050506040820135916060013590565b5f5b83811015613e4e578181015183820152602001613e36565b50505f910152565b602081525f8251806020840152613e74816040850160208701613e34565b601f01601f19169190910160400192915050565b5f60208284031215613e98575f80fd5b5035919050565b5f8060408385031215613eb0575f80fd5b8235613ebb81613ddd565b946020939093013593505050565b5f8083601f840112613ed9575f80fd5b50813567ffffffffffffffff811115613ef0575f80fd5b602083019150836020828501011115613f07575f80fd5b9250929050565b5f805f805f60808688031215613f22575f80fd5b8535613f2d81613ddd565b94506020860135613f3d81613ddd565b935060408601359250606086013567ffffffffffffffff811115613f5f575f80fd5b613f6b88828901613ec9565b969995985093965092949392505050565b5f60208284031215613f8c575f80fd5b8135613c6b81613ddd565b5f805f805f60a08688031215613fab575f80fd5b8535613fb681613ddd565b94506020860135613fc681613ddd565b94979496505050506040830135926060810135926080909101359150565b5f805f60608486031215613ff6575f80fd5b833561400181613ddd565b9250602084013561401181613ddd565b929592945050506040919091013590565b5f805f60608486031215614034575f80fd5b833561403f81613ddd565b95602085013595506040909401359392505050565b5f8060408385031215614065575f80fd5b50508035926020909101359150565b5f8060208385031215614085575f80fd5b823567ffffffffffffffff81111561409b575f80fd5b6140a785828601613ec9565b90969095509350505050565b5f805f606084860312156140c5575f80fd5b83356140d081613ddd565b925060208401356001600160701b03811681146140eb575f80fd5b9150604084013561ffff81168114614101575f80fd5b809150509250925092565b8015158114613dbf575f80fd5b5f806040838503121561412a575f80fd5b823561413581613ddd565b915060208301356141458161410c565b809150509250929050565b5f8060408385031215614161575f80fd5b823561416c81613ddd565b9150602083013561414581613ddd565b634e487b7160e01b5f52601160045260245ffd5b5f600160ff1b82016141a4576141a461417c565b505f0390565b600181811c908216806141be57607f821691505b6020821081036141dc57634e487b7160e01b5f52602260045260245ffd5b50919050565b5f602082840312156141f2575f80fd5b8151613c6b81613daa565b60208082526010908201526f155394d0519157d49150d2541251539560821b604082015260600190565b6020808252600a90820152695245454e5452414e435960b01b604082015260600190565b5f6020828403121561425b575f80fd5b5051919050565b6020808252600c908201526b15539055551213d49256915160a21b604082015260600190565b634e487b7160e01b5f52604160045260245ffd5b601f821115610e8457805f5260205f20601f840160051c810160208510156142c15750805b601f840160051c820191505b818110156121b9575f81556001016142cd565b67ffffffffffffffff8311156142f8576142f8614288565b61430c8361430683546141aa565b8361429c565b5f601f84116001811461433d575f85156143265750838201355b5f19600387901b1c1916600186901b1783556121b9565b5f83815260208120601f198716915b8281101561436c578685013582556020948501946001909201910161434c565b5086821015614388575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b5f602082840312156143aa575f80fd5b8151613c6b8161410c565b805161122781613ddd565b5f602082840312156143d0575f80fd5b8151613c6b81613ddd565b8051600281900b8114611227575f80fd5b80516001600160801b0381168114611227575f80fd5b5f805f805f805f805f805f806101808d8f03121561441e575f80fd5b8c516001600160601b0381168114614434575f80fd5b9b5061444260208e016143b5565b9a5061445060408e016143b5565b995061445e60608e016143b5565b985061446c60808e016143db565b975061447a60a08e016143db565b965061448860c08e016143db565b955061449660e08e016143ec565b94506101008d015193506101208d015192506144b56101408e016143ec565b91506144c46101608e016143ec565b90509295989b509295989b509295989b565b634e487b7160e01b5f52603260045260245ffd5b6001600160a01b038681168252851660208201526040810184905260806060820181905281018290525f828460a08401375f60a0848401015260a0601f19601f85011683010190509695505050505050565b5f808454614549816141aa565b600182811680156145615760018114614576576145a2565b60ff19841687528215158302870194506145a2565b885f526020805f205f5b858110156145995781548a820152908401908201614580565b50505082870194505b5050505083516145b6818360208801613e34565b01949350505050565b8082018082111561081e5761081e61417c565b8181038181111561081e5761081e61417c565b8181035f8312801583831316838312821617156146045761460461417c565b5092915050565b5f815180845260208085019450602084015f5b8381101561463a5781518752958201959082019060010161461e565b509495945050505050565b6001600160a01b0385811682526080602080840182905286519184018290525f928782019290919060a0860190855b81811015614692578551851683529483019491830191600101614674565b505085810360408701526146a6818961460b565b93505050508281036060840152612b92818561460b565b6040516060810167ffffffffffffffff811182821017156146e0576146e0614288565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561470f5761470f614288565b604052919050565b5f6020808385031215614728575f80fd5b825167ffffffffffffffff8082111561473f575f80fd5b818501915085601f830112614752575f80fd5b81518181111561476457614764614288565b614772848260051b016146e6565b81815284810192506060918202840185019188831115614790575f80fd5b938501935b828510156147d85780858a0312156147ab575f80fd5b6147b36146bd565b8551815286860151878201526040808701519082015284529384019392850192614795565b50979650505050505050565b634e487b7160e01b5f52601260045260245ffd5b5f8060408385031215614809575f80fd5b505080516020909101519092909150565b5f6001820161482b5761482b61417c565b5060010190565b5f82614840576148406147e4565b500490565b5f82614853576148536147e4565b50069056fea26469706673582212205cf9f56e3525cbc9d2605fad77890928dff8b02eb6a7739c30e70e6d2856638664736f6c6343000816003341726361646961205374616b656420536c697073747265616d20506f736974696f6e73000000000000000000000000d0690557600eb8be8391d1d97346e2aab5300d5f000000000000000000000000827922686190790b37229fd06084350e74485b7200000000000000000000000016613524e02ad97edfef371bc883f2f5d6c480a5000000000000000000000000940181a94a35a4569e4529a3cdfb74e38fd98631