0 txs
1 call
constructor
constructor()
functions
accessControlManager
viewfunction accessControlManager() view returns (address)
assetsDirectTransfer
viewfunction assetsDirectTransfer(address) view returns (bool)
balanceOf
viewfunction balanceOf(address tokenAddress) view returns (uint256 tokenBalance)
baseAsset
viewfunction baseAsset() view returns (address)
conversionConfigurations
viewfunction conversionConfigurations(address, address) view returns (uint256 incentive, uint8 conversionAccess)
conversionPaused
viewfunction conversionPaused() view returns (bool)
converterNetwork
viewfunction converterNetwork() view returns (address)
destinationAddress
viewfunction destinationAddress() view returns (address)
getAmountIn
viewfunction getAmountIn(uint256 amountOutMantissa, address tokenAddressIn, address tokenAddressOut) view returns (uint256 amountConvertedMantissa, uint256 amountInMantissa)
getAmountOut
viewfunction getAmountOut(uint256 amountInMantissa, address tokenAddressIn, address tokenAddressOut) view returns (uint256 amountConvertedMantissa, uint256 amountOutMantissa)
MAX_INCENTIVE
viewfunction MAX_INCENTIVE() view returns (uint256)
minAmountToConvert
viewfunction minAmountToConvert() view returns (uint256)
owner
viewfunction owner() view returns (address)
pendingOwner
viewfunction pendingOwner() view returns (address)
priceOracle
viewfunction priceOracle() view returns (address)
acceptOwnership
nonpayablefunction acceptOwnership()
convertExactTokens
nonpayablefunction convertExactTokens(uint256 amountInMantissa, uint256 amountOutMinMantissa, address tokenAddressIn, address tokenAddressOut, address to) returns (uint256 actualAmountIn, uint256 actualAmountOut)
convertExactTokensSupportingFeeOnTransferTokens
nonpayablefunction convertExactTokensSupportingFeeOnTransferTokens(uint256 amountInMantissa, uint256 amountOutMinMantissa, address tokenAddressIn, address tokenAddressOut, address to) returns (uint256 actualAmountIn, uint256 actualAmountOut)
convertForExactTokens
nonpayablefunction convertForExactTokens(uint256 amountInMaxMantissa, uint256 amountOutMantissa, address tokenAddressIn, address tokenAddressOut, address to) returns (uint256 actualAmountIn, uint256 actualAmountOut)
convertForExactTokensSupportingFeeOnTransferTokens
nonpayablefunction convertForExactTokensSupportingFeeOnTransferTokens(uint256 amountInMaxMantissa, uint256 amountOutMantissa, address tokenAddressIn, address tokenAddressOut, address to) returns (uint256 actualAmountIn, uint256 actualAmountOut)
getUpdatedAmountIn
nonpayablefunction getUpdatedAmountIn(uint256 amountOutMantissa, address tokenAddressIn, address tokenAddressOut) returns (uint256 amountConvertedMantissa, uint256 amountInMantissa)
getUpdatedAmountOut
nonpayablefunction getUpdatedAmountOut(uint256 amountInMantissa, address tokenAddressIn, address tokenAddressOut) returns (uint256 amountConvertedMantissa, uint256 amountOutMantissa)
initialize
nonpayablefunction initialize(address accessControlManager_, address priceOracle_, address destinationAddress_, address baseAsset_, uint256 minAmountToConvert_)
pauseConversion
nonpayablefunction pauseConversion()
renounceOwnership
nonpayablefunction renounceOwnership()
resumeConversion
nonpayablefunction resumeConversion()
setAccessControlManager
nonpayablefunction setAccessControlManager(address accessControlManager_)
setAssetsDirectTransfer
nonpayablefunction setAssetsDirectTransfer(address[] assets, bool[] values)
setBaseAsset
nonpayablefunction setBaseAsset(address baseAsset_)
setConversionConfig
nonpayablefunction setConversionConfig(address tokenAddressIn, address tokenAddressOut, tuple conversionConfig)
setConversionConfigs
nonpayablefunction setConversionConfigs(address tokenAddressIn, address[] tokenAddressesOut, tuple[] conversionConfigs)
setConverterNetwork
nonpayablefunction setConverterNetwork(address converterNetwork_)
setDestination
nonpayablefunction setDestination(address destinationAddress_)
setMinAmountToConvert
nonpayablefunction setMinAmountToConvert(uint256 minAmountToConvert_)
setPriceOracle
nonpayablefunction setPriceOracle(address priceOracle_)
sweepToken
nonpayablefunction sweepToken(address tokenAddress, address to, uint256 amount)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
updateAssetsState
nonpayablefunction updateAssetsState(address comptroller, address asset)
events
AssetsDirectTransferUpdated
event AssetsDirectTransferUpdated(address indexed receiver, address indexed asset, bool value)
AssetTransferredToDestination
event AssetTransferredToDestination(address indexed receiver, address indexed comptroller, address indexed asset, uint256 amount)
BaseAssetUpdated
event BaseAssetUpdated(address indexed oldBaseAsset, address indexed newBaseAsset)
ConversionConfigUpdated
event ConversionConfigUpdated(address indexed tokenAddressIn, address indexed tokenAddressOut, uint256 oldIncentive, uint256 newIncentive, uint8 oldAccess, uint8 newAccess)
ConversionPaused
event ConversionPaused(address indexed sender)
ConversionResumed
event ConversionResumed(address indexed sender)
ConvertedExactTokens
event ConvertedExactTokens(address indexed sender, address indexed receiver, address tokenAddressIn, address indexed tokenAddressOut, uint256 amountIn, uint256 amountOut)
ConvertedExactTokensSupportingFeeOnTransferTokens
event ConvertedExactTokensSupportingFeeOnTransferTokens(address indexed sender, address indexed receiver, address tokenAddressIn, address indexed tokenAddressOut, uint256 amountIn, uint256 amountOut)
ConvertedForExactTokens
event ConvertedForExactTokens(address indexed sender, address indexed receiver, address tokenAddressIn, address indexed tokenAddressOut, uint256 amountIn, uint256 amountOut)
ConvertedForExactTokensSupportingFeeOnTransferTokens
event ConvertedForExactTokensSupportingFeeOnTransferTokens(address indexed sender, address indexed receiver, address tokenAddressIn, address indexed tokenAddressOut, uint256 amountIn, uint256 amountOut)
ConverterNetworkAddressUpdated
event ConverterNetworkAddressUpdated(address indexed oldConverterNetwork, address indexed converterNetwork)
DestinationAddressUpdated
event DestinationAddressUpdated(address indexed oldDestinationAddress, address indexed destinationAddress)
Initialized
event Initialized(uint8 version)
MinAmountToConvertUpdated
event MinAmountToConvertUpdated(uint256 oldMinAmountToConvert, uint256 newMinAmountToConvert)
NewAccessControlManager
event NewAccessControlManager(address oldAccessControlManager, address newAccessControlManager)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
OwnershipTransferStarted
event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner)
PriceOracleUpdated
event PriceOracleUpdated(address indexed oldPriceOracle, address indexed priceOracle)
SweepToken
event SweepToken(address indexed token, address indexed to, uint256 amount)
errors
AmountInHigherThanMax
error AmountInHigherThanMax(uint256 amountInMantissa, uint256 amountInMaxMantissa)
AmountInMismatched
error AmountInMismatched()
AmountOutLowerThanMinRequired
error AmountOutLowerThanMinRequired(uint256 amountOutMantissa, uint256 amountOutMinMantissa)
AmountOutMismatched
error AmountOutMismatched()
ConversionConfigNotEnabled
error ConversionConfigNotEnabled()
ConversionEnabledOnlyForPrivateConversions
error ConversionEnabledOnlyForPrivateConversions()
ConversionTokensActive
error ConversionTokensActive()
ConversionTokensPaused
error ConversionTokensPaused()
DeflationaryTokenNotSupported
error DeflationaryTokenNotSupported()
DirectTransferBaseAssetNotAllowed
error DirectTransferBaseAssetNotAllowed()
IncentiveTooHigh
error IncentiveTooHigh(uint256 incentive, uint256 maxIncentive)
InputLengthMisMatch
error InputLengthMisMatch()
InsufficientInputAmount
error InsufficientInputAmount()
InsufficientOutputAmount
error InsufficientOutputAmount()
InsufficientPoolLiquidity
error InsufficientPoolLiquidity()
InvalidConverterNetwork
error InvalidConverterNetwork()
InvalidMinimumAmountToConvert
error InvalidMinimumAmountToConvert()
InvalidToAddress
error InvalidToAddress()
InvalidTokenConfigAddresses
error InvalidTokenConfigAddresses()
NonZeroIncentiveForPrivateConversion
error NonZeroIncentiveForPrivateConversion()
SameAssetDirectTransferNotAllowed
error SameAssetDirectTransferNotAllowed(address asset, bool value)
SameBaseAssetNotAllowed
error SameBaseAssetNotAllowed()
Unauthorized
error Unauthorized(address sender, address calledContract, string methodSignature)
ZeroAddressNotAllowed
error ZeroAddressNotAllowed()
ZeroValueNotAllowed
error ZeroValueNotAllowed()
creation bytecode
0x6080604052348015600f57600080fd5b506016601a565b60d7565b600054610100900460ff161560855760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161460d5576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6146be806100e66000396000f3fe608060405234801561001057600080fd5b50600436106102925760003560e01c80638da5cb5b11610160578063cd2960b7116100d8578063f04c31871161008c578063f2fde38b11610071578063f2fde38b146105a0578063f7013ef6146105b3578063fe3da984146105c657600080fd5b8063f04c31871461057a578063f0dc7e9d1461058d57600080fd5b8063d1451e28116100bd578063d1451e2814610547578063e2ff7ea21461055a578063e30c39781461056957600080fd5b8063cd2960b71461050f578063cdf456e11461053357600080fd5b8063b4a0bdf31161012f578063bc368b0411610114578063bc368b04146104e1578063c0654646146104e9578063ca325469146104fc57600080fd5b8063b4a0bdf3146104bd578063b6828c57146104ce57600080fd5b80638da5cb5b1461044357806390fa7b5414610454578063aac59a7514610467578063b491ddf71461047a57600080fd5b8063530e784f1161020e5780636f1a30a8116101c2578063715018a6116101a7578063715018a614610420578063746460a91461042857806379ba50971461043b57600080fd5b80636f1a30a8146103ec57806370a08231146103ff57600080fd5b80635e1e6325116101f35780635e1e6325146103b357806364aff9ec146103c65780636daa463b146103d957600080fd5b8063530e784f1461039857806358b904df146103ab57600080fd5b80630e32cb86116102655780633606b26c1161024a5780633606b26c1461035f578063439727a51461037257806352e21a181461038557600080fd5b80630e32cb86146103395780632630c12f1461034c57600080fd5b806301e201781461029757806307aa239e146102c75780630a0a05e6146102fc5780630a9a2b7214610311575b600080fd5b60ff546102aa906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b60fe546102ec9074010000000000000000000000000000000000000000900460ff1681565b60405190151581526020016102be565b61030f61030a366004613db9565b6105cf565b005b61032461031f366004613dd6565b6105e3565b604080519283526020830191909152016102be565b61030f610347366004613db9565b610691565b60fc546102aa906001600160a01b031681565b61030f61036d366004613db9565b6106a2565b610324610380366004613e18565b6106b3565b61030f610393366004613db9565b6107f1565b61030f6103a6366004613db9565b610802565b61030f610813565b6103246103c1366004613dd6565b6108f9565b61030f6103d4366004613e77565b6109c7565b6103246103e7366004613dd6565b610a64565b6103246103fa366004613dd6565b610b6d565b61041261040d366004613db9565b610c6c565b6040519081526020016102be565b61030f610cf9565b61030f610436366004613eb8565b610d0d565b61030f610d54565b6033546001600160a01b03166102aa565b610324610462366004613e18565b610de4565b61030f610475366004613ed1565b610ece565b6104af610488366004613ed1565b60fd6020908152600092835260408084209091529082529020805460019091015460ff1682565b6040516102be929190613f74565b6097546001600160a01b03166102aa565b6103246104dc366004613e18565b610f04565b61030f610fee565b61030f6104f7366004613fd4565b6110a0565b60fe546102aa906001600160a01b031681565b6102ec61051d366004613db9565b61012e6020526000908152604090205460ff1681565b61012d546102aa906001600160a01b031681565b61030f610555366004614084565b61113e565b6104126706f05b59d3b2000081565b6065546001600160a01b03166102aa565b610324610588366004613e18565b611171565b61030f61059b3660046140f0565b611294565b61030f6105ae366004613db9565b611632565b61030f6105c1366004614161565b6116bb565b61041260fb5481565b6105d7611845565b6105e08161189f565b50565b60008060026001600160a01b03808616600090815260fd602090815260408083209388168352929052206001015460ff16600381111561062557610625613f0a565b0361065c576040517f03410cd100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061066784610c6c565b905085811015610675578095505b85925061068386868661191c565b508092505050935093915050565b610699611845565b6105e081611c82565b6106aa611845565b6105e081611d77565b6000808285856106c1611e3e565b6106ca83611e93565b816001600160a01b0316836001600160a01b031614806106fb5750806001600160a01b0316836001600160a01b0316145b15610732576040517f8aa3a72f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61073a611ed3565b6107478a8a8a8a8a611f2c565b9095509350898514610785576040517fc214279600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516001600160a01b038a81168252602082018890529181018690528189169188169033907f795a235be939acb902ac69562805f86e1341a9b019c351b996e2aa2dfc34c67c906060015b60405180910390a46107e4600160c955565b5050509550959350505050565b6107f9611845565b6105e081611fb3565b61080a611845565b6105e081612030565b6108516040518060400160405280601281526020017f726573756d65436f6e76657273696f6e282900000000000000000000000000008152506120ad565b60fe5474010000000000000000000000000000000000000000900460ff166108a4576040517e6d8dbb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60fe80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16905560405133907f89b79206f08dadd78502cff5075d2b094fa0abea0b063cfafe4475e2a380c51f90600090a2565b60008060026001600160a01b03808616600090815260fd602090815260408083209388168352929052206001015460ff16600381111561093b5761093b613f0a565b03610972576040517f03410cd100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8491506000610982868686612179565b9092509050600061099285610c6c565b9050828110156109bd576109b76109b1670de0b6b3a7640000836141f4565b83612486565b93508092505b5050935093915050565b6109cf611845565b6109d7611ed3565b6109e083611e93565b6109e982611e93565b6109f2816124b2565b82610a076001600160a01b03821684846124ec565b826001600160a01b0316846001600160a01b03167f6d25be279134f4ecaa4770aff0c3d916d9e7c5ef37b65ed95dbdba411f5d54d584604051610a4c91815260200190565b60405180910390a350610a5f600160c955565b505050565b60fc546040517fb62cad690000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152600092839291169063b62cad6990602401600060405180830381600087803b158015610ac857600080fd5b505af1158015610adc573d6000803e3d6000fd5b505060fc546040517fb62cad690000000000000000000000000000000000000000000000000000000081526001600160a01b038781166004830152909116925063b62cad699150602401600060405180830381600087803b158015610b4057600080fd5b505af1158015610b54573d6000803e3d6000fd5b50505050610b63858585612179565b5094959350505050565b60fc546040517fb62cad690000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152600092839291169063b62cad6990602401600060405180830381600087803b158015610bd157600080fd5b505af1158015610be5573d6000803e3d6000fd5b505060fc546040517fb62cad690000000000000000000000000000000000000000000000000000000081526001600160a01b038781166004830152909116925063b62cad699150602401600060405180830381600087803b158015610c4957600080fd5b505af1158015610c5d573d6000803e3d6000fd5b50505050610b6385858561191c565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009082906001600160a01b038216906370a0823190602401602060405180830381865afa158015610cce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf2919061420b565b9392505050565b610d01611845565b610d0b60006125b3565b565b610d4b6040518060400160405280601e81526020017f7365744d696e416d6f756e74546f436f6e766572742875696e743235362900008152506120ad565b6105e0816125e4565b60655433906001600160a01b03168114610ddb5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f74207468652060448201527f6e6577206f776e6572000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6105e0816125b3565b600080828585610df2611e3e565b610dfb83611e93565b816001600160a01b0316836001600160a01b03161480610e2c5750806001600160a01b0316836001600160a01b0316145b15610e63576040517f8aa3a72f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e6b611ed3565b610e788a8a8a8a8a611f2c565b9095509350604080516001600160a01b038a81168252602082018890529181018690528189169188169033907f93b7ba2a2b0e36320375853d7466af5685c07567804b871b4fdfd31e3bb77154906060016107d2565b610ed6611ed3565b6000610ee2838361262e565b90508015610ef557610ef5838383612767565b50610f00600160c955565b5050565b600080828585610f12611e3e565b610f1b83611e93565b816001600160a01b0316836001600160a01b03161480610f4c5750806001600160a01b0316836001600160a01b0316145b15610f83576040517f8aa3a72f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f8b611ed3565b610f988a8a8a8a8a612bc4565b9095509350604080516001600160a01b038a81168252602082018890529181018690528189169188169033907f9b7dc1d7d2974d015b4fc39889a09f3a3923add808f5863158f3162d997d4e82906060016107d2565b61102c6040518060400160405280601181526020017f7061757365436f6e76657273696f6e28290000000000000000000000000000008152506120ad565b611034611e3e565b60fe80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000017905560405133907f490bc639fd0d96f19c8adf77bc98d17fbefdee2e1e1864d21f041360d0ee065a90600090a2565b828181146110da576040517f4d5590f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156111355761112d878787848181106110fb576110fb614224565b90506020020160208101906111109190613db9565b86868581811061112257611122614224565b905060400201611294565b6001016110dd565b50505050505050565b61115f604051806060016040528060298152602001614660602991396120ad565b61116b84848484612c56565b50505050565b60008082858561117f611e3e565b61118883611e93565b816001600160a01b0316836001600160a01b031614806111b95750806001600160a01b0316836001600160a01b0316145b156111f0576040517f8aa3a72f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111f8611ed3565b6112058a8a8a8a8a612f4e565b9095509350888414611243576040517fa8dc653c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516001600160a01b038a81168252602082018890529181018690528189169188169033907fcb4ea7de8d069b0f443b792cba6c6df5096508951bbc75c04ac42c9251efe076906060016107d2565b6112b560405180606001604052806035815260200161462b603591396120ad565b6112be83611e93565b6112c782611e93565b6706f05b59d3b200008135111561131b576040517f9770caee000000000000000000000000000000000000000000000000000000008152813560048201526706f05b59d3b200006024820152604401610dd2565b816001600160a01b0316836001600160a01b0316148061134a575061012d546001600160a01b03848116911614155b80611392575060006001600160a01b03808416600090815260fd602090815260408083209388168352929052206001015460ff16600381111561138f5761138f613f0a565b14155b156113c9576040517feebb5ac600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60026113db6040830160208401614253565b60038111156113ec576113ec613f0a565b1480156113f95750803515155b15611430576040517fd0d4aabe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60026114426040830160208401614253565b600381111561145357611453613f0a565b148061147f5750600161146c6040830160208401614253565b600381111561147d5761147d613f0a565b145b8015611494575060ff546001600160a01b0316155b156114cb576040517fe7c2c99400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03808416600081815260fd602090815260408083209487168084529482529182902080546001820154919594937f39fbfdd5da133303ed31b1b65e30a0ddf7a9236573368c66c859dceccc1dd12a93919288359260ff9091169161153b91908a01908a01614253565b60405161154b9493929190614274565b60405180910390a360006115656040840160208501614253565b600381111561157657611576613f0a565b036115d3576001600160a01b03808516600090815260fd60209081526040808320938716835292905290812090815560010180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905561116b565b813581556115e76040830160208401614253565b6001808301805490917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009091169083600381111561162757611627613f0a565b021790555050505050565b61163a611845565b606580546001600160a01b0383167fffffffffffffffffffffffff000000000000000000000000000000000000000090911681179091556116836033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b600054610100900460ff16158080156116db5750600054600160ff909116105b806116f55750303b1580156116f5575060005460ff166001145b6117675760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610dd2565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156117c557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6117ce83611d77565b6117da8686868561300b565b801561183d57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6033546001600160a01b03163314610d0b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610dd2565b6118a881611e93565b60fe546040516001600160a01b038084169216907f9be3097b5c8b276786be52a244ee90d66efd34805d9eb16f168fb2b4aaae9a2b90600090a360fe80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60008084600003611959576040517f42301c2300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03808516600090815260fd6020908152604080832093871683529281528282208351808501909452805484526001810154929392909183019060ff1660038111156119ad576119ad613f0a565b60038111156119be576119be613f0a565b90525090506000816020015160038111156119db576119db613f0a565b03611a12576040517f618ce59700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60fc546040517f41976e090000000000000000000000000000000000000000000000000000000081526001600160a01b03878116600483015260009216906341976e0990602401602060405180830381865afa158015611a76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a9a919061420b565b60fc546040517f41976e090000000000000000000000000000000000000000000000000000000081526001600160a01b038881166004830152929350600092909116906341976e0990602401602060405180830381865afa158015611b03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b27919061420b565b835160ff54919250906000906001600160a01b031615801590611bca575060ff546040517f6c059fb10000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0390911690636c059fb190602401602060405180830381865afa158015611ba6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bca91906142aa565b90508015611bd757600091505b6000611beb83670de0b6b3a76400006142c7565b90508115611c2b57611bfd81866141f4565b670de0b6b3a7640000611c10868e6141f4565b611c1a91906141f4565b611c2491906142da565b9750611c5d565b611c5a670de0b6b3a7640000611c41868e6141f4565b611c4b91906141f4565b611c5583886141f4565b612486565b97505b83611c6882876141f4565b611c7291906142da565b9650505050505050935093915050565b6001600160a01b038116611cfe5760405162461bcd60e51b815260206004820152602560248201527f696e76616c696420616365737320636f6e74726f6c206d616e6167657220616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610dd2565b609780546001600160a01b038381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604080519190921680825260208201939093527f66fd58e82f7b31a2a5c30e0888f3093efe4e111b00cd2b0c31fe014601293aa0910160405180910390a15050565b611d8081611e93565b61012d546001600160a01b03808316911603611dc8576040517f29db101000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61012d546040516001600160a01b038084169216907f4fe44995ca2482562846e3c0413d9bd6147e9ce1881c66a8765e8542fef99f4290600090a361012d80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60fe5474010000000000000000000000000000000000000000900460ff1615610d0b576040517f952bcf7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0381166105e0576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260c95403611f255760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610dd2565b600260c955565b600080611f3985856130a4565b611f4385886131c4565b9150611f50828686610a64565b91505085811015611f97576040517f228f8c110000000000000000000000000000000000000000000000000000000081526004810182905260248101879052604401610dd2565b611fa284848361330f565b9550959350505050565b600160c955565b611fbc81611e93565b60ff546040516001600160a01b038084169216907f50f1a16bf24734355b14ff800d132cc0a934808b8621d5623b41bc67f204881790600090a360ff80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61203981611e93565b60fc546040516001600160a01b038084169216907f56b5f80d8cac1479698aa7d01605fd6111e90b15fc4d2b377417f46034876cbd90600090a360fc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6097546040517f18c5e8ab0000000000000000000000000000000000000000000000000000000081526000916001600160a01b0316906318c5e8ab906120f99033908690600401614383565b602060405180830381865afa158015612116573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061213a91906142aa565b905080610f00573330836040517f4a3fa293000000000000000000000000000000000000000000000000000000008152600401610dd2939291906143a5565b600080846000036121b6576040517f098fb56100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03808516600090815260fd6020908152604080832093871683529281528282208351808501909452805484526001810154929392909183019060ff16600381111561220a5761220a613f0a565b600381111561221b5761221b613f0a565b905250905060008160200151600381111561223857612238613f0a565b0361226f576040517f618ce59700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60fc546040517f41976e090000000000000000000000000000000000000000000000000000000081526001600160a01b03878116600483015260009216906341976e0990602401602060405180830381865afa1580156122d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122f7919061420b565b60fc546040517f41976e090000000000000000000000000000000000000000000000000000000081526001600160a01b038881166004830152929350600092909116906341976e0990602401602060405180830381865afa158015612360573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612384919061420b565b835160ff54919250906001600160a01b031615801590612424575060ff546040517f6c059fb10000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0390911690636c059fb190602401602060405180830381865afa158015612400573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061242491906142aa565b1561242d575060005b600061244182670de0b6b3a76400006142c7565b90508261244e82866141f4565b61245891906142da565b9550670de0b6b3a764000061246d878c6141f4565b61247791906142da565b96505050505050935093915050565b600081600161249582866142c7565b61249f91906143d1565b6124a991906142da565b90505b92915050565b806000036105e0576040517f9cf8540c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040516001600160a01b038316602482015260448101829052610a5f9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613372565b606580547fffffffffffffffffffffffff00000000000000000000000000000000000000001690556105e08161345a565b6125ed816124b2565b60fb5460408051918252602082018390527fada67d0d38fa20c8ae6a5c17cb9d60b0fe7f2d4e4f27ac9ee55e54ac88de9d8d910160405180910390a160fb55565b6040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600090829082906001600160a01b038316906370a0823190602401602060405180830381865afa158015612692573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126b6919061420b565b61012d549093508391506001600160a01b03858116911614806126f257506001600160a01b038416600090815261012e602052604090205460ff165b1561275f5760fe5460009350612715906001600160a01b038481169116836124ec565b60fe546040518281526001600160a01b0386811692888216929116907fadc20ad416881f76b4304665c35f5be8592297bcdfe4f0bb087b9d254222af559060200160405180910390a45b505092915050565b600061277c61012d546001600160a01b031690565b60fe5460ff549192506001600160a01b03908116916000911615612bb75760ff546040517f4e9f8f390000000000000000000000000000000000000000000000000000000081526001600160a01b03878116600483015285811660248301526000928392911690634e9f8f39906044016000604051808303816000875af115801561280b573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261285191908101906144f5565b8151919350915060005b81811015612bb25782818151811061287557612875614224565b602002602001015160000315612bb257600084828151811061289957612899614224565b60200260200101516001600160a01b0316636f1a30a88584815181106128c1576128c1614224565b60200260200101518c8b6040518463ffffffff1660e01b8152600401612903939291909283526001600160a01b03918216602084015216604082015260600190565b60408051808303816000875af1158015612921573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061294591906145ba565b915050888111156129535750875b61295d818b6134c4565b6129675750612bb2565b6040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b038881166004830152600091908a16906370a0823190602401602060405180830381865afa1580156129ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129ee919061420b565b9050612a27868481518110612a0557612a05614224565b6020026020010151838d6001600160a01b03166135fc9092919063ffffffff16565b858381518110612a3957612a39614224565b60209081029190910101516040517f439727a500000000000000000000000000000000000000000000000000000000815260048101849052600060248201526001600160a01b038d811660448301528b811660648301528a811660848301529091169063439727a59060a40160408051808303816000875af1158015612ac3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ae791906145ba565b50506040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b038981166004830152600091908b16906370a0823190602401602060405180830381865afa158015612b4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b70919061420b565b9050612b7c838c6143d1565b9a50612b8882826143d1565b612b9290896142c7565b97508a600003612ba457505050612bb2565b83600101935050505061285b565b505050505b61183d86848388886136d2565b600080612bd185856130a4565b6000612bde878787610b6d565b91505087811115612c25576040517f71b5f0c10000000000000000000000000000000000000000000000000000000081526004810182905260248101899052604401610dd2565b612c2f86826131c4565b9250612c3c838787610a64565b9250612c4b905085858461330f565b509550959350505050565b82818114612c90576040517f4d5590f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b8181101561183d5761012d546001600160a01b0316868683818110612cba57612cba614224565b9050602002016020810190612ccf9190613db9565b6001600160a01b031603612d0f576040517f7b3db9df00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b838382818110612d2157612d21614224565b9050602002016020810190612d3691906145de565b151561012e6000888885818110612d4f57612d4f614224565b9050602002016020810190612d649190613db9565b6001600160a01b0316815260208101919091526040016000205460ff16151503612e1b57858582818110612d9a57612d9a614224565b9050602002016020810190612daf9190613db9565b848483818110612dc157612dc1614224565b9050602002016020810190612dd691906145de565b6040517fb7d7b07b0000000000000000000000000000000000000000000000000000000081526001600160a01b03909216600483015215156024820152604401610dd2565b838382818110612e2d57612e2d614224565b9050602002016020810190612e4291906145de565b61012e6000888885818110612e5957612e59614224565b9050602002016020810190612e6e9190613db9565b6001600160a01b03168152602081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055858582818110612ec657612ec6614224565b9050602002016020810190612edb9190613db9565b60fe546001600160a01b0391821691167ffaf87441caeefee3e3093a251df3fad79b58529016ff418f84baffa3a10b4199868685818110612f1e57612f1e614224565b9050602002016020810190612f3391906145de565b604051901515815260200160405180910390a3600101612c93565b600080612f5b85856130a4565b6000612f68878787610b6d565b915050612f7586826131c4565b9250808314612fb0576040517f0c5c1c2000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b87831115612ff4576040517f71b5f0c10000000000000000000000000000000000000000000000000000000081526004810182905260248101899052604401610dd2565b612fff85858961330f565b50909694955050505050565b600054610100900460ff166130885760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610dd2565b61309184613728565b6130996137b6565b61116b83838361383b565b60ff546000906001600160a01b031615801590613141575060ff546040517f6c059fb10000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0390911690636c059fb190602401602060405180830381865afa15801561311d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061314191906142aa565b90508015801561318d575060026001600160a01b03808516600090815260fd602090815260408083209387168352929052206001015460ff16600381111561318b5761318b613f0a565b145b15610a5f576040517f03410cd100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60fe546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600091849183918316906370a0823190602401602060405180830381865afa15801561322d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613251919061420b565b60fe54909150613270906001600160a01b038481169133911687613900565b60fe546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526000918416906370a0823190602401602060405180830381865afa1580156132d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132f9919061420b565b905061330582826143d1565b9695505050505050565b600061331a84610c6c565b905081811015613356576040517f6bb2792900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8361336b6001600160a01b03821685856124ec565b5050505050565b60006133c7826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166139519092919063ffffffff16565b90508051600014806133e85750808060200190518101906133e891906142aa565b610a5f5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610dd2565b603380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60fc546040517fb62cad690000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092169063b62cad6990602401600060405180830381600087803b15801561352557600080fd5b505af1158015613539573d6000803e3d6000fd5b505060fc546040517f41976e090000000000000000000000000000000000000000000000000000000081526001600160a01b03868116600483015260009450670de0b6b3a76400009350879216906341976e0990602401602060405180830381865afa1580156135ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135d1919061420b565b6135db91906141f4565b6135e591906142da565b905060fb5481106135f557600191505b5092915050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b30000000000000000000000000000000000000000000000000000000017905261367b8482613968565b61116b576040516001600160a01b0384166024820152600060448201526136c89085907f095ea7b30000000000000000000000000000000000000000000000000000000090606401612531565b61116b8482613372565b821561336b5760fe546040518481526001600160a01b0386811692888216929116907fadc20ad416881f76b4304665c35f5be8592297bcdfe4f0bb087b9d254222af559060200160405180910390a45050505050565b600054610100900460ff166137a55760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610dd2565b6137ad613a0f565b6105e081613a94565b600054610100900460ff166138335760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610dd2565b610d0b613b11565b600054610100900460ff166138b85760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610dd2565b6138c183612030565b6138ca8261189f565b6138d3816125e4565b505060fe80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16905550565b6040516001600160a01b038085166024830152831660448201526064810182905261116b9085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401612531565b60606139608484600085613b8e565b949350505050565b6000806000846001600160a01b03168460405161398591906145fb565b6000604051808303816000865af19150503d80600081146139c2576040519150601f19603f3d011682016040523d82523d6000602084013e6139c7565b606091505b50915091508180156139f15750805115806139f15750808060200190518101906139f191906142aa565b8015613a0657506001600160a01b0385163b15155b95945050505050565b600054610100900460ff16613a8c5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610dd2565b610d0b613c80565b600054610100900460ff166106995760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610dd2565b600054610100900460ff16611fac5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610dd2565b606082471015613c065760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610dd2565b600080866001600160a01b03168587604051613c2291906145fb565b60006040518083038185875af1925050503d8060008114613c5f576040519150601f19603f3d011682016040523d82523d6000602084013e613c64565b606091505b5091509150613c7587838387613d06565b979650505050505050565b600054610100900460ff16613cfd5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610dd2565b610d0b336125b3565b60608315613d75578251600003613d6e576001600160a01b0385163b613d6e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610dd2565b5081613960565b6139608383815115613d8a5781518083602001fd5b8060405162461bcd60e51b8152600401610dd29190614617565b6001600160a01b03811681146105e057600080fd5b600060208284031215613dcb57600080fd5b8135610cf281613da4565b600080600060608486031215613deb57600080fd5b833592506020840135613dfd81613da4565b91506040840135613e0d81613da4565b809150509250925092565b600080600080600060a08688031215613e3057600080fd5b85359450602086013593506040860135613e4981613da4565b92506060860135613e5981613da4565b91506080860135613e6981613da4565b809150509295509295909350565b600080600060608486031215613e8c57600080fd5b8335613e9781613da4565b92506020840135613ea781613da4565b929592945050506040919091013590565b600060208284031215613eca57600080fd5b5035919050565b60008060408385031215613ee457600080fd5b8235613eef81613da4565b91506020830135613eff81613da4565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60048110613f70577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b82815260408101610cf26020830184613f39565b60008083601f840112613f9a57600080fd5b50813567ffffffffffffffff811115613fb257600080fd5b6020830191508360208260051b8501011115613fcd57600080fd5b9250929050565b600080600080600060608688031215613fec57600080fd5b8535613ff781613da4565b9450602086013567ffffffffffffffff8082111561401457600080fd5b61402089838a01613f88565b9096509450604088013591508082111561403957600080fd5b818801915088601f83011261404d57600080fd5b81358181111561405c57600080fd5b8960208260061b850101111561407157600080fd5b9699959850939650602001949392505050565b6000806000806040858703121561409a57600080fd5b843567ffffffffffffffff808211156140b257600080fd5b6140be88838901613f88565b909650945060208701359150808211156140d757600080fd5b506140e487828801613f88565b95989497509550505050565b6000806000838503608081121561410657600080fd5b843561411181613da4565b9350602085013561412181613da4565b925060407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08201121561415357600080fd5b506040840190509250925092565b600080600080600060a0868803121561417957600080fd5b853561418481613da4565b9450602086013561419481613da4565b935060408601356141a481613da4565b925060608601356141b481613da4565b949793965091946080013592915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820281158282048414176124ac576124ac6141c5565b60006020828403121561421d57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561426557600080fd5b813560048110610cf257600080fd5b848152602081018490526080810161428f6040830185613f39565b613a066060830184613f39565b80151581146105e057600080fd5b6000602082840312156142bc57600080fd5b8151610cf28161429c565b808201808211156124ac576124ac6141c5565b600082614310577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60005b83811015614330578181015183820152602001614318565b50506000910152565b60008151808452614351816020860160208601614315565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6001600160a01b03831681526040602082015260006139606040830184614339565b60006001600160a01b03808616835280851660208401525060606040830152613a066060830184614339565b818103818111156124ac576124ac6141c5565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561445a5761445a6143e4565b604052919050565b600067ffffffffffffffff82111561447c5761447c6143e4565b5060051b60200190565b600082601f83011261449757600080fd5b815160206144ac6144a783614462565b614413565b8083825260208201915060208460051b8701019350868411156144ce57600080fd5b602086015b848110156144ea57805183529183019183016144d3565b509695505050505050565b6000806040838503121561450857600080fd5b825167ffffffffffffffff8082111561452057600080fd5b818501915085601f83011261453457600080fd5b815160206145446144a783614462565b82815260059290921b8401810191818101908984111561456357600080fd5b948201945b8386101561458a57855161457b81613da4565b82529482019490820190614568565b918801519196509093505050808211156145a357600080fd5b506145b085828601614486565b9150509250929050565b600080604083850312156145cd57600080fd5b505080516020909101519092909150565b6000602082840312156145f057600080fd5b8135610cf28161429c565b6000825161460d818460208701614315565b9190910192915050565b6020815260006124a9602083018461433956fe736574436f6e76657273696f6e436f6e66696728616464726573732c616464726573732c436f6e76657273696f6e436f6e666967297365744173736574734469726563745472616e7366657228616464726573735b5d2c626f6f6c5b5d29a2646970667358221220600656f7554286fef66062f7efdf895e97f82f5ce299d60b63e0eb82e2539a7164736f6c63430008190033