0 txs
1.93m calls
constructor
constructor(address factory, address sequencerUptimeOracle_)
functions
assetToAssetInformation
viewfunction assetToAssetInformation(address) view returns (uint96 assetType, address assetModule)
batchGetAssetTypes
viewfunction batchGetAssetTypes(address[] assetAddresses) view returns (uint256[] assetTypes)
checkOracleSequence
viewfunction checkOracleSequence(bytes32 oracleSequence) view returns (bool)
depositPaused
viewfunction depositPaused() view returns (bool)
FACTORY
viewfunction FACTORY() view returns (address)
getCollateralValue
viewfunction getCollateralValue(address numeraire, address creditor, address[] assetAddresses, uint256[] assetIds, uint256[] assetAmounts) view returns (uint256 collateralValue)
getLiquidationValue
viewfunction getLiquidationValue(address numeraire, address creditor, address[] assetAddresses, uint256[] assetIds, uint256[] assetAmounts) view returns (uint256 liquidationValue)
getRateInUsd
viewfunction getRateInUsd(bytes32 oracleSequence) view returns (uint256 rate)
getRiskFactors
viewfunction getRiskFactors(address creditor, address[] assetAddresses, uint256[] assetIds) view returns (uint16[] collateralFactors, uint16[] liquidationFactors)
getTotalValue
viewfunction getTotalValue(address numeraire, address creditor, address[] assetAddresses, uint256[] assetIds, uint256[] assetAmounts) view returns (uint256 assetValue)
getValuesInNumeraire
viewfunction getValuesInNumeraire(address numeraire, address creditor, address[] assetAddresses, uint256[] assetIds, uint256[] assetAmounts) view returns (tuple[] valuesAndRiskFactors)
getValuesInUsd
viewfunction getValuesInUsd(address creditor, address[] assets, uint256[] assetIds, uint256[] assetAmounts) view returns (tuple[] valuesAndRiskFactors)
getValuesInUsdRecursive
viewfunction getValuesInUsdRecursive(address creditor, address[] assets, uint256[] assetIds, uint256[] assetAmounts) view returns (tuple[] valuesAndRiskFactors)
guardian
viewfunction guardian() view returns (address)
inRegistry
viewfunction inRegistry(address) view returns (bool)
isAllowed
viewfunction isAllowed(address asset, uint256 assetId) view returns (bool)
isAssetModule
viewfunction isAssetModule(address) view returns (bool)
isOracleModule
viewfunction isOracleModule(address) view returns (bool)
oracleToOracleModule
viewfunction oracleToOracleModule(uint256) view returns (address)
owner
viewfunction owner() view returns (address)
pauseTimestamp
viewfunction pauseTimestamp() view returns (uint96)
riskParams
viewfunction riskParams(address creditor) view returns (uint128 minUsdValue, uint64 gracePeriod, uint64 maxRecursiveCalls)
withdrawPaused
viewfunction withdrawPaused() view returns (bool)
addAsset
nonpayablefunction addAsset(uint96 assetType, address assetAddress)
addAssetModule
nonpayablefunction addAssetModule(address assetModule)
addOracle
nonpayablefunction addOracle() returns (uint256 oracleId)
addOracleModule
nonpayablefunction addOracleModule(address oracleModule)
batchProcessDeposit
nonpayablefunction batchProcessDeposit(address creditor, address[] assetAddresses, uint256[] assetIds, uint256[] amounts)
batchProcessWithdrawal
nonpayablefunction batchProcessWithdrawal(address creditor, address[] assetAddresses, uint256[] assetIds, uint256[] amounts) returns (uint256[] assetTypes)
changeGuardian
nonpayablefunction changeGuardian(address guardian_)
getUsdValueExposureToUnderlyingAssetAfterDeposit
nonpayablefunction getUsdValueExposureToUnderlyingAssetAfterDeposit(address creditor, address underlyingAsset, uint256 underlyingAssetId, uint256 exposureAssetToUnderlyingAsset, int256 deltaExposureAssetToUnderlyingAsset) returns (uint256 recursiveCalls, uint256 usdExposureAssetToUnderlyingAsset)
getUsdValueExposureToUnderlyingAssetAfterWithdrawal
nonpayablefunction getUsdValueExposureToUnderlyingAssetAfterWithdrawal(address creditor, address underlyingAsset, uint256 underlyingAssetId, uint256 exposureAssetToUnderlyingAsset, int256 deltaExposureAssetToUnderlyingAsset) returns (uint256 usdExposureAssetToUnderlyingAsset)
pause
nonpayablefunction pause()
setRiskParameters
nonpayablefunction setRiskParameters(address creditor, uint128 minUsdValue, uint64 gracePeriod, uint64 maxRecursiveCalls)
setRiskParametersOfDerivedAM
nonpayablefunction setRiskParametersOfDerivedAM(address creditor, address assetModule, uint112 maxUsdExposureProtocol, uint16 riskFactor)
setRiskParametersOfPrimaryAsset
nonpayablefunction setRiskParametersOfPrimaryAsset(address creditor, address asset, uint256 assetId, uint112 maxExposure, uint16 collateralFactor, uint16 liquidationFactor)
setSequencerUptimeOracle
nonpayablefunction setSequencerUptimeOracle(address sequencerUptimeOracle_)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
unpause
nonpayablefunction unpause()
unpause
nonpayablefunction unpause(bool withdrawPaused_, bool depositPaused_)
events
AssetAdded
event AssetAdded(address indexed assetAddress, address indexed assetModule)
AssetModuleAdded
event AssetModuleAdded(address assetModule)
Deposit
event Deposit(address account)
GuardianChanged
event GuardianChanged(address indexed user, address indexed newGuardian)
OracleAdded
event OracleAdded(uint256 indexed oracleId, address indexed oracleModule)
OracleModuleAdded
event OracleModuleAdded(address oracleModule)
OwnershipTransferred
event OwnershipTransferred(address indexed user, address indexed newOwner)
PauseFlagsUpdated
event PauseFlagsUpdated(bool withdrawPauseUpdate, bool depositPauseUpdate)
Withdrawal
event Withdrawal(address account)
errors
AssetAlreadyInRegistry
error AssetAlreadyInRegistry()
AssetModNotUnique
error AssetModNotUnique()
AssetNotAllowed
error AssetNotAllowed()
CoolDownPeriodNotPassed
error CoolDownPeriodNotPassed()
FunctionIsPaused
error FunctionIsPaused()
InvalidAssetType
error InvalidAssetType()
LengthMismatch
error LengthMismatch()
MaxRecursiveCallsReached
error MaxRecursiveCallsReached()
Min1Oracle
error Min1Oracle()
OnlyAccount
error OnlyAccount()
OnlyAssetModule
error OnlyAssetModule()
OnlyGuardian
error OnlyGuardian()
OnlyOracleModule
error OnlyOracleModule()
OracleModNotUnique
error OracleModNotUnique()
OracleNotReverting
error OracleNotReverting()
OracleReverting
error OracleReverting()
SequencerDown
error SequencerDown()
Unauthorized
error Unauthorized()
UnknownAsset
error UnknownAsset()
creation bytecode
0x60a060405234801562000010575f80fd5b50604051620036d2380380620036d28339810160408190526200003391620001bf565b5f80546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506001600160a01b03828116608052600380546001600160a01b0319169183169190911790555f620000a481620000cf565b50905080620000c657604051638338a51960e01b815260040160405180910390fd5b50505062000283565b5f8060035f9054906101000a90046001600160a01b03166001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa92505050801562000142575060408051601f3d908101601f191682019092526200013f918101906200020c565b60015b156200019e576001965083600114806200018d57506001600160a01b0388165f90815260096020526040902054600160801b90046001600160401b03166200018b84426200025d565b105b156200019857600195505b50505050505b915091565b80516001600160a01b0381168114620001ba575f80fd5b919050565b5f8060408385031215620001d1575f80fd5b620001dc83620001a3565b9150620001ec60208401620001a3565b90509250929050565b80516001600160501b0381168114620001ba575f80fd5b5f805f805f60a0868803121562000221575f80fd5b6200022c86620001f5565b94506020860151935060408601519250606086015191506200025160808701620001f5565b90509295509295909350565b818103818111156200027d57634e487b7160e01b5f52601160045260245ffd5b92915050565b608051613428620002aa5f395f8181610306015281816112be015261177701526134285ff3fe608060405234801561000f575f80fd5b506004361061023f575f3560e01c8063686ece2411610135578063ad84f341116100b4578063de5fb7bb11610079578063de5fb7bb14610649578063e4ec552b1461065c578063f1751c7b1461067e578063f2fde38b14610691578063f8350ed0146106a4575f80fd5b8063ad84f341146105cc578063c068a4cd146105fd578063c719aac914610610578063cbdcbc3b14610623578063d1c12f6014610636575f80fd5b80638456cb59116100fa5780638456cb591461052b5780638da5cb5b1461053357806398630676146105455780639ddde781146105585780639f88574a146105b9575f80fd5b8063686ece24146104a85780636a6674a7146104bb5780636c24afd8146104e35780637426f7e6146105055780637d0da56214610518575f80fd5b80633e358418116101c157806353b85a501161018657806353b85a50146103c5578063578da210146104385780635faf727c1461044b57806361183ac11461046d57806366a2896114610495575f80fd5b80633e3584181461037c5780633e47ec16146103845780633f3b0743146103975780633f4ba83a146103aa578063452a9320146103b2575f80fd5b80631e3b0662116102075780631e3b0662146102ee5780632dd31000146103015780632f3ffb9f146103405780632fcb4f041461035457806337bc28c814610369575f80fd5b806302befd24146102435780630344bc4e1461026c5780631580f7f11461028d578063187ab0ea146102ad5780631b3355ef146102cd575b5f80fd5b60015461025790600160a81b900460ff1681565b60405190151581526020015b60405180910390f35b61027f61027a366004612be8565b6106b7565b604051610263929190612ca2565b6102a061029b366004612ccf565b6108a8565b6040516102639190612d73565b6102c06102bb366004612dcb565b610b3d565b6040516102639190612e09565b6102e06102db366004612e4c565b610c46565b604051908152602001610263565b6102e06102fc366004612f02565b610c8d565b6103287f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610263565b60015461025790600160a01b900460ff1681565b610367610362366004612f4f565b610d66565b005b610367610377366004612f4f565b610de3565b6102e0610e9f565b610367610392366004612f4f565b610f28565b6102e06103a5366004612f71565b610fdd565b6103676111ea565b600154610328906001600160a01b031681565b6104096103d3366004612f4f565b60096020525f90815260409020546001600160801b038116906001600160401b03600160801b8204811691600160c01b90041683565b604080516001600160801b0390941684526001600160401b039283166020850152911690820152606001610263565b6102c0610446366004612ccf565b61127b565b610257610459366004612f4f565b60066020525f908152604090205460ff1681565b61032861047b366004612f71565b60076020525f90815260409020546001600160a01b031681565b6103676104a3366004612fb2565b6115fd565b6103676104b6366004612ccf565b611737565b6104ce6104c9366004612f02565b611ad5565b60408051928352602083019190915201610263565b6102576104f1366004612f4f565b60056020525f908152604090205460ff1681565b6102a0610513366004612e4c565b611bb3565b610367610526366004613032565b611ce8565b610367611dad565b5f54610328906001600160a01b031681565b61036761055336600461307f565b611e84565b610592610566366004612f4f565b60086020525f90815260409020546001600160601b03811690600160601b90046001600160a01b031682565b604080516001600160601b0390931683526001600160a01b03909116602083015201610263565b6103676105c73660046130df565b611fa4565b5f546105e590600160a01b90046001600160601b031681565b6040516001600160601b039091168152602001610263565b6102e061060b366004612e4c565b6120ab565b61025761061e366004612f71565b6120c7565b6102a0610631366004612ccf565b61235e565b6102e0610644366004612e4c565b612558565b610367610657366004612f4f565b6125d3565b61025761066a366004612f4f565b60046020525f908152604090205460ff1681565b61036761068c366004613136565b612671565b61036761069f366004612f4f565b61278d565b6102576106b236600461316d565b612800565b60608084806001600160401b038111156106d3576106d3613197565b6040519080825280602002602001820160405280156106fc578160200160208202803683370190505b509250806001600160401b0381111561071757610717613197565b604051908082528060200260200182016040528015610740578160200160208202803683370190505b5091505f5b8181101561089c5760085f898984818110610762576107626131ab565b90506020020160208101906107779190612f4f565b6001600160a01b03908116825260208201929092526040015f2054600160601b900416631ba0408c8a8a8a858181106107b2576107b26131ab565b90506020020160208101906107c79190612f4f565b8989868181106107d9576107d96131ab565b6040516001600160e01b031960e088901b1681526001600160a01b039586166004820152949093166024850152506020909102013560448201526064016040805180830381865afa158015610830573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061085491906131bf565b858381518110610866576108666131ab565b6020026020010185848151811061087f5761087f6131ab565b61ffff938416602091820292909201015291169052600101610745565b50509550959350505050565b6060875f6108b5826128ab565b91505080156108d65760405162032b3d60e81b815260040160405180910390fd5b87806001600160401b038111156108ef576108ef613197565b60405190808252806020026020018201604052801561094157816020015b61092e60405180606001604052805f81526020015f81526020015f81525090565b81526020019060019003908161090d5790505b506001600160a01b038c165f908152600960205260408120549195506001600160801b03909116905b82811015610b2d5760085f8d8d84818110610987576109876131ab565b905060200201602081019061099c9190612f4f565b6001600160a01b03908116825260208201929092526040015f2054600160601b9004166349bccc5d8e8e8e858181106109d7576109d76131ab565b90506020020160208101906109ec9190612f4f565b8d8d868181106109fe576109fe6131ab565b905060200201358c8c87818110610a1757610a176131ab565b905060200201356040518563ffffffff1660e01b8152600401610a3d94939291906131ec565b606060405180830381865afa158015610a58573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a7c9190613215565b888481518110610a8e57610a8e6131ab565b60200260200101515f01898581518110610aaa57610aaa6131ab565b60200260200101516020018a8681518110610ac757610ac76131ab565b602002602001015160400183815250838152508381525050505081868281518110610af457610af46131ab565b60200260200101515f01511015610b25575f868281518110610b1857610b186131ab565b6020908102919091010151525b60010161096a565b5050505050979650505050505050565b606081806001600160401b03811115610b5857610b58613197565b604051908082528060200260200182016040528015610b81578160200160208202803683370190505b5091505f5b81811015610c3e5760085f868684818110610ba357610ba36131ab565b9050602002016020810190610bb89190612f4f565b6001600160a01b0316815260208101919091526040015f205483516001600160601b0390911690849083908110610bf157610bf16131ab565b602002602001018181525050828181518110610c0f57610c0f6131ab565b60200260200101515f03610c365760405163c97d95cf60e01b815260040160405180910390fd5b600101610b86565b505092915050565b5f80610c57898989898989896108a8565b9050610c6281612977565b91506001600160a01b038a1615610c8057610c7d8a836129e9565b91505b5098975050505050505050565b335f9081526005602052604081205460ff16610cbc5760405163d044180160e01b815260040160405180910390fd5b6001600160a01b038581165f8181526008602052604090819020549051631723509360e01b815289841660048201526024810192909252604482018790526064820186905260848201859052600160601b90049091169063172350939060a4016020604051808303815f875af1158015610d38573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d5c9190613240565b9695505050505050565b5f546001600160a01b03163314610d985760405162461bcd60e51b8152600401610d8f90613257565b60405180910390fd5b600180546001600160a01b0319166001600160a01b03831690811790915560405133907fa14fc14d8620a708a896fd11392a235647d99385500a295f0d7da2a258b2e967905f90a350565b5f546001600160a01b03163314610e0c5760405162461bcd60e51b8152600401610d8f90613257565b6001600160a01b0381165f9081526005602052604090205460ff1615610e455760405163a5d1dbc560e01b815260040160405180910390fd5b6001600160a01b0381165f81815260056020908152604091829020805460ff1916600117905590519182527f6dabb2fac6035a24c5efc14e4414d25baebeda8aac8e5974ea1cfca97bfcaace91015b60405180910390a150565b335f9081526006602052604081205460ff16610ece5760405163d153327b60e01b815260040160405180910390fd5b5060028054600181019091555f8181526007602052604080822080546001600160a01b031916339081179091559051909183917fbf21de46ba0ce5e377db4224a7253064e85c704765b54881c2ad551a30a28d0b9190a390565b5f546001600160a01b03163314610f515760405162461bcd60e51b8152600401610d8f90613257565b6001600160a01b0381165f9081526006602052604090205460ff1615610f8a5760405163061a41ab60e21b815260040160405180910390fd5b6001600160a01b0381165f81815260066020908152604091829020805460ff1916600117905590519182527f152267720eb76a3a9ec72d51fa4b2d861636787525ac581b9c89685adcd434e99101610e94565b5f805f610fe984612a97565b8051670de0b6b3a7640000955091935091505f5b818110156111e157838181518110611017576110176131ab565b602002602001015115611100576110f960075f85848151811061103c5761103c6131ab565b602002602001015181526020019081526020015f205f9054906101000a90046001600160a01b03166001600160a01b03166357764094858481518110611084576110846131ab565b60200260200101516040518263ffffffff1660e01b81526004016110aa91815260200190565b602060405180830381865afa1580156110c5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110e99190613240565b8690670de0b6b3a7640000612b0a565b94506111d9565b6111d6670de0b6b3a764000060075f868581518110611121576111216131ab565b602002602001015181526020019081526020015f205f9054906101000a90046001600160a01b03166001600160a01b03166357764094868581518110611169576111696131ab565b60200260200101516040518263ffffffff1660e01b815260040161118f91815260200190565b602060405180830381865afa1580156111aa573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111ce9190613240565b879190612b0a565b94505b600101610ffd565b50505050919050565b5f5462278d009061120c908290600160a01b90046001600160601b0316613291565b421161122b5760405163036a87d960e21b815260040160405180910390fd5b6001805460ff60a01b191690819055604080515f8152600160a81b90920460ff16151560208301527fa5d9a2200e86d86e433905317aa5604e0dc9bc554c2ed2212160bfd736f0b64b9101610e94565b600154606090600160a01b900460ff16156112a95760405163bbc5234f60e01b815260040160405180910390fd5b604051630972932760e21b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906325ca4c9c90602401602060405180830381865afa15801561130b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061132f91906132a4565b61134c5760405163f3f6425d60e01b815260040160405180910390fd5b85848114158061135c5750808314155b1561137d576040516001621398b960e31b0319815260040160405180910390fd5b806001600160401b0381111561139557611395613197565b6040519080825280602002602001820160405280156113be578160200160208202803683370190505b5091505f6001600160a01b038a16611490575f5b8281101561148a5760085f8b8b848181106113ef576113ef6131ab565b90506020020160208101906114049190612f4f565b6001600160a01b0316815260208101919091526040015f205484516001600160601b039091169085908390811061143d5761143d6131ab565b60200260200101818152505083818151811061145b5761145b6131ab565b60200260200101515f036114825760405163c97d95cf60e01b815260040160405180910390fd5b6001016113d2565b506115bd565b5f5b828110156115bb578989828181106114ac576114ac6131ab565b90506020020160208101906114c19190612f4f565b6001600160a01b0381165f9081526008602052604090205485519193506001600160601b0316908590839081106114fa576114fa6131ab565b6020908102919091018101919091526001600160a01b038084165f9081526008909252604090912054600160601b90041663024874c78c848b8b86818110611544576115446131ab565b905060200201358a8a8781811061155d5761155d6131ab565b905060200201356040518563ffffffff1660e01b815260040161158394939291906131ec565b5f604051808303815f87803b15801561159a575f80fd5b505af11580156115ac573d5f803e3d5ffd5b50505050806001019050611492565b505b6040513381527fe19ed71156e31b3c9e18ac7ad8d1b79f0a0feb3be18d23dae612e52040aada4b9060200160405180910390a15050979650505050505050565b85806001600160a01b031663478426636040518163ffffffff1660e01b8152600401602060405180830381865afa15801561163a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061165e91906132bf565b6001600160a01b0316336001600160a01b03161461168e576040516282b42960e81b815260040160405180910390fd5b6001600160a01b038681165f818152600860205260409081902054905163e38d136f60e01b81528a841660048201526024810192909252604482018890526001600160701b038716606483015261ffff8087166084840152851660a4830152600160601b90049091169063e38d136f9060c4015f604051808303815f87803b158015611718575f80fd5b505af115801561172a573d5f803e3d5ffd5b5050505050505050505050565b600154600160a81b900460ff16156117625760405163bbc5234f60e01b815260040160405180910390fd5b604051630972932760e21b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906325ca4c9c90602401602060405180830381865afa1580156117c4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117e891906132a4565b6118055760405163f3f6425d60e01b815260040160405180910390fd5b8483811415806118155750808214155b15611836576040516001621398b960e31b0319815260040160405180910390fd5b5f6001600160a01b038916611952575f5b8281101561194c57888882818110611861576118616131ab565b90506020020160208101906118769190612f4f565b6001600160a01b038082165f90815260086020526040902054919350600160601b9091041663f8350ed0838989858181106118b3576118b36131ab565b6040516001600160e01b031960e087901b1681526001600160a01b0390941660048501526020029190910135602483015250604401602060405180830381865afa158015611903573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061192791906132a4565b61194457604051634847234360e01b815260040160405180910390fd5b600101611847565b50611a97565b6001600160a01b0389165f90815260096020526040812054600160c01b90046001600160401b0316815b84811015611a93578a8a82818110611996576119966131ab565b90506020020160208101906119ab9190612f4f565b6001600160a01b038082165f90815260086020526040902054919550600160601b9091041663ba9270ff8d868c8c868181106119e9576119e96131ab565b905060200201358b8b87818110611a0257611a026131ab565b905060200201356040518563ffffffff1660e01b8152600401611a2894939291906131ec565b6020604051808303815f875af1158015611a44573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a689190613240565b925081831115611a8b5760405163df58dcc160e01b815260040160405180910390fd5b60010161197c565b5050505b6040513381527f8ce0bd46ec50cf39f0d0ea8686a686eb226af5796dcda4231b26fb84b5ef12349060200160405180910390a1505050505050505050565b335f90815260056020526040812054819060ff16611b065760405163d044180160e01b815260040160405180910390fd5b6001600160a01b038681165f81815260086020526040908190205490516311a0f5c360e11b81528a841660048201526024810192909252604482018890526064820187905260848201869052600160601b900490911690632341eb869060a40160408051808303815f875af1158015611b81573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ba591906132da565b909890975095505050505050565b6060611bc4888888888888886108a8565b90506001600160a01b03891615611cdc576001600160a01b03808a165f908152600860205260408082205490516349bccc5d60e01b81529192600160601b90910416906349bccc5d90611c299084908e908290670de0b6b3a7640000906004016131ec565b606060405180830381865afa158015611c44573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c689190613215565b509091508790505f5b81811015611cd857611cb2670de0b6b3a764000084868481518110611c9857611c986131ab565b60200260200101515f0151612b0a9092919063ffffffff16565b848281518110611cc457611cc46131ab565b602090810291909101015152600101611c71565b5050505b98975050505050505050565b5f546001600160a01b03163314611d115760405162461bcd60e51b8152600401610d8f90613257565b6001547fa5d9a2200e86d86e433905317aa5604e0dc9bc554c2ed2212160bfd736f0b64b90600160a01b900460ff168015611d495750825b6001805460ff60a01b1916600160a01b83151502179081905560ff600160a81b909104168015611d765750825b6001805460ff60a81b1916600160a81b92151592830217905560408051921515835260208301919091520160405180910390a15050565b6001546001600160a01b03163314611dd857604051636570ecab60e11b815260040160405180910390fd5b5f54622a300090611dfa908290600160a01b90046001600160601b0316613291565b4211611e195760405163036a87d960e21b815260040160405180910390fd5b5f80546001600160a01b0316600160a01b426001600160601b0316021790556001805461ffff60a01b191661010160a01b1781556040805182815260208101929092527fa5d9a2200e86d86e433905317aa5604e0dc9bc554c2ed2212160bfd736f0b64b9101610e94565b83806001600160a01b031663478426636040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ec1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ee591906132bf565b6001600160a01b0316336001600160a01b031614611f15576040516282b42960e81b815260040160405180910390fd5b50604080516060810182526001600160801b0394851681526001600160401b0393841660208083019182529385168284019081526001600160a01b03979097165f908152600990945291909220915182549151955194166001600160c01b031990911617600160801b94831694909402939093176001600160c01b0316600160c01b9290911691909102179055565b83806001600160a01b031663478426636040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fe1573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061200591906132bf565b6001600160a01b0316336001600160a01b031614612035576040516282b42960e81b815260040160405180910390fd5b604051630e75d97360e31b81526001600160a01b0386811660048301526001600160701b038516602483015261ffff841660448301528516906373aecb98906064015f604051808303815f87803b15801561208e575f80fd5b505af11580156120a0573d5f803e3d5ffd5b505050505050505050565b5f806120bc898989898989896108a8565b9050610c6281612b25565b5f805f6120d384612a97565b805191935091505f8190036120fb57604051635b006ad160e01b815260040160405180910390fd5b5f805f805f5b8581101561234e5760075f88838151811061211e5761211e6131ab565b602002602001015181526020019081526020015f205f9054906101000a90046001600160a01b03169450846001600160a01b03166382afd23b888381518110612169576121696131ab565b60200260200101516040518263ffffffff1660e01b815260040161218f91815260200190565b602060405180830381865afa1580156121aa573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121ce91906132a4565b6121e157505f9998505050505050505050565b846001600160a01b031663fc7d8747888381518110612202576122026131ab565b60200260200101516040518263ffffffff1660e01b815260040161222891815260200190565b6040805180830381865afa158015612242573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122669190613313565b90945092505f8190036122a057878181518110612285576122856131ab565b60200260200101516122975783612299565b825b9150612309565b8781815181106122b2576122b26131ab565b6020026020010151156122e2576001600160801b03198281169085161461229757505f9998505050505050505050565b6001600160801b03198281169084161461230557505f9998505050505050505050565b8391505b612314600187613344565b811480156123325750621554d160ea1b6001600160801b0319831614155b1561234657505f9998505050505050505050565b600101612101565b5060019998505050505050505050565b606085806001600160401b0381111561237957612379613197565b6040519080825280602002602001820160405280156123cb57816020015b6123b860405180606001604052805f81526020015f81526020015f81525090565b8152602001906001900390816123975790505b5091505f5b8181101561254b5760085f8a8a848181106123ed576123ed6131ab565b90506020020160208101906124029190612f4f565b6001600160a01b03908116825260208201929092526040015f2054600160601b9004166349bccc5d8b8b8b8581811061243d5761243d6131ab565b90506020020160208101906124529190612f4f565b8a8a86818110612464576124646131ab565b9050602002013589898781811061247d5761247d6131ab565b905060200201356040518563ffffffff1660e01b81526004016124a394939291906131ec565b606060405180830381865afa1580156124be573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124e29190613215565b8584815181106124f4576124f46131ab565b60200260200101515f01868581518110612510576125106131ab565b602002602001015160200187868151811061252d5761252d6131ab565b602090810291909101015160400192909252919052526001016123d0565b5050979650505050505050565b5f80612569898989898989896108a8565b9050865f5b818110156125a857828181518110612588576125886131ab565b60200260200101515f01518461259e9190613291565b935060010161256e565b506001600160a01b038b16156125c5576125c28b846129e9565b92505b505098975050505050505050565b5f546001600160a01b031633146125fc5760405162461bcd60e51b8152600401610d8f90613257565b5f6126065f6128ab565b50905080156126285760405163a79b9c8160e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b03841617905561264c5f6128ab565b5090508061266d57604051638338a51960e01b815260040160405180910390fd5b5050565b335f9081526005602052604090205460ff166126a05760405163d044180160e01b815260040160405180910390fd5b816001600160601b03165f036126c9576040516311b2a5ab60e11b815260040160405180910390fd5b6001600160a01b0381165f9081526004602052604090205460ff161561270257604051639c6fcfa560e01b815260040160405180910390fd5b6001600160a01b038082165f818152600460209081526040808320805460ff19166001179055805180820182526001600160601b03808916825233828501818152878752600890955283862092519451909716600160601b02931692909217909155517f0bb5715f0f217c2fe9a0c877ea87d474380c641102f3440ee2a4c8b9d97909189190a35050565b5f546001600160a01b031633146127b65760405162461bcd60e51b8152600401610d8f90613257565b5f80546001600160a01b0319166001600160a01b0383169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6001600160a01b038083165f908152600860205260408120549091600160601b9091041680612832575f9150506128a5565b604051630f8350ed60e41b81526001600160a01b0385811660048301526024820185905282169063f8350ed090604401602060405180830381865afa15801561287d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128a191906132a4565b9150505b92915050565b5f8060035f9054906101000a90046001600160a01b03166001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa92505050801561291b575060408051601f3d908101601f1916820190925261291891810190613370565b60015b156129725760019650836001148061296257506001600160a01b0388165f90815260096020526040902054600160801b90046001600160401b03166129608442613344565b105b1561296c57600195505b50505050505b915091565b5f805b82518110156129dc57828181518110612995576129956131ab565b6020026020010151602001518382815181106129b3576129b36131ab565b60200260200101515f01516129c891906133bc565b6129d29083613291565b915060010161297a565b506128a5612710826133d3565b6001600160a01b038083165f908152600860205260408082205490516349bccc5d60e01b815291928392600160601b90920416906349bccc5d90612a3f90849088908290670de0b6b3a7640000906004016131ec565b606060405180830381865afa158015612a5a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a7e9190613215565b509091506128a1905083670de0b6b3a764000083612b0a565b604080516001600384169081016020028281019081019093528082528083529091905f5b81811015612b0357600185600260518402011c1669ffffffffffffffffffff86600360518502011c166001830160200282818801528181870152505050600181019050612abb565b5050915091565b5f825f190484118302158202612b1e575f80fd5b5091020490565b5f805b82518110156129dc57828181518110612b4357612b436131ab565b602002602001015160400151838281518110612b6157612b616131ab565b60200260200101515f0151612b7691906133bc565b612b809083613291565b9150600101612b28565b6001600160a01b0381168114612b9e575f80fd5b50565b5f8083601f840112612bb1575f80fd5b5081356001600160401b03811115612bc7575f80fd5b6020830191508360208260051b8501011115612be1575f80fd5b9250929050565b5f805f805f60608688031215612bfc575f80fd5b8535612c0781612b8a565b945060208601356001600160401b0380821115612c22575f80fd5b612c2e89838a01612ba1565b90965094506040880135915080821115612c46575f80fd5b50612c5388828901612ba1565b969995985093965092949392505050565b5f815180845260208085019450602084015f5b83811015612c9757815161ffff1687529582019590820190600101612c77565b509495945050505050565b604081525f612cb46040830185612c64565b8281036020840152612cc68185612c64565b95945050505050565b5f805f805f805f6080888a031215612ce5575f80fd5b8735612cf081612b8a565b965060208801356001600160401b0380821115612d0b575f80fd5b612d178b838c01612ba1565b909850965060408a0135915080821115612d2f575f80fd5b612d3b8b838c01612ba1565b909650945060608a0135915080821115612d53575f80fd5b50612d608a828b01612ba1565b989b979a50959850939692959293505050565b602080825282518282018190525f919060409081850190868401855b82811015612dbe5781518051855286810151878601528501518585015260609093019290850190600101612d8f565b5091979650505050505050565b5f8060208385031215612ddc575f80fd5b82356001600160401b03811115612df1575f80fd5b612dfd85828601612ba1565b90969095509350505050565b602080825282518282018190525f9190848201906040850190845b81811015612e4057835183529284019291840191600101612e24565b50909695505050505050565b5f805f805f805f8060a0898b031215612e63575f80fd5b8835612e6e81612b8a565b97506020890135612e7e81612b8a565b965060408901356001600160401b0380821115612e99575f80fd5b612ea58c838d01612ba1565b909850965060608b0135915080821115612ebd575f80fd5b612ec98c838d01612ba1565b909650945060808b0135915080821115612ee1575f80fd5b50612eee8b828c01612ba1565b999c989b5096995094979396929594505050565b5f805f805f60a08688031215612f16575f80fd5b8535612f2181612b8a565b94506020860135612f3181612b8a565b94979496505050506040830135926060810135926080909101359150565b5f60208284031215612f5f575f80fd5b8135612f6a81612b8a565b9392505050565b5f60208284031215612f81575f80fd5b5035919050565b80356001600160701b0381168114612f9e575f80fd5b919050565b61ffff81168114612b9e575f80fd5b5f805f805f8060c08789031215612fc7575f80fd5b8635612fd281612b8a565b95506020870135612fe281612b8a565b945060408701359350612ff760608801612f88565b9250608087013561300781612fa3565b915060a087013561301781612fa3565b809150509295509295509295565b8015158114612b9e575f80fd5b5f8060408385031215613043575f80fd5b823561304e81613025565b9150602083013561305e81613025565b809150509250929050565b80356001600160401b0381168114612f9e575f80fd5b5f805f8060808587031215613092575f80fd5b843561309d81612b8a565b935060208501356001600160801b03811681146130b8575f80fd5b92506130c660408601613069565b91506130d460608601613069565b905092959194509250565b5f805f80608085870312156130f2575f80fd5b84356130fd81612b8a565b9350602085013561310d81612b8a565b925061311b60408601612f88565b9150606085013561312b81612fa3565b939692955090935050565b5f8060408385031215613147575f80fd5b82356001600160601b038116811461315d575f80fd5b9150602083013561305e81612b8a565b5f806040838503121561317e575f80fd5b823561318981612b8a565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f80604083850312156131d0575f80fd5b82516131db81612fa3565b602084015190925061305e81612fa3565b6001600160a01b0394851681529290931660208301526040820152606081019190915260800190565b5f805f60608486031215613227575f80fd5b8351925060208401519150604084015190509250925092565b5f60208284031215613250575f80fd5b5051919050565b6020808252600c908201526b15539055551213d49256915160a21b604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b808201808211156128a5576128a561327d565b5f602082840312156132b4575f80fd5b8151612f6a81613025565b5f602082840312156132cf575f80fd5b8151612f6a81612b8a565b5f80604083850312156132eb575f80fd5b505080516020909101519092909150565b80516001600160801b031981168114612f9e575f80fd5b5f8060408385031215613324575f80fd5b61332d836132fc565b915061333b602084016132fc565b90509250929050565b818103818111156128a5576128a561327d565b805169ffffffffffffffffffff81168114612f9e575f80fd5b5f805f805f60a08688031215613384575f80fd5b61338d86613357565b94506020860151935060408601519250606086015191506133b060808701613357565b90509295509295909350565b80820281158282048414176128a5576128a561327d565b5f826133ed57634e487b7160e01b5f52601260045260245ffd5b50049056fea2646970667358221220ad6cc979a3e72d88c0b9419fdc57702381823bdda7e664cc19b950e6cb9d807964736f6c63430008160033000000000000000000000000da14fdd72345c4d2511357214c5b89a919768e59000000000000000000000000bcf85224fc0756b9fa45aa7892530b47e10b6433