0 txs
18.5k calls
constructor
constructor(bool timeBased_, uint256 blocksPerYear_, uint256 maxBorrowRateMantissa_)
functions
accessControlManager
viewfunction accessControlManager() view returns (address)
accrualBlockNumber
viewfunction accrualBlockNumber() view returns (uint256)
allowance
viewfunction allowance(address owner, address spender) view returns (uint256)
badDebt
viewfunction badDebt() view returns (uint256)
balanceOf
viewfunction balanceOf(address owner) view returns (uint256)
blocksOrSecondsPerYear
viewfunction blocksOrSecondsPerYear() view returns (uint256)
borrowBalanceStored
viewfunction borrowBalanceStored(address account) view returns (uint256)
borrowIndex
viewfunction borrowIndex() view returns (uint256)
borrowRatePerBlock
viewfunction borrowRatePerBlock() view returns (uint256)
comptroller
viewfunction comptroller() view returns (address)
decimals
viewfunction decimals() view returns (uint8)
exchangeRateStored
viewfunction exchangeRateStored() view returns (uint256)
getAccountSnapshot
viewfunction getAccountSnapshot(address account) view returns (uint256 error, uint256 vTokenBalance, uint256 borrowBalance, uint256 exchangeRate)
getBlockNumberOrTimestamp
viewfunction getBlockNumberOrTimestamp() view returns (uint256)
getCash
viewfunction getCash() view returns (uint256)
interestRateModel
viewfunction interestRateModel() view returns (address)
isTimeBased
viewfunction isTimeBased() view returns (bool)
isVToken
purefunction isVToken() pure returns (bool)
name
viewfunction name() view returns (string)
NO_ERROR
viewfunction NO_ERROR() view returns (uint256)
owner
viewfunction owner() view returns (address)
pendingOwner
viewfunction pendingOwner() view returns (address)
protocolSeizeShareMantissa
viewfunction protocolSeizeShareMantissa() view returns (uint256)
protocolShareReserve
viewfunction protocolShareReserve() view returns (address)
reduceReservesBlockDelta
viewfunction reduceReservesBlockDelta() view returns (uint256)
reduceReservesBlockNumber
viewfunction reduceReservesBlockNumber() view returns (uint256)
reserveFactorMantissa
viewfunction reserveFactorMantissa() view returns (uint256)
shortfall
viewfunction shortfall() view returns (address)
supplyRatePerBlock
viewfunction supplyRatePerBlock() view returns (uint256)
symbol
viewfunction symbol() view returns (string)
totalBorrows
viewfunction totalBorrows() view returns (uint256)
totalReserves
viewfunction totalReserves() view returns (uint256)
totalSupply
viewfunction totalSupply() view returns (uint256)
underlying
viewfunction underlying() view returns (address)
acceptOwnership
nonpayablefunction acceptOwnership()
accrueInterest
nonpayablefunction accrueInterest() returns (uint256)
addReserves
nonpayablefunction addReserves(uint256 addAmount)
approve
nonpayablefunction approve(address spender, uint256 amount) returns (bool)
badDebtRecovered
nonpayablefunction badDebtRecovered(uint256 recoveredAmount_)
balanceOfUnderlying
nonpayablefunction balanceOfUnderlying(address owner) returns (uint256)
borrow
nonpayablefunction borrow(uint256 borrowAmount) returns (uint256)
borrowBalanceCurrent
nonpayablefunction borrowBalanceCurrent(address account) returns (uint256)
borrowBehalf
nonpayablefunction borrowBehalf(address borrower, uint256 borrowAmount) returns (uint256)
decreaseAllowance
nonpayablefunction decreaseAllowance(address spender, uint256 subtractedValue) returns (bool)
exchangeRateCurrent
nonpayablefunction exchangeRateCurrent() returns (uint256)
forceLiquidateBorrow
nonpayablefunction forceLiquidateBorrow(address liquidator, address borrower, uint256 repayAmount, address vTokenCollateral, bool skipLiquidityCheck)
healBorrow
nonpayablefunction healBorrow(address payer, address borrower, uint256 repayAmount)
increaseAllowance
nonpayablefunction increaseAllowance(address spender, uint256 addedValue) returns (bool)
initialize
nonpayablefunction initialize(address underlying_, address comptroller_, address interestRateModel_, uint256 initialExchangeRateMantissa_, string name_, string symbol_, uint8 decimals_, address admin_, address accessControlManager_, tuple riskManagement, uint256 reserveFactorMantissa_)
liquidateBorrow
nonpayablefunction liquidateBorrow(address borrower, uint256 repayAmount, address vTokenCollateral) returns (uint256)
mint
nonpayablefunction mint(uint256 mintAmount) returns (uint256)
mintBehalf
nonpayablefunction mintBehalf(address minter, uint256 mintAmount) returns (uint256)
redeem
nonpayablefunction redeem(uint256 redeemTokens) returns (uint256)
redeemBehalf
nonpayablefunction redeemBehalf(address redeemer, uint256 redeemTokens) returns (uint256)
redeemUnderlying
nonpayablefunction redeemUnderlying(uint256 redeemAmount) returns (uint256)
redeemUnderlyingBehalf
nonpayablefunction redeemUnderlyingBehalf(address redeemer, uint256 redeemAmount) returns (uint256)
reduceReserves
nonpayablefunction reduceReserves(uint256 reduceAmount)
renounceOwnership
nonpayablefunction renounceOwnership()
repayBorrow
nonpayablefunction repayBorrow(uint256 repayAmount) returns (uint256)
repayBorrowBehalf
nonpayablefunction repayBorrowBehalf(address borrower, uint256 repayAmount) returns (uint256)
seize
nonpayablefunction seize(address liquidator, address borrower, uint256 seizeTokens)
setAccessControlManager
nonpayablefunction setAccessControlManager(address accessControlManager_)
setInterestRateModel
nonpayablefunction setInterestRateModel(address newInterestRateModel)
setProtocolSeizeShare
nonpayablefunction setProtocolSeizeShare(uint256 newProtocolSeizeShareMantissa_)
setProtocolShareReserve
nonpayablefunction setProtocolShareReserve(address protocolShareReserve_)
setReduceReservesBlockDelta
nonpayablefunction setReduceReservesBlockDelta(uint256 _newReduceReservesBlockOrTimestampDelta)
setReserveFactor
nonpayablefunction setReserveFactor(uint256 newReserveFactorMantissa)
setShortfallContract
nonpayablefunction setShortfallContract(address shortfall_)
sweepToken
nonpayablefunction sweepToken(address token)
totalBorrowsCurrent
nonpayablefunction totalBorrowsCurrent() returns (uint256)
transfer
nonpayablefunction transfer(address dst, uint256 amount) returns (bool)
transferFrom
nonpayablefunction transferFrom(address src, address dst, uint256 amount) returns (bool)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
events
AccrueInterest
event AccrueInterest(uint256 cashPrior, uint256 interestAccumulated, uint256 borrowIndex, uint256 totalBorrows)
Approval
event Approval(address indexed owner, address indexed spender, uint256 amount)
BadDebtIncreased
event BadDebtIncreased(address indexed borrower, uint256 badDebtDelta, uint256 badDebtOld, uint256 badDebtNew)
BadDebtRecovered
event BadDebtRecovered(uint256 badDebtOld, uint256 badDebtNew)
Borrow
event Borrow(address indexed borrower, uint256 borrowAmount, uint256 accountBorrows, uint256 totalBorrows)
HealBorrow
event HealBorrow(address indexed payer, address indexed borrower, uint256 repayAmount)
Initialized
event Initialized(uint8 version)
LiquidateBorrow
event LiquidateBorrow(address indexed liquidator, address indexed borrower, uint256 repayAmount, address indexed vTokenCollateral, uint256 seizeTokens)
Mint
event Mint(address indexed minter, uint256 mintAmount, uint256 mintTokens, uint256 accountBalance)
NewAccessControlManager
event NewAccessControlManager(address oldAccessControlManager, address newAccessControlManager)
NewComptroller
event NewComptroller(address indexed oldComptroller, address indexed newComptroller)
NewMarketInterestRateModel
event NewMarketInterestRateModel(address indexed oldInterestRateModel, address indexed newInterestRateModel)
NewProtocolSeizeShare
event NewProtocolSeizeShare(uint256 oldProtocolSeizeShareMantissa, uint256 newProtocolSeizeShareMantissa)
NewProtocolShareReserve
event NewProtocolShareReserve(address indexed oldProtocolShareReserve, address indexed newProtocolShareReserve)
NewReduceReservesBlockDelta
event NewReduceReservesBlockDelta(uint256 oldReduceReservesBlockOrTimestampDelta, uint256 newReduceReservesBlockOrTimestampDelta)
NewReserveFactor
event NewReserveFactor(uint256 oldReserveFactorMantissa, uint256 newReserveFactorMantissa)
NewShortfallContract
event NewShortfallContract(address indexed oldShortfall, address indexed newShortfall)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
OwnershipTransferStarted
event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner)
ProtocolSeize
event ProtocolSeize(address indexed from, address indexed to, uint256 amount)
Redeem
event Redeem(address indexed redeemer, uint256 redeemAmount, uint256 redeemTokens, uint256 accountBalance)
RepayBorrow
event RepayBorrow(address indexed payer, address indexed borrower, uint256 repayAmount, uint256 accountBorrows, uint256 totalBorrows)
ReservesAdded
event ReservesAdded(address indexed benefactor, uint256 addAmount, uint256 newTotalReserves)
SpreadReservesReduced
event SpreadReservesReduced(address indexed protocolShareReserve, uint256 reduceAmount, uint256 newTotalReserves)
SweepToken
event SweepToken(address indexed token)
Transfer
event Transfer(address indexed from, address indexed to, uint256 amount)
errors
AddReservesFactorFreshCheck
error AddReservesFactorFreshCheck(uint256 actualAddAmount)
BorrowCashNotAvailable
error BorrowCashNotAvailable()
BorrowFreshnessCheck
error BorrowFreshnessCheck()
DelegateNotApproved
error DelegateNotApproved()
ForceLiquidateBorrowUnauthorized
error ForceLiquidateBorrowUnauthorized()
HealBorrowUnauthorized
error HealBorrowUnauthorized()
InvalidBlocksPerYear
error InvalidBlocksPerYear()
InvalidTimeBasedConfiguration
error InvalidTimeBasedConfiguration()
LiquidateAccrueCollateralInterestFailed
error LiquidateAccrueCollateralInterestFailed(uint256 errorCode)
LiquidateCloseAmountIsUintMax
error LiquidateCloseAmountIsUintMax()
LiquidateCloseAmountIsZero
error LiquidateCloseAmountIsZero()
LiquidateCollateralFreshnessCheck
error LiquidateCollateralFreshnessCheck()
LiquidateFreshnessCheck
error LiquidateFreshnessCheck()
LiquidateLiquidatorIsBorrower
error LiquidateLiquidatorIsBorrower()
LiquidateSeizeLiquidatorIsBorrower
error LiquidateSeizeLiquidatorIsBorrower()
MintFreshnessCheck
error MintFreshnessCheck()
ProtocolSeizeShareTooBig
error ProtocolSeizeShareTooBig()
RedeemFreshnessCheck
error RedeemFreshnessCheck()
RedeemTransferOutNotPossible
error RedeemTransferOutNotPossible()
ReduceReservesCashNotAvailable
error ReduceReservesCashNotAvailable()
ReduceReservesCashValidation
error ReduceReservesCashValidation()
ReduceReservesFreshCheck
error ReduceReservesFreshCheck()
RepayBorrowFreshnessCheck
error RepayBorrowFreshnessCheck()
SetInterestRateModelFreshCheck
error SetInterestRateModelFreshCheck()
SetReserveFactorBoundsCheck
error SetReserveFactorBoundsCheck()
SetReserveFactorFreshCheck
error SetReserveFactorFreshCheck()
TransferNotAllowed
error TransferNotAllowed()
Unauthorized
error Unauthorized(address sender, address calledContract, string methodSignature)
ZeroAddressNotAllowed
error ZeroAddressNotAllowed()
creation bytecode
0x61010060405234801561001157600080fd5b506040516150cb3803806150cb83398101604081905261003091610202565b82828115801561003e575080155b1561005c576040516302723dfb60e21b815260040160405180910390fd5b81801561006857508015155b156100865760405163ae0fcab360e01b815260040160405180910390fd5b81151560a05281610097578061009d565b6301e133805b608052816100b45761013f60201b6120a5176100bf565b61014360201b6120a9175b6001600160401b031660c0525050670de0b6b3a764000081111561012a5760405162461bcd60e51b815260206004820152601f60248201527f4d617820626f72726f772072617465206d757374206265203c3d20316531380060448201526064015b60405180910390fd5b60e0819052610137610147565b50505061023e565b4390565b4290565b600054610100900460ff16156101af5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b6064820152608401610121565b60005460ff90811614610200576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b60008060006060848603121561021757600080fd5b8351801515811461022757600080fd5b602085015160409095015190969495509392505050565b60805160a05160c05160e051614e546102776000396000611a3e01526000611e7901526000610877015260006106560152614e546000f3fe608060405234801561001057600080fd5b50600436106104335760003560e01c80637821a51411610236578063b2a02ff11161013b578063dd62ed3e116100c3578063ef60450c11610087578063ef60450c14610932578063f2fde38b14610945578063f3fdb15a14610958578063f5e3c4621461096b578063f8f9da281461097e57600080fd5b8063dd62ed3e146108b5578063df3a516e146108ee578063e1d146fb14610901578063e30c397814610909578063e9a44fd91461091a57600080fd5b8063c37f68e21161010a578063c37f68e21461082c578063c5ebeaec1461085f578063c7ad089514610872578063d1109c2f14610899578063db006a75146108a257600080fd5b8063b2a02ff1146107f7578063b4a0bdf31461080a578063bbcac5571461081b578063bd6d894d1461082457600080fd5b806395d89b41116101be578063a6afed951161018d578063a6afed95146107c2578063a9059cbb146107ca578063aa5af0fd146107dd578063ae96f141146107e6578063ae9d70b0146107ef57600080fd5b806395d89b411461078157806395dd919314610789578063a0712d681461079c578063a457c2d7146107af57600080fd5b80638a42c319116102055780638a42c3191461072e5780638bbdb6db146107415780638bcd4016146107545780638da5cb5b146107675780638f840ddd1461077857600080fd5b80637821a514146106ed57806379ba509714610700578063852a12e314610708578063856e5bb31461071b57600080fd5b8063313ce5671161033c5780636752e702116102c45780636f307dc3116102935780636f307dc31461068957806370a08231146106a1578063715018a6146106ca57806373acee98146106d2578063757212f0146106da57600080fd5b80636752e702146106485780636857249c1461065157806369ab3250146106785780636c540baf1461068057600080fd5b80633d9ea3a11161030b5780633d9ea3a1146105ff57806341f641ee1461060657806344fe6ffe1461061957806347bd37181461062c5780635fe3b5671461063557600080fd5b8063313ce567146105b257806339509351146105d15780633af9e669146105e45780633b1d21a2146105f757600080fd5b8063182df0f5116103bf578063210bc0521161038e578063210bc0521461055357806323323e031461056657806323b872dd146105795780632464176b1461058c5780632608f8181461059f57600080fd5b8063182df0f5146104fa57806319b1faef146105025780631be195601461052d5780631c4469831461054057600080fd5b80630e752702116104065780630e752702146104a1578063107568df146104c2578063173b9904146104d557806317bfdfbc146104de57806318160ddd146104f157600080fd5b806306fdde031461043857806307e2795914610456578063095ea7b31461046b5780630e32cb861461048e575b600080fd5b610440610986565b60405161044d919061468f565b60405180910390f35b6104696104643660046146a2565b610a14565b005b61047e6104793660046146e0565b610a7b565b604051901515815260200161044d565b61046961049c36600461470c565b610aec565b6104b46104af3660046146a2565b610b00565b60405190815260200161044d565b6104696104d036600461470c565b610b5a565b6104b460d05481565b6104b46104ec36600461470c565b610b6b565b6104b460d55481565b6104b4610bc0565b60db54610515906001600160a01b031681565b6040516001600160a01b03909116815260200161044d565b61046961053b36600461470c565b610bcf565b61046961054e3660046146a2565b610d8a565b6104b46105613660046146e0565b610e05565b6104b46105743660046146e0565b610e69565b61047e610587366004614729565b610eb5565b61046961059a3660046146a2565b610f07565b6104b46105ad3660046146e0565b610fa9565b60cc546105bf9060ff1681565b60405160ff909116815260200161044d565b61047e6105df3660046146e0565b611004565b6104b46105f236600461470c565b6110ac565b6104b46110f2565b600161047e565b61046961061436600461470c565b6110fc565b610469610627366004614729565b61110d565b6104b460d35481565b60cd54610515906001600160a01b031681565b6104b460da5481565b6104b47f000000000000000000000000000000000000000000000000000000000000000081565b6104b4600081565b6104b460d15481565b60c9546105159061010090046001600160a01b031681565b6104b46106af36600461470c565b6001600160a01b0316600090815260d7602052604090205490565b6104696113b0565b6104b46113c4565b6104696106e83660046146a2565b611410565b6104696106fb3660046146a2565b611537565b610469611586565b6104b46107163660046146a2565b6115fd565b6104b46107293660046146e0565b611657565b61046961073c366004614881565b61167f565b61046961074f366004614982565b6117af565b61046961076236600461470c565b6117ee565b6033546001600160a01b0316610515565b6104b460d45481565b61044061183e565b6104b461079736600461470c565b61184b565b6104b46107aa3660046146a2565b611856565b61047e6107bd3660046146e0565b611899565b6104b4611976565b61047e6107d83660046146e0565b611bcb565b6104b460d25481565b6104b460dd5481565b6104b4611c1c565b610469610805366004614729565b611cbf565b6097546001600160a01b0316610515565b6104b460d65481565b6104b4611d09565b61083f61083a36600461470c565b611d5b565b60408051948552602085019390935291830152606082015260800161044d565b6104b461086d3660046146a2565b611d9c565b61047e7f000000000000000000000000000000000000000000000000000000000000000081565b6104b460dc5481565b6104b46108b03660046146a2565b611ddf565b6104b46108c33660046149ea565b6001600160a01b03918216600090815260d86020908152604080832093909416825291909152205490565b6104b46108fc3660046146e0565b611e24565b6104b4611e72565b6065546001600160a01b0316610515565b60cc546105159061010090046001600160a01b031681565b6104696109403660046146a2565b611ea0565b61046961095336600461470c565b611fbf565b60ce54610515906001600160a01b031681565b6104b4610979366004614a23565b612030565b6104b461204a565b60ca805461099390614a65565b80601f01602080910402602001604051908101604052809291908181526020018280546109bf90614a65565b8015610a0c5780601f106109e157610100808354040283529160200191610a0c565b820191906000526020600020905b8154815290600101906020018083116109ef57829003601f168201915b505050505081565b60c95460ff16610a3f5760405162461bcd60e51b8152600401610a3690614a9f565b60405180910390fd5b60c9805460ff19169055610a51611976565b50610a5a611e72565b60dd5414610a6b57610a6b816120ad565b5060c9805460ff19166001179055565b6000610a8683612229565b33600081815260d8602090815260408083206001600160a01b038816808552908352928190208690555185815283917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a360019150505b92915050565b610af4612250565b610afd816122aa565b50565b60c95460009060ff16610b255760405162461bcd60e51b8152600401610a3690614a9f565b60c9805460ff19169055610b37611976565b50610b43333384612370565b506000905060c9805460ff19166001179055919050565b610b62612250565b610afd8161254b565b60c95460009060ff16610b905760405162461bcd60e51b8152600401610a3690614a9f565b60c9805460ff19169055610ba2611976565b50610bac826125ae565b905060c9805460ff19166001179055919050565b6000610bca61261e565b905090565b6033546001600160a01b03163314610c415760405162461bcd60e51b815260206004820152602f60248201527f56546f6b656e3a3a7377656570546f6b656e3a206f6e6c792061646d696e206360448201526e616e20737765657020746f6b656e7360881b6064820152608401610a36565b60c9546001600160a01b03610100909104811690821603610cbf5760405162461bcd60e51b815260206004820152603260248201527f56546f6b656e3a3a7377656570546f6b656e3a2063616e206e6f74207377656560448201527138103ab73232b9363cb4b733903a37b5b2b760711b6064820152608401610a36565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610d06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2a9190614ac3565b9050610d52610d416033546001600160a01b031690565b6001600160a01b0384169083612693565b6040516001600160a01b038316907f35ce4c546a473796a8e70ec2d4af4f2031afe357afa7057b6ea7fa340730e1b290600090a25050565b60c95460ff16610dac5760405162461bcd60e51b8152600401610a3690614a9f565b60c9805460ff1916905560408051808201909152601981527f73657452657365727665466163746f722875696e7432353629000000000000006020820152610df3906126fb565b610dfb611976565b50610a6b81612799565b60c95460009060ff16610e2a5760405162461bcd60e51b8152600401610a3690614a9f565b60c9805460ff19169055610e3d83612829565b610e45611976565b50610e5383338460006128ba565b50600060c9805460ff1916600117905592915050565b60c95460009060ff16610e8e5760405162461bcd60e51b8152600401610a3690614a9f565b60c9805460ff19169055610ea183612229565b610ea9611976565b50610e53338484612bf3565b60c95460009060ff16610eda5760405162461bcd60e51b8152600401610a3690614a9f565b60c9805460ff19169055610ef033858585612df8565b50600160c9805460ff191660011790559392505050565b610f28604051806060016040528060248152602001614ddb602491396126fb565b60008111610f685760405162461bcd60e51b815260206004820152600d60248201526c125b9d985b1a5908125b9c1d5d609a1b6044820152606401610a36565b60dc5460408051918252602082018390527fc2ac513cdb57f91eb2bef4db918c285829524f549682b99717c6cb06cc011183910160405180910390a160dc55565b60c95460009060ff16610fce5760405162461bcd60e51b8152600401610a3690614a9f565b60c9805460ff19169055610fe0611976565b50610fec338484612370565b506000905060c9805460ff1916600117905592915050565b600061100f83612229565b33600081815260d8602090815260408083206001600160a01b038816845290915290205461103d8482614af2565b6001600160a01b03838116600081815260d860209081526040808320948b16808452948252918290208590559051848152939450919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3506001949350505050565b60008060405180602001604052806110c2611d09565b90526001600160a01b038416600090815260d760205260409020549091506110eb908290613022565b9392505050565b6000610bca61303a565b611104612250565b610afd81613070565b60c95460ff1661112f5760405162461bcd60e51b8152600401610a3690614a9f565b60c9805460ff1916905580156111a55760cd5460405163eade3eed60e01b81523060048201526001600160a01b0384811660248301529091169063eade3eed90604401600060405180830381600087803b15801561118c57600080fd5b505af11580156111a0573d6000803e3d6000fd5b505050505b60cd546001600160a01b031633146111d057604051632c40292560e01b815260040160405180910390fd5b60006111db836125ae565b60d3549091506000831561125b576111f386856130cb565b90506111ff8183614b05565b91506001600160a01b038086169087167f1a2a22cb034d26d1854bdc6666a5b91fe25efbbb5dcad3b0355478d6f5c362a18361123b8188614b05565b604080519283526020830191909152810186905260600160405180910390a35b60006112678285614b05565b9050801561132f5760d654600061127e8383614af2565b905061128a8386614b05565b60d682905560408051858152600060208201529081018290529095506001600160a01b0389169030907f1a2a22cb034d26d1854bdc6666a5b91fe25efbbb5dcad3b0355478d6f5c362a19060600160405180910390a360408051848152602081018490529081018290526001600160a01b038916907f90125ffdb441e57c4f6bf69789206424859f206bea5727f2d81ad2470826ef6a9060600160405180910390a250505b6001600160a01b03808716600081815260d9602052604080822091825560d25460019092019190915560d38690555190918916907f9fe0294717a8efbc6ace1c151b73a4c89982339b2228a27d1ca21394e348986f906113929089815260200190565b60405180910390a3505060c9805460ff191660011790555050505050565b6113b8612250565b6113c260006131d9565b565b60c95460009060ff166113e95760405162461bcd60e51b8152600401610a3690614a9f565b60c9805460ff191690556113fb611976565b505060d35460c9805460ff1916600117905590565b61144e6040518060400160405280601e81526020017f73657450726f746f636f6c5365697a6553686172652875696e743235362900008152506126fb565b60cd5460408051634ada90af60e01b815290516000926001600160a01b031691634ada90af9160048083019260209291908290030181865afa158015611498573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bc9190614ac3565b9050806114d1670de0b6b3a764000084614af2565b11156114f05760405163034dd2c160e11b815260040160405180910390fd5b60da80549083905560408051828152602081018590527ff5815f353a60e815cce7553e4f60c533a59d26b1b5504ea4b6db8d60da3e4da291015b60405180910390a1505050565b60c95460ff166115595760405162461bcd60e51b8152600401610a3690614a9f565b60c9805460ff1916905561156b611976565b50611575816131f2565b505060c9805460ff19166001179055565b60655433906001600160a01b031681146115f45760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610a36565b610afd816131d9565b60c95460009060ff166116225760405162461bcd60e51b8152600401610a3690614a9f565b60c9805460ff19169055611634611976565b5061164233336000856128ba565b50600060c9805460ff19166001179055919050565b600061166283612829565b61166a611976565b50611676833384613287565b50600092915050565b600054610100900460ff161580801561169f5750600054600160ff909116105b806116b95750303b1580156116b9575060005460ff166001145b61171c5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610a36565b6000805460ff19166001179055801561173f576000805461ff0019166101001790555b61174885612229565b61175b8c8c8c8c8c8c8c8c8c8c8c613465565b80156117a1576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050505050565b60cd546001600160a01b031633146117da57604051635c85a5e760e01b815260040160405180910390fd5b6117e78585858585613692565b5050505050565b61182c6040518060400160405280601d81526020017f736574496e746572657374526174654d6f64656c2861646472657373290000008152506126fb565b611834611976565b50610afd81613773565b60cb805461099390614a65565b6000610ae6826125ae565b60c95460009060ff1661187b5760405162461bcd60e51b8152600401610a3690614a9f565b60c9805460ff1916905561188d611976565b50611642333384612bf3565b60006118a483612229565b33600081815260d8602090815260408083206001600160a01b0388168452909152902054838110156119185760405162461bcd60e51b815260206004820152601e60248201527f64656372656173656420616c6c6f77616e63652062656c6f77207a65726f00006044820152606401610a36565b6001600160a01b03828116600081815260d860209081526040808320948a1680845294825291829020948890039485905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259101611099565b600080611981611e72565b60d1549091508181036119975760009250505090565b60006119a161303a565b60d35460d45460d25460ce5460d6546040516301cee29d60e21b815260048101879052602481018690526044810185905260648101919091529495509293919290916000916001600160a01b03169063073b8a7490608401602060405180830381865afa158015611a16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a3a9190614ac3565b90507f0000000000000000000000000000000000000000000000000000000000000000811115611aac5760405162461bcd60e51b815260206004820152601c60248201527f626f72726f772072617465206973206162737572646c792068696768000000006044820152606401610a36565b6000611ab88789614b05565b90506000611ad4604051806020016040528085815250836138b5565b90506000611ae28288613022565b90506000611af08883614af2565b90506000611b0f604051806020016040528060d054815250848a6138e6565b90506000611b1e85898a6138e6565b60d18e905560d281905560d384905560d483905560dc5460dd5491925090611b46908f614b05565b10611b6f5760dd8d9055818b1015611b6657611b618b6120ad565b611b6f565b611b6f826120ad565b604080518c815260208101869052908101829052606081018490527f4dec04e750ca11537cabcd8a9eab06494de08da3735bc8871cd41250e190bc049060800160405180910390a160009d505050505050505050505050505090565b60c95460009060ff16611bf05760405162461bcd60e51b8152600401610a3690614a9f565b60c9805460ff19169055611c0633808585612df8565b50600160c9805460ff1916600117905592915050565b60ce546000906001600160a01b0316630cde8d1c611c3861303a565b60d35460d45460d05460d6546040516001600160e01b031960e088901b1681526004810195909552602485019390935260448401919091526064830152608482015260a4015b602060405180830381865afa158015611c9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bca9190614ac3565b60c95460ff16611ce15760405162461bcd60e51b8152600401610a3690614a9f565b60c9805460ff19169055611cf733848484613907565b505060c9805460ff1916600117905550565b60c95460009060ff16611d2e5760405162461bcd60e51b8152600401610a3690614a9f565b60c9805460ff19169055611d40611976565b50611d4961261e565b905060c9805460ff1916600117905590565b6001600160a01b038116600090815260d760205260408120548190819081908190611d85876125ae565b611d8d61261e565b93509350935093509193509193565b60c95460009060ff16611dc15760405162461bcd60e51b8152600401610a3690614a9f565b60c9805460ff19169055611dd3611976565b50611642333384613287565b60c95460009060ff16611e045760405162461bcd60e51b8152600401610a3690614a9f565b60c9805460ff19169055611e16611976565b5061164233338460006128ba565b60c95460009060ff16611e495760405162461bcd60e51b8152600401610a3690614a9f565b60c9805460ff19169055611e5c83612829565b611e64611976565b50610e5383336000856128ba565b6000610bca7f000000000000000000000000000000000000000000000000000000000000000063ffffffff16565b60db546001600160a01b03163314611f0e5760405162461bcd60e51b815260206004820152602b60248201527f6f6e6c792073686f727466616c6c20636f6e74726163742063616e207570646160448201526a1d1948189859081919589d60aa1b6064820152608401610a36565b60d654811115611f725760405162461bcd60e51b815260206004820152602960248201527f6d6f7265207468616e206261642064656274207265636f76657265642066726f604482015268369030bab1ba34b7b760b91b6064820152608401610a36565b60d6546000611f818383614b05565b60d681905560408051848152602081018390529192507f9e19ec7d2b8f8a94df8cc0072453ace318d221e3cbb2731d0eaa0baac856520f910161152a565b611fc7612250565b606580546001600160a01b0383166001600160a01b03199091168117909155611ff86033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6000612040338585856000613692565b5060009392505050565b60ce546000906001600160a01b031663073b8a7461206661303a565b60d35460d45460d6546040516001600160e01b031960e087901b1681526004810194909452602484019290925260448301526064820152608401611c7e565b4390565b4290565b806000036120b85750565b60006120c2611e72565b60d154146120e357604051630dff50cb60e41b815260040160405180910390fd5b816120ec61303a565b101561210b57604051633345e99960e01b815260040160405180910390fd5b60d45482111561212e576040516378d2980560e11b815260040160405180910390fd5b8160d45461213c9190614b05565b60d481905560cc5490915061215f9061010090046001600160a01b031683613cb1565b60cc5460cd5460c9546040516305bebb3b60e21b81526001600160a01b03610100948590048116946316faecec946121a7949083169391900490911690600090600401614b18565b600060405180830381600087803b1580156121c157600080fd5b505af11580156121d5573d6000803e3d6000fd5b505060cc5460408051868152602081018690526101009092046001600160a01b031693507f9cc63bb4ef37ad6a5f5f657dfaf94865531d4234acbc431cc8ac035468f6272092500160405180910390a25050565b6001600160a01b038116610afd576040516342bcdf7f60e11b815260040160405180910390fd5b6033546001600160a01b031633146113c25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a36565b6001600160a01b03811661230e5760405162461bcd60e51b815260206004820152602560248201527f696e76616c696420616365737320636f6e74726f6c206d616e61676572206164604482015264647265737360d81b6064820152608401610a36565b609780546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f66fd58e82f7b31a2a5c30e0888f3093efe4e111b00cd2b0c31fe014601293aa091015b60405180910390a15050565b60cd5460405163eade3eed60e01b81523060048201526001600160a01b038481166024830152600092169063eade3eed90604401600060405180830381600087803b1580156123be57600080fd5b505af11580156123d2573d6000803e3d6000fd5b505050506123de611e72565b60d154146123ff5760405163c9021e2f60e01b815260040160405180910390fd5b600061240a846125ae565b905060008184101561241c578361241e565b815b9050600061242c87836130cb565b9050600061243a8285614b05565b905060008260d35461244c9190614b05565b6001600160a01b03898116600081815260d9602090815260409182902087815560d25460019091015560d3859055815188815290810187905290810184905292935091908b16907f1a2a22cb034d26d1854bdc6666a5b91fe25efbbb5dcad3b0355478d6f5c362a19060600160405180910390a360cd5460d254604051631ededc9160e01b81523060048201526001600160a01b038c811660248301528b81166044830152606482018790526084820192909252911690631ededc919060a401600060405180830381600087803b15801561252657600080fd5b505af115801561253a573d6000803e3d6000fd5b50949b9a5050505050505050505050565b61255481612229565b60cc80546001600160a01b03838116610100818102610100600160a81b031985161790945560405193909204169182907fafec95c8612496c3ecf5dddc71e393528fe29bd145fbaf9c6b496d78d7e2d79b90600090a35050565b6001600160a01b038116600090815260d96020908152604080832081518083019092528054808352600190910154928201929092529082036125f35750600092915050565b60d254815160009161260491614b5c565b90508160200151816126169190614b73565b949350505050565b60d55460009080820361263357505060cf5490565b600061263d61303a565b9050600060d45460d65460d354846126559190614af2565b61265f9190614af2565b6126699190614b05565b9050600083612680670de0b6b3a764000084614b5c565b61268a9190614b73565b95945050505050565b6040516001600160a01b0383166024820152604481018290526126f690849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613ccd565b505050565b6097546040516318c5e8ab60e01b81526000916001600160a01b0316906318c5e8ab9061272e9033908690600401614b95565b602060405180830381865afa15801561274b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061276f9190614bb9565b90508061279557333083604051634a3fa29360e01b8152600401610a3693929190614bd6565b5050565b6127a1611e72565b60d154146127c257604051637dfca6b760e11b815260040160405180910390fd5b670de0b6b3a76400008111156127eb5760405163717220f360e11b815260040160405180910390fd5b60d080549082905560408051828152602081018490527faaa68312e2ea9d50e16af5068410ab56e1a1fd06037b1a35664812c30f8214609101612364565b60cd54604051630217306760e31b81526001600160a01b038381166004830152336024830152909116906310b9833890604401602060405180830381865afa158015612879573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061289d9190614bb9565b610afd57604051630cf0b6f560e01b815260040160405180910390fd5b8115806128c5575080155b61292e5760405162461bcd60e51b815260206004820152603460248201527f6f6e65206f662072656465656d546f6b656e73496e206f722072656465656d416044820152736d6f756e74496e206d757374206265207a65726f60601b6064820152608401610a36565b612936611e72565b60d15414612957576040516397b5cfcd60e01b815260040160405180910390fd5b6000604051806020016040528061296c61261e565b905290506000808415612981578491506129bf565b61298b8484613da2565b915060006129998385613dc0565b905080158015906129aa5750848114155b156129bd57826129b981614c02565b9350505b505b6129c98383613022565b905080600003612a125760405162461bcd60e51b815260206004820152601460248201527372656465656d416d6f756e74206973207a65726f60601b6044820152606401610a36565b60cd54604051634732387560e11b81526001600160a01b0390911690638e6470ea90612a469030908b908790600401614c1b565b600060405180830381600087803b158015612a6057600080fd5b505af1158015612a74573d6000803e3d6000fd5b505050508060d454612a8461303a565b612a8e9190614b05565b1015612aad576040516391240a1b60e01b815260040160405180910390fd5b8160d554612abb9190614b05565b60d5556001600160a01b038716600090815260d76020526040812054612ae2908490614b05565b6001600160a01b038916600090815260d7602052604090208190559050612b098783613cb1565b60405183815230906001600160a01b038a1690600080516020614dff8339815191529060200160405180910390a360408051838152602081018590529081018290526001600160a01b038916907fbd5034ffbd47e4e72a94baa2cdb74c6fad73cb3bcdc13036b72ec8306f5a76469060600160405180910390a260cd546040516351dff98960e01b81523060048201526001600160a01b038a811660248301526044820185905260648201869052909116906351dff989906084015b600060405180830381600087803b158015612bdf57600080fd5b505af11580156117a1573d6000803e3d6000fd5b60cd5460405163c0891ba960e01b81526001600160a01b039091169063c0891ba990612c2790309086908690600401614c1b565b600060405180830381600087803b158015612c4157600080fd5b505af1158015612c55573d6000803e3d6000fd5b50505050612c61611e72565b60d15414612c82576040516338d8859760e01b815260040160405180910390fd5b60006040518060200160405280612c9761261e565b905290506000612ca785846130cb565b90506000612cb58284613da2565b90508060d554612cc59190614af2565b60d5556001600160a01b038516600090815260d76020526040812054612cec908390614af2565b6001600160a01b038716600081815260d760209081526040918290208490558151878152908101869052908101839052919250907fb4c03061fb5b7fed76389d5af8f2e0ddb09f8c70d1333abbb62582835e10accb9060600160405180910390a26040518281526001600160a01b03871690600090600080516020614dff8339815191529060200160405180910390a360cd546040516341c728b960e01b81523060048201526001600160a01b0388811660248301526044820186905260648201859052909116906341c728b990608401600060405180830381600087803b158015612dd757600080fd5b505af1158015612deb573d6000803e3d6000fd5b5050505050505050505050565b60cd54604051636d0be88d60e01b81523060048201526001600160a01b03858116602483015284811660448301526064820184905290911690636d0be88d90608401600060405180830381600087803b158015612e5457600080fd5b505af1158015612e68573d6000803e3d6000fd5b50505050816001600160a01b0316836001600160a01b031603612e9e57604051638cd22d1960e01b815260040160405180910390fd5b6000836001600160a01b0316856001600160a01b031603612ec25750600019612eea565b506001600160a01b03808416600090815260d860209081526040808320938816835292905220545b6000612ef68383614b05565b6001600160a01b038616600090815260d7602052604081205491925090612f1e908590614b05565b6001600160a01b038616600090815260d7602052604081205491925090612f46908690614af2565b6001600160a01b03808916600090815260d7602052604080822086905591891681522081905590506000198414612fa0576001600160a01b03808816600090815260d860209081526040808320938c168352929052208390555b856001600160a01b0316876001600160a01b0316600080516020614dff83398151915287604051612fd391815260200190565b60405180910390a360cd5460405163352b4a3f60e11b81523060048201526001600160a01b03898116602483015288811660448301526064820188905290911690636a56947e90608401612bc5565b60008061302f84846138b5565b905061261681613de3565b60c9546040516370a0823160e01b815230600482015260009161010090046001600160a01b0316906370a0823190602401611c7e565b61307981612229565b60db80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f6dbf1ff28f860de5edafa4c6505e37c0aba213288cc4166c5352b6d3776c79ef90600090a35050565b60c9546040516370a0823160e01b815230600482015260009161010090046001600160a01b031690829082906370a0823190602401602060405180830381865afa15801561311d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131419190614ac3565b90506131586001600160a01b038316863087613dfb565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa15801561319f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131c39190614ac3565b90506131cf8282614b05565b9695505050505050565b606580546001600160a01b0319169055610afd81613e22565b60008060006131ff611e72565b60d15414613223576040516338acf79960e01b815260048101829052602401610a36565b61322d33856130cb565b90508060d45461323d9190614af2565b60d4819055604080518381526020810183905291935033917fa91e67c5ea634cd43a12c5a482724b03de01e85ca68702a53d0c2f45cb7c1dc5910160405180910390a29392505050565b60cd5460405163df71403b60e01b81526001600160a01b039091169063df71403b906132bb90309087908690600401614c1b565b600060405180830381600087803b1580156132d557600080fd5b505af11580156132e9573d6000803e3d6000fd5b505050506132f5611e72565b60d1541461331657604051630e8d8c6160e21b815260040160405180910390fd5b8060d45461332261303a565b61332c9190614b05565b101561334b576040516348c2588160e01b815260040160405180910390fd5b6000613356846125ae565b905060006133648383614af2565b905060008360d3546133769190614af2565b6001600160a01b038716600090815260d96020526040902083815560d25460019091015560d381905590506133ab8585613cb1565b60408051858152602081018490529081018290526001600160a01b038716907f13ed6866d4e1ee6da46f845c46d7e54120883d75c5ea9a2dacc1c4ca8984ab809060600160405180910390a260cd54604051635c77860560e01b81526001600160a01b0390911690635c7786059061342b9030908a908990600401614c1b565b600060405180830381600087803b15801561344557600080fd5b505af1158015613459573d6000803e3d6000fd5b50505050505050505050565b600054610100900460ff1661348c5760405162461bcd60e51b8152600401610a3690614c3f565b613494613e74565b61349d83613ea3565b60d1541580156134ad575060d254155b6135055760405162461bcd60e51b815260206004820152602360248201527f6d61726b6574206d6179206f6e6c7920626520696e697469616c697a6564206f6044820152626e636560e81b6064820152608401610a36565b60cf889055876135705760405162461bcd60e51b815260206004820152603060248201527f696e697469616c2065786368616e67652072617465206d75737420626520677260448201526f32b0ba32b9103a3430b7103d32b9379760811b6064820152608401610a36565b6135798a613eca565b613581611e72565b60d155670de0b6b3a764000060d25561359989613773565b6135a281612799565b60ca6135ae8882614cda565b5060cb6135bb8782614cda565b5060cc805460ff191660ff871617905581516135d690613070565b6135e3826020015161254b565b66b1a2bc2ec5000060da5560c98054610100600160a81b0319166101006001600160a01b038e811682029290921792839055604080516318160ddd60e01b8152905191909304909116916318160ddd9160048083019260209291908290030181865afa158015613657573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061367b9190614ac3565b5060c9805460ff19166001179055612deb846131d9565b60c95460ff166136b45760405162461bcd60e51b8152600401610a3690614a9f565b60c9805460ff191690556136c6611976565b506000826001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015613709573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061372d9190614ac3565b9050801561375157604051633eea49b760e11b815260048101829052602401610a36565b61375e8686868686613fd5565b505060c9805460ff1916600117905550505050565b600061377d611e72565b60d1541461379e57604051630be2a5cb60e11b815260040160405180910390fd5b60ce60009054906101000a90046001600160a01b03169050816001600160a01b0316632191f92a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156137f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138189190614bb9565b6138645760405162461bcd60e51b815260206004820152601c60248201527f6d61726b6572206d6574686f642072657475726e65642066616c7365000000006044820152606401610a36565b60ce80546001600160a01b0319166001600160a01b0384811691821790925560405190918316907fedffc32e068c7c95dfd4bdfd5c4d939a084d6b11c4199eac8436ed234d72f92690600090a35050565b60408051602081019091526000815260405180602001604052806138dd856000015185614463565b90529392505050565b6000806138f385856138b5565b905061268a61390182613de3565b8461446f565b60cd5460405163037883e560e31b81523060048201526001600160a01b0386811660248301528581166044830152848116606483015290911690631bc41f2890608401600060405180830381600087803b15801561396457600080fd5b505af1158015613978573d6000803e3d6000fd5b50505050826001600160a01b0316826001600160a01b0316036139ae57604051633a94626760e11b815260040160405180910390fd5b60cd5460408051634ada90af60e01b815290516000926001600160a01b031691634ada90af9160048083019260209291908290030181865afa1580156139f8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a1c9190614ac3565b90506000613a3a83604051806020016040528060da54815250613dc0565b90506000613a5682604051806020016040528086815250613da2565b90506000613a648286614b05565b905060006040518060200160405280613a7b61261e565b905290506000613a8b8285613022565b90508360d554613a9b9190614b05565b60d5556001600160a01b038816600090815260d76020526040902054613ac2908890614b05565b6001600160a01b03808a16600090815260d7602052604080822093909355908b1681522054613af2908490614af2565b6001600160a01b03808b16600090815260d7602052604090209190915560cc54613b23916101009091041682613cb1565b60cc5460cd5460c9546040516305bebb3b60e21b81526001600160a01b03610100948590048116946316faecec94613b6b949083169391900490911690600190600401614b18565b600060405180830381600087803b158015613b8557600080fd5b505af1158015613b99573d6000803e3d6000fd5b50505050886001600160a01b0316886001600160a01b0316600080516020614dff83398151915285604051613bd091815260200190565b60405180910390a360cc546040516001600160a01b036101009092048216918a16907f3ac0548d62d3fa3c9a817cd33899b9acacd57e8958ebe51bc7d9a79f26a8a5db90613c219085815260200190565b60405180910390a360cd54604051636d35bf9160e01b81523060048201526001600160a01b038c811660248301528b811660448301528a81166064830152608482018a905290911690636d35bf919060a401600060405180830381600087803b158015613c8d57600080fd5b505af1158015613ca1573d6000803e3d6000fd5b5050505050505050505050505050565b60c95461010090046001600160a01b03166126f6818484612693565b6000613d22826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661447b9092919063ffffffff16565b9050805160001480613d43575080806020019051810190613d439190614bb9565b6126f65760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610a36565b60006110eb613db984670de0b6b3a7640000614463565b835161448a565b6000670de0b6b3a7640000613dd9848460000151614463565b6110eb9190614b73565b8051600090610ae690670de0b6b3a764000090614b73565b613e1c846323b872dd60e01b8585856040516024016126bf93929190614c1b565b50505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16613e9b5760405162461bcd60e51b8152600401610a3690614c3f565b6113c2614496565b600054610100900460ff16610af45760405162461bcd60e51b8152600401610a3690614c3f565b60cd5460408051623f1ee960e11b815290516001600160a01b0392831692841691627e3dd29160048083019260209291908290030181865afa158015613f14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f389190614bb9565b613f845760405162461bcd60e51b815260206004820152601c60248201527f6d61726b6572206d6574686f642072657475726e65642066616c7365000000006044820152606401610a36565b60cd80546001600160a01b0319166001600160a01b0384811691821790925560405190918316907f7ac369dbd14fa5ea3f473ed67cc9d598964a77501540ba6751eb0b3decf5870d90600090a35050565b60cd5460405163e89d51ad60e01b81523060048201526001600160a01b03848116602483015286811660448301526064820186905283151560848301529091169063e89d51ad9060a401600060405180830381600087803b15801561403957600080fd5b505af115801561404d573d6000803e3d6000fd5b50505050614059611e72565b60d1541461407a576040516380965b1b60e01b815260040160405180910390fd5b614082611e72565b826001600160a01b0316636c540baf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156140c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140e49190614ac3565b1461410257604051631046f38d60e31b815260040160405180910390fd5b846001600160a01b0316846001600160a01b03160361413457604051631bd1a62160e21b815260040160405180910390fd5b826000036141555760405163d29da7ef60e01b815260040160405180910390fd5b600019830361417757604051635982c5bb60e11b815260040160405180910390fd5b6000614184868686612370565b60cd5460405163c488847b60e01b815291925060009182916001600160a01b03169063c488847b906141be90309089908890600401614c1b565b6040805180830381865afa1580156141da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141fe9190614d9a565b915091506000821461426e5760405162461bcd60e51b815260206004820152603360248201527f4c49515549444154455f434f4d5054524f4c4c45525f43414c43554c4154455f604482015272105353d5539517d4d152569157d19052531151606a1b6064820152608401610a36565b6040516370a0823160e01b81526001600160a01b0388811660048301528291908716906370a0823190602401602060405180830381865afa1580156142b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142db9190614ac3565b10156143295760405162461bcd60e51b815260206004820152601860248201527f4c49515549444154455f5345495a455f544f4f5f4d55434800000000000000006044820152606401610a36565b306001600160a01b0386160361434a5761434530898984613907565b6143ad565b60405163b2a02ff160e01b81526001600160a01b0386169063b2a02ff19061437a908b908b908690600401614c1b565b600060405180830381600087803b15801561439457600080fd5b505af11580156143a8573d6000803e3d6000fd5b505050505b846001600160a01b0316876001600160a01b0316896001600160a01b03167f298637f684da70674f26509b10f07ec2fbc77a335ab1e7d6215a4b2484d8bb528685604051614405929190918252602082015260400190565b60405180910390a460cd546040516347ef3b3b60e01b81523060048201526001600160a01b0387811660248301528a8116604483015289811660648301526084820186905260a48201849052909116906347ef3b3b9060c401612bc5565b60006110eb8284614b5c565b60006110eb8284614af2565b606061261684846000856144c6565b60006110eb8284614b73565b600054610100900460ff166144bd5760405162461bcd60e51b8152600401610a3690614c3f565b6113c2336131d9565b6060824710156145275760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610a36565b600080866001600160a01b031685876040516145439190614dbe565b60006040518083038185875af1925050503d8060008114614580576040519150601f19603f3d011682016040523d82523d6000602084013e614585565b606091505b5091509150614596878383876145a1565b979650505050505050565b60608315614610578251600003614609576001600160a01b0385163b6146095760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a36565b5081612616565b61261683838151156146255781518083602001fd5b8060405162461bcd60e51b8152600401610a36919061468f565b60005b8381101561465a578181015183820152602001614642565b50506000910152565b6000815180845261467b81602086016020860161463f565b601f01601f19169290920160200192915050565b6020815260006110eb6020830184614663565b6000602082840312156146b457600080fd5b5035919050565b6001600160a01b0381168114610afd57600080fd5b80356146db816146bb565b919050565b600080604083850312156146f357600080fd5b82356146fe816146bb565b946020939093013593505050565b60006020828403121561471e57600080fd5b81356110eb816146bb565b60008060006060848603121561473e57600080fd5b8335614749816146bb565b92506020840135614759816146bb565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261479157600080fd5b813567ffffffffffffffff808211156147ac576147ac61476a565b604051601f8301601f19908116603f011681019082821181831017156147d4576147d461476a565b816040528381528660208588010111156147ed57600080fd5b836020870160208301376000602085830101528094505050505092915050565b803560ff811681146146db57600080fd5b60006040828403121561483057600080fd5b6040516040810181811067ffffffffffffffff821117156148535761485361476a565b6040529050808235614864816146bb565b81526020830135614874816146bb565b6020919091015292915050565b60008060008060008060008060008060006101808c8e0312156148a357600080fd5b6148ac8c6146d0565b9a506148ba60208d016146d0565b99506148c860408d016146d0565b985060608c0135975067ffffffffffffffff8060808e013511156148eb57600080fd5b6148fb8e60808f01358f01614780565b97508060a08e0135111561490e57600080fd5b5061491f8d60a08e01358e01614780565b955061492d60c08d0161480d565b945061493b60e08d016146d0565b935061494a6101008d016146d0565b925061495a8d6101208e0161481e565b91506101608c013590509295989b509295989b9093969950565b8015158114610afd57600080fd5b600080600080600060a0868803121561499a57600080fd5b85356149a5816146bb565b945060208601356149b5816146bb565b93506040860135925060608601356149cc816146bb565b915060808601356149dc81614974565b809150509295509295909350565b600080604083850312156149fd57600080fd5b8235614a08816146bb565b91506020830135614a18816146bb565b809150509250929050565b600080600060608486031215614a3857600080fd5b8335614a43816146bb565b9250602084013591506040840135614a5a816146bb565b809150509250925092565b600181811c90821680614a7957607f821691505b602082108103614a9957634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252600a90820152691c994b595b9d195c995960b21b604082015260600190565b600060208284031215614ad557600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610ae657610ae6614adc565b81810381811115610ae657610ae6614adc565b6001600160a01b038481168252831660208201526060810160028310614b4e57634e487b7160e01b600052602160045260246000fd5b826040830152949350505050565b8082028115828204841417610ae657610ae6614adc565b600082614b9057634e487b7160e01b600052601260045260246000fd5b500490565b6001600160a01b038316815260406020820181905260009061261690830184614663565b600060208284031215614bcb57600080fd5b81516110eb81614974565b6001600160a01b0384811682528316602082015260606040820181905260009061268a90830184614663565b600060018201614c1457614c14614adc565b5060010190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b601f8211156126f6576000816000526020600020601f850160051c81016020861015614cb35750805b601f850160051c820191505b81811015614cd257828155600101614cbf565b505050505050565b815167ffffffffffffffff811115614cf457614cf461476a565b614d0881614d028454614a65565b84614c8a565b602080601f831160018114614d3d5760008415614d255750858301515b600019600386901b1c1916600185901b178555614cd2565b600085815260208120601f198616915b82811015614d6c57888601518255948401946001909101908401614d4d565b5085821015614d8a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60008060408385031215614dad57600080fd5b505080516020909101519092909150565b60008251614dd081846020870161463f565b919091019291505056fe7365745265647563655265736572766573426c6f636b44656c74612875696e7432353629ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220ea8b111e42a34b649ca4a2dd9f75e129412dd50037fa3a998ff5958bd540d05864736f6c6343000819003300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002819a000000000000000000000000000000000000000000000000000000048c27395000