0 txs
114 calls
constructor
constructor(address sysRegistry)
functions
accessController
viewfunction accessController() view returns (address)
allowance
viewfunction allowance(address owner, address spender) view returns (uint256)
balanceOf
viewfunction balanceOf(address account) view returns (uint256)
balanceOfUnderlyingDebt
viewfunction balanceOfUnderlyingDebt() view returns (uint256)
baseAsset
viewfunction baseAsset() view returns (address)
crv
viewfunction crv() view returns (address)
decimals
viewfunction decimals() view returns (uint8)
destType
purefunction destType() pure returns (string)
exchangeName
purefunction exchangeName() pure returns (string)
extension
viewfunction extension() view returns (address)
extensionSetTime
viewfunction extensionSetTime() view returns (uint256)
externalDebtBalance
viewfunction externalDebtBalance() view returns (uint256)
externalQueriedBalance
viewfunction externalQueriedBalance() view returns (uint256)
gauge
viewfunction gauge() view returns (address)
getPool
viewfunction getPool() view returns (address)
getStats
viewfunction getStats() view returns (address)
getSystemRegistry
viewfunction getSystemRegistry() view returns (address)
internalDebtBalance
purefunction internalDebtBalance() pure returns (uint256)
internalQueriedBalance
viewfunction internalQueriedBalance() view returns (uint256)
isShutdown
viewfunction isShutdown() view returns (bool)
isTrackedToken
viewfunction isTrackedToken(address token) view returns (bool)
isValidSignature
viewfunction isValidSignature(bytes32 hash, bytes) view returns (bytes4 magicValue)
minter
viewfunction minter() view returns (address)
name
viewfunction name() view returns (string)
ONE
viewfunction ONE() view returns (uint256)
poolDealInEth
viewfunction poolDealInEth() view returns (bool)
poolType
viewfunction poolType() view returns (string)
recoupMaxCredit
viewfunction recoupMaxCredit() view returns (uint256)
rewarder
viewfunction rewarder() view returns (address)
shutdownStatus
viewfunction shutdownStatus() view returns (uint8)
signedMessages
viewfunction signedMessages(bytes32) view returns (bool)
symbol
viewfunction symbol() view returns (string)
totalSupply
viewfunction totalSupply() view returns (uint256)
trackedTokens
viewfunction trackedTokens() view returns (address[] trackedTokensArr)
underlying
viewfunction underlying() view returns (address)
underlyingReserves
viewfunction underlyingReserves() view returns (address[] tokens, uint256[] amounts)
underlyingTokens
viewfunction underlyingTokens() view returns (address[] result)
underlyingTotalSupply
viewfunction underlyingTotalSupply() view returns (uint256)
approve
nonpayablefunction approve(address spender, uint256 amount) returns (bool)
collectRewards
nonpayablefunction collectRewards() returns (uint256[] amounts, address[] tokens)
debtValue
nonpayablefunction debtValue(uint256 shares) returns (uint256 value)
decreaseAllowance
nonpayablefunction decreaseAllowance(address spender, uint256 subtractedValue) returns (bool)
depositUnderlying
nonpayablefunction depositUnderlying(uint256 amount) returns (uint256 shares)
executeExtension
nonpayablefunction executeExtension(bytes data)
getMarketplaceRewards
nonpayablefunction getMarketplaceRewards() returns (uint256[] rewardTokens, uint256[] rewardRates)
getRangePricesLP
nonpayablefunction getRangePricesLP() returns (uint256, uint256, bool)
getUnderlyerCeilingPrice
nonpayablefunction getUnderlyerCeilingPrice() returns (uint256 price)
getUnderlyerFloorPrice
nonpayablefunction getUnderlyerFloorPrice() returns (uint256 price)
getValidatedSafePrice
nonpayablefunction getValidatedSafePrice() returns (uint256 price)
getValidatedSpotPrice
nonpayablefunction getValidatedSpotPrice() returns (uint256 price)
increaseAllowance
nonpayablefunction increaseAllowance(address spender, uint256 addedValue) returns (bool)
initialize
nonpayablefunction initialize(address baseAsset_, address underlyer_, address rewarder_, address incentiveCalculator_, address[] additionalTrackedTokens_, bytes params_)
recover
nonpayablefunction recover(address[] tokens, uint256[] amounts, address[] destinations)
recoverUnderlying
nonpayablefunction recoverUnderlying(address destination)
setExtension
nonpayablefunction setExtension(address extension_)
setIncentiveCalculator
nonpayablefunction setIncentiveCalculator(address incentiveCalculator_)
setMessage
nonpayablefunction setMessage(bytes32 hash, bool flag)
setRecoupMaxCredit
nonpayablefunction setRecoupMaxCredit(uint256 newCredit)
shutdown
nonpayablefunction shutdown(uint8 reason)
transfer
nonpayablefunction transfer(address to, uint256 amount) returns (bool)
transferFrom
nonpayablefunction transferFrom(address from, address to, uint256 amount) returns (bool)
withdrawBaseAsset
nonpayablefunction withdrawBaseAsset(uint256 shares, address to) returns (uint256 amount, address[] tokens, uint256[] tokenAmounts)
withdrawUnderlying
nonpayablefunction withdrawUnderlying(uint256 shares, address to) returns (uint256 amount)
events
Approval
event Approval(address indexed owner, address indexed spender, uint256 value)
BaseAssetWithdraw
event BaseAssetWithdraw(uint256 amount, address owner, address to)
Donated
event Donated(address sender, uint256 amount)
ExtensionSet
event ExtensionSet(address extension)
IncentiveCalculatorUpdated
event IncentiveCalculatorUpdated(address calculator)
Initialized
event Initialized(uint8 version)
MaxRecoupCreditSet
event MaxRecoupCreditSet(uint256 newCredit)
Recovered
event Recovered(address[] tokens, uint256[] amounts, address[] destinations)
Shutdown
event Shutdown(uint8 reason)
Transfer
event Transfer(address indexed from, address indexed to, uint256 value)
UnderlyerRecovered
event UnderlyerRecovered(address destination, uint256 amount)
UnderlyingDeposited
event UnderlyingDeposited(uint256 amount, address sender)
UnderlyingWithdraw
event UnderlyingWithdraw(uint256 amount, address owner, address to)
UpdateSignedMessage
event UpdateSignedMessage(bytes32 hash, bool flag)
Withdraw
event Withdraw(uint256 target, uint256 actual, uint256 debtLoss, uint256 claimLoss, uint256 fromIdle, uint256 fromDebt)
errors
AccessDenied
error AccessDenied()
ArrayLengthMismatch
error ArrayLengthMismatch()
ArrayLengthMismatch
error ArrayLengthMismatch(uint256 length1, uint256 length2, string details)
BaseAmountReceived
error BaseAmountReceived(uint256 amount)
DuplicateToken
error DuplicateToken(address token)
ExtensionAmountMismatch
error ExtensionAmountMismatch()
ExtensionNotActive
error ExtensionNotActive()
InvalidIncentiveCalculator
error InvalidIncentiveCalculator(address calc, address local, string param)
InvalidParam
error InvalidParam(string paramName)
InvalidShutdownStatus
error InvalidShutdownStatus(uint8 status)
LogicDefect
error LogicDefect()
NothingToRecover
error NothingToRecover()
PricesOutOfRange
error PricesOutOfRange(uint256 spot, uint256 safe)
PullingNonTrackedToken
error PullingNonTrackedToken(address token)
RecoveringMoreThanAvailable
error RecoveringMoreThanAvailable(address token, uint256 amount, uint256 availableAmount)
RecoveringTrackedToken
error RecoveringTrackedToken(address token)
UndefinedAddress
error UndefinedAddress()
VaultShutdown
error VaultShutdown()
ZeroAddress
error ZeroAddress(string paramName)
ZeroAddress
error ZeroAddress(string paramName)
creation bytecode
0x60c060405234801562000010575f80fd5b506040516200622d3803806200622d83398101604081905262000033916200026e565b808060405180602001604052805f81525060405180602001604052805f81525082836001600160a01b031663bc43cbaf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000091573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620000b791906200026e565b6001600160a01b038116620000df57604051630cbe126f60e11b815260040160405180910390fd5b6001600160a01b031660805260408051808201909152600f81526e5f73797374656d526567697374727960881b60208201526200011e9082906200015e565b6001600160a01b031660a052600362000138838262000331565b50600462000147828262000331565b506200015591505062000197565b5050506200044b565b6001600160a01b03821662000193578060405163eac0d38960e01b81526004016200018a9190620003fd565b60405180910390fd5b5050565b600554610100900460ff1615620002015760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b60648201526084016200018a565b60055460ff908116101562000254576005805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146200026b575f80fd5b50565b5f602082840312156200027f575f80fd5b81516200028c8162000256565b9392505050565b634e487b7160e01b5f52604160045260245ffd5b600181811c90821680620002bc57607f821691505b602082108103620002db57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200032c57805f5260205f20601f840160051c81016020851015620003085750805b601f840160051c820191505b8181101562000329575f815560010162000314565b50505b505050565b81516001600160401b038111156200034d576200034d62000293565b62000365816200035e8454620002a7565b84620002e1565b602080601f8311600181146200039b575f8415620003835750858301515b5f19600386901b1c1916600185901b178555620003f5565b5f85815260208120601f198616915b82811015620003cb57888601518255948401946001909101908401620003aa565b5085821015620003e957878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f602080835283518060208501525f5b818110156200042b578581018301518582016040015282016200040d565b505f604082860101526040601f19601f8301168501019250505092915050565b60805160a051615d1f6200050e5f395f8181610b5401528181611446015281816115420152818161179101528181611cb501528181611e8c01528181612522015281816126a801528181612794015281816129f101528181613010015281816138fe01528181613c7301528181613e0001526142ad01525f818161098701528181610bc501528181610f7101528181611141015281816116dd0152818161199301528181611bcf015281816120800152818161220401526128f80152615d1f5ff3fe6080604052600436106103ab575f3560e01c806370bb45b3116101e9578063bd27dc9f11610108578063dcc3e06e1161009d578063ef1296681161006d578063ef12966814610b13578063effef69414610b27578063f12baf5c14610b46578063f18a6b7814610b78575f80fd5b8063dcc3e06e14610aa6578063dd62ed3e14610ac3578063ded74a3614610ae2578063e23235fb14610af4575f80fd5b8063c59d4847116100d8578063c59d484714610a08578063c742aaa614610a25578063cdf456e114610a53578063d6d4672014610a75575f80fd5b8063bd27dc9f146109a9578063bef893e8146109bd578063bf86d690146109dc578063c2ee3a08146109f3575f80fd5b8063a6f19c841161017e578063b1dd61b61161014e578063b1dd61b614610924578063b9f5be4114610938578063ba3b39f914610957578063bc43cbaf14610976575f80fd5b8063a6f19c84146108ae578063a9059cbb146108d2578063ab622d9a146108f1578063ae41ee4d14610910575f80fd5b806395d89b41116101b957806395d89b411461083d57806399f428cf146108515780639a23258a14610870578063a457c2d71461088f575f80fd5b806370bb45b3146107dd5780638431e96a146107ff57806385038567146108145780638a3dd6cf14610829575f80fd5b806339509351116102d55780635ae6bd371161026a5780636b6bf1c41161023a5780636b6bf1c4146107645780636f307dc314610778578063708b0b5b1461079557806370a08231146107a9575f80fd5b80635ae6bd37146106e45780635ed3a9bc146107125780636a2384f2146107315780636a4874a114610745575f80fd5b806349bc238e116102a557806349bc238e1461066e5780634c37ef23146106825780634f269925146106a35780634f68ea5f146106b7575f80fd5b806339509351146105eb57806339982fd41461060a5780633dfa2b9e1461063c578063475c326a1461065a575f80fd5b80631626ba7e1161034b578063295b001f1161031b578063295b001f146105685780632d5537b0146105875780632e4c9697146105a6578063313ce567146105ca575f80fd5b80631626ba7e146104c857806318160ddd1461050057806323b872dd1461051457806324ec783f14610533575f80fd5b806306fdde031161038657806306fdde031461042c578063075461721461044d578063095ea7b31461046c5780631061be651461049b575f80fd5b8063026b1d5f146103b657806304e7d9d9146103ec57806304f3df781461040d575f80fd5b366103b257005b5f80fd5b3480156103c1575f80fd5b506014546001600160a01b03165b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103f7575f80fd5b5061040b610406366004614d18565b610b9a565b005b348015610418575f80fd5b5061040b610427366004614d83565b610f46565b348015610437575f80fd5b5061044061100c565b6040516103e39190614de7565b348015610458575f80fd5b506017546103cf906001600160a01b031681565b348015610477575f80fd5b5061048b610486366004614e10565b61109c565b60405190151581526020016103e3565b3480156104a6575f80fd5b506104ba6104b5366004614d83565b6110b5565b6040519081526020016103e3565b3480156104d3575f80fd5b506104e76104e2366004614ef6565b6110bf565b6040516001600160e01b031990911681526020016103e3565b34801561050b575f80fd5b506002546104ba565b34801561051f575f80fd5b5061048b61052e366004614f39565b6110f3565b34801561053e575f80fd5b5061055a604080515f8082526020820190815281830190925291565b6040516103e3929190614fb1565b348015610573575f80fd5b5061040b610582366004614fd5565b611116565b348015610592575f80fd5b506011546103cf906001600160a01b031681565b3480156105b1575f80fd5b50600e54610100900460ff166040516103e39190615007565b3480156105d5575f80fd5b5060085460405160ff90911681526020016103e3565b3480156105f6575f80fd5b5061048b610605366004614e10565b611278565b348015610615575f80fd5b5060408051808201909152600a81526967617567655374616b6560b01b6020820152610440565b348015610647575f80fd5b50601454600160a01b900460ff1661048b565b348015610665575f80fd5b506104ba611299565b348015610679575f80fd5b506104ba611309565b34801561068d575f80fd5b5061069661131c565b6040516103e39190615065565b3480156106ae575f80fd5b506104ba6113bb565b3480156106c2575f80fd5b50604080518082019091526005815264637572766560d81b6020820152610440565b3480156106ef575f80fd5b5061048b6106fe366004614d83565b60106020525f908152604090205460ff1681565b34801561071d575f80fd5b5061048b61072c366004615077565b611402565b34801561073c575f80fd5b506104ba61140e565b348015610750575f80fd5b506018546103cf906001600160a01b031681565b34801561076f575f80fd5b506104ba611443565b348015610783575f80fd5b506009546001600160a01b03166103cf565b3480156107a0575f80fd5b506104ba61153c565b3480156107b4575f80fd5b506104ba6107c3366004615077565b6001600160a01b03165f9081526020819052604090205490565b3480156107e8575f80fd5b506107f1611692565b6040516103e3929190615092565b34801561080a575f80fd5b506104ba60125481565b34801561081f575f80fd5b506104ba60135481565b348015610834575f80fd5b506104ba611775565b348015610848575f80fd5b5061044061177f565b34801561085c575f80fd5b506104ba61086b3660046150b6565b61178e565b34801561087b575f80fd5b5061040b61088a366004615077565b611955565b34801561089a575f80fd5b5061048b6108a9366004614e10565b611b1d565b3480156108b9575f80fd5b506016546103cf9061010090046001600160a01b031681565b3480156108dd575f80fd5b5061048b6108ec366004614e10565b611b97565b3480156108fc575f80fd5b5061040b61090b366004615077565b611ba4565b34801561091b575f80fd5b506104ba611caf565b34801561092f575f80fd5b50610440611e04565b348015610943575f80fd5b506104ba610952366004614d83565b611e89565b348015610962575f80fd5b5061040b6109713660046150f1565b612042565b348015610981575f80fd5b506103cf7f000000000000000000000000000000000000000000000000000000000000000081565b3480156109b4575f80fd5b50610696612167565b3480156109c8575f80fd5b5061040b6109d736600461515b565b6121c6565b3480156109e7575f80fd5b50600e5460ff1661048b565b3480156109fe575f80fd5b506104ba600f5481565b348015610a13575f80fd5b50600a546001600160a01b03166103cf565b348015610a30575f80fd5b50610a44610a3f3660046150b6565b61251c565b6040516103e3939291906151ed565b348015610a5e575f80fd5b5060085461010090046001600160a01b03166103cf565b348015610a80575f80fd5b50610a8961263d565b6040805193845260208401929092521515908201526060016103e3565b348015610ab1575f80fd5b50600b546001600160a01b03166103cf565b348015610ace575f80fd5b506104ba610add366004615217565b612890565b348015610aed575f80fd5b505f6104ba565b348015610aff575f80fd5b5061040b610b0e366004615077565b6128ba565b348015610b1e575f80fd5b506104ba6129ee565b348015610b32575f80fd5b5061040b610b41366004615265565b612a97565b348015610b51575f80fd5b507f00000000000000000000000000000000000000000000000000000000000000006103cf565b348015610b83575f80fd5b50610b8c612c88565b6040516103e3929190615369565b604051632474521560e21b81525f80516020615cca83398151915260048201819052336024830152907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906391d1485490604401602060405180830381865afa158015610c12573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c36919061538b565b610c5357604051634ca8886760e01b815260040160405180910390fd5b60115460408051808201909152600981526832bc3a32b739b4b7b760b91b6020820152610c89916001600160a01b031690612e05565b601254610c999062093a806153ba565b421015610cb957604051631c6784d760e11b815260040160405180910390fd5b5f610cc4600c612e2e565b90505f816001600160401b03811115610cdf57610cdf614e3a565b604051908082528060200260200182016040528015610d08578160200160208202803683370190505b5090505f610d14611775565b90505f80610d2061140e565b90505f610d2b6113bb565b90505f5b86811015610dcf57610d42600c82612e37565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015610d86573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610daa91906153cd565b868281518110610dbc57610dbc6153e4565b6020908102919091010152600101610d2f565b50610e228989604051602401610de69291906153f8565b60408051601f198184030181529190526020810180516001600160e01b03166304e2f55f60e11b1790526011546001600160a01b031690612e49565b505f5b86811015610ee3575f610e39600c83612e37565b6040516370a0823160e01b81523060048201529091506001600160a01b038216906370a0823190602401602060405180830381865afa158015610e7e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ea291906153cd565b878381518110610eb457610eb46153e4565b602002602001015114610eda576040516358236f3360e01b815260040160405180910390fd5b50600101610e25565b50610eec611775565b84141580610ef957508215155b80610f0b5750610f0761140e565b8214155b80610f1d5750610f196113bb565b8114155b15610f3b576040516358236f3360e01b815260040160405180910390fd5b505050505050505050565b604051632474521560e21b81525f80516020615cca83398151915260048201819052336024830152907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906391d1485490604401602060405180830381865afa158015610fbe573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fe2919061538b565b610fff57604051634ca8886760e01b815260040160405180910390fd5b61100882612e6e565b5050565b60606006805461101b90615426565b80601f016020809104026020016040519081016040528092919081815260200182805461104790615426565b80156110925780601f1061106957610100808354040283529160200191611092565b820191905f5260205f20905b81548152906001019060200180831161107557829003601f168201915b5050505050905090565b5f336110a9818585612ee7565b60019150505b92915050565b5f6110af8261300a565b5f8281526010602052604081205460ff16156110e35750630b135d3f60e11b6110af565b506001600160e01b031992915050565b5f33611100858285613186565b61110b8585856131f8565b506001949350505050565b604051632474521560e21b81525f80516020615cca83398151915260048201819052336024830152907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906391d1485490604401602060405180830381865afa15801561118e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111b2919061538b565b6111cf57604051634ca8886760e01b815260040160405180910390fd5b5f8260028111156111e2576111e2614ff3565b0361120b5781604051632b35653160e21b81526004016112029190615007565b60405180910390fd5b600e8054600160ff1982168117835584929161ffff19161761010083600281111561123857611238614ff3565b02179055507fc85216bd9ad96664f2f809d1ac5ee9868b286dd7374145090ee1b669a8f39cc98260405161126c9190615007565b60405180910390a15050565b5f336110a981858561128a8383612890565b61129491906153ba565b612ee7565b600954604080516318160ddd60e01b815290515f926001600160a01b0316916318160ddd9160048083019260209291908290030181865afa1580156112e0573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061130491906153cd565b905090565b5f611312611775565b611304905f6153ba565b60605f611329600c612e2e565b9050806001600160401b0381111561134357611343614e3a565b60405190808252806020026020018201604052801561136c578160200160208202803683370190505b5091505f5b818110156113b657611384600c82612e37565b838281518110611396576113966153e4565b6001600160a01b0390921660209283029190910190910152600101611371565b505090565b6009546040516370a0823160e01b81523060048201525f916001600160a01b0316906370a08231906024015b602060405180830381865afa1580156112e0573d5f803e3d5ffd5b5f6110af600c836133ab565b6016546040516370a0823160e01b81523060048201525f9161010090046001600160a01b0316906370a08231906024016113e7565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f3c274f76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114a0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114c4919061545e565b6009546001600160a01b039182169163c712bf7791166114ec6014546001600160a01b031690565b60085460405160e085901b6001600160e01b031916815261152093929161010090046001600160a01b031690600401615479565b6020604051808303815f875af11580156112e0573d5f803e3d5ffd5b5f805f807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f3c274f76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561159c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115c0919061545e565b6009546001600160a01b0391821691630a13bf7691166115e86014546001600160a01b031690565b60085460405160e085901b6001600160e01b031916815261161c93929161010090046001600160a01b031690600401615479565b6060604051808303815f875af1158015611638573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061165c919061549c565b9250925092508061168a57604051637d60443b60e01b81526004810184905260248101839052604401611202565b509092915050565b604051632474521560e21b81527f5e17fc5225d4a099df75359ce1f405503ca79498a8dc46a7d583235a0ee45c16600482018190523360248301526060918291906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906391d1485490604401602060405180830381865afa158015611722573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611746919061538b565b61176357604051634ca8886760e01b815260040160405180910390fd5b61176b6133cc565b9094909350915050565b5f61130460025490565b60606007805461101b90615426565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663047e51386040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117eb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061180f919061545e565b60405163652b9b4160e01b81523360048201526001600160a01b03919091169063652b9b4190602401602060405180830381865afa158015611853573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611877919061538b565b61189457604051634ca8886760e01b815260040160405180910390fd5b6118bc836040518060400160405280600681526020016573686172657360d01b81525061347b565b6118e08260405180604001604052806002815260200161746f60f01b815250612e05565b50604080518381523360208201526001600160a01b03831681830152905183917f04dbc61863fa17cd9ca84aeedb5ef6e85ec76d872a1147dad41ab9c3b1885d5a919081900360600190a1611935338461349d565b61193e816135e3565b6009546110af906001600160a01b0316838361366a565b604051632474521560e21b81527f712b73613835f525c3c675d2245c737ba70afbd0b97264479c97d623f214159460048201819052336024830152907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906391d1485490604401602060405180830381865afa1580156119e0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a04919061538b565b611a2157604051634ca8886760e01b815260040160405180910390fd5b611a4e826040518060400160405280600b81526020016a3232b9ba34b730ba34b7b760a91b815250612e05565b5f611a57611775565b611a5f61140e565b611a6991906154d2565b90505f80611a756113bb565b611a7f90846153ba565b611a8991906154d2565b90508015611afe578115611aa057611aa0826135e3565b604080516001600160a01b0386168152602081018390527fcf821d331dbbe36191c974313332c4f7c8a6281508649a33c9e01327f56435a6910160405180910390a1600954611af9906001600160a01b0316858361366a565b611b17565b60405163157474a960e31b815260040160405180910390fd5b50505050565b5f3381611b2a8286612890565b905083811015611b8a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401611202565b61110b8286868403612ee7565b5f336110a98185856131f8565b604051632474521560e21b81525f80516020615cca83398151915260048201819052336024830152907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906391d1485490604401602060405180830381865afa158015611c1c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c40919061538b565b611c5d57604051634ca8886760e01b815260040160405180910390fd5b601180546001600160a01b0319166001600160a01b038416908117909155426012556040519081527f95b327607d2bbf1cffe47138cb6115d03ee5796331cfe9c3d72a52000e1a38909060200161126c565b5f805f807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f3c274f76040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d0f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d33919061545e565b6009546001600160a01b0391821691630a13bf769116611d5b6014546001600160a01b031690565b60085460405160e085901b6001600160e01b0319168152611d8f93929161010090046001600160a01b031690600401615479565b6060604051808303815f875af1158015611dab573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611dcf919061549c565b92509250925080611dfd57604051637d60443b60e01b81526004810184905260248101839052604401611202565b5092915050565b601454606090600160a81b900460ff1615611e3b575060408051808201909152600781526663757276654e4760c81b602082015290565b60165460ff16611e67575060408051808201909152600781526631bab93b32ab1960c91b602082015290565b506040805180820190915260078152666375727665563160c81b602082015290565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663047e51386040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ee6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f0a919061545e565b60405163652b9b4160e01b81523360048201526001600160a01b03919091169063652b9b4190602401602060405180830381865afa158015611f4e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f72919061538b565b611f8f57604051634ca8886760e01b815260040160405180910390fd5b600e5460ff1615611fb3576040516310e126e160e21b815260040160405180910390fd5b611fdb8260405180604001604052806006815260200165185b5bdd5b9d60d21b81525061347b565b604080518381523360208201527f866646ea9ef6b3afb2a58e44919e0f660fb62a3262f144f2b701f1b09aa2c296910160405180910390a160095461202b906001600160a01b03163330856136cd565b6120353383613705565b61203e826137d4565b5090565b604051632474521560e21b81527f34a7520d3d78202e2ebf2e8fd1438c03a5b2d8f76e9ed166769da91b4084c8a960048201819052336024830152907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906391d1485490604401602060405180830381865afa1580156120cd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120f1919061538b565b61210e57604051634ca8886760e01b815260040160405180910390fd5b5f83815260106020908152604091829020805460ff19168515159081179091558251868152918201527f1030874ae78433c5cd3ece5daa7f80d066ee9b53a155bc49aaed4d0f22d5a73f910160405180910390a1505050565b6060601580548060200260200160405190810160405280929190818152602001828054801561109257602002820191905f5260205f20905b81546001600160a01b0316815260019091019060200180831161219f575050505050905090565b604051632474521560e21b81527f712b73613835f525c3c675d2245c737ba70afbd0b97264479c97d623f214159460048201819052336024830152907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906391d1485490604401602060405180830381865afa158015612251573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612275919061538b565b61229257604051634ca8886760e01b815260040160405180910390fd5b858015806122a05750808514155b806122ab5750808314155b156122c95760405163512509d360e11b815260040160405180910390fd5b7ff39611ede4b5cd67b9530e5a20e28f62c0fdc17b70f581473bdacff704568b5b88888888888860405161230296959493929190615521565b60405180910390a15f5b87811015610f3b575f898983818110612327576123276153e4565b905060200201602081019061233c9190615077565b90506123688a8a84818110612353576123536153e4565b905060200201602081019061072c9190615077565b156123b95789898381811061237f5761237f6153e4565b90506020020160208101906123949190615077565b604051634565216360e01b81526001600160a01b039091166004820152602401611202565b6040516370a0823160e01b81523060048201525f906001600160a01b038316906370a0823190602401602060405180830381865afa1580156123fd573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061242191906153cd565b9050888884818110612435576124356153e4565b905060200201358110156124b6578a8a84818110612455576124556153e4565b905060200201602081019061246a9190615077565b89898581811061247c5761247c6153e4565b6040516315b89f7d60e31b81526001600160a01b039094166004850152602002919091013560248301525060448101829052606401611202565b6125128787858181106124cb576124cb6153e4565b90506020020160208101906124e09190615077565b8a8a868181106124f2576124f26153e4565b90506020020135846001600160a01b031661366a9092919063ffffffff16565b505060010161230c565b5f6060807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663047e51386040518163ffffffff1660e01b8152600401602060405180830381865afa15801561257c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125a0919061545e565b60405163652b9b4160e01b81523360048201526001600160a01b03919091169063652b9b4190602401602060405180830381865afa1580156125e4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612608919061538b565b61262557604051634ca8886760e01b815260040160405180910390fd5b612630338686613830565b9250925092509250925092565b5f80807ffc81bd616f118bdcf66cdac468c182004d847e601b62a21fabad5c18673e73cc816126746014546001600160a01b031690565b6009546008546040516387fbcf6160e01b8152600481018690529293506001600160a01b03918216926101009091048216917f000000000000000000000000000000000000000000000000000000000000000016906387fbcf6190602401602060405180830381865afa92505050801561270b575060408051601f3d908101601f191682019092526127089181019061545e565b60015b1561279257604051630509dfbb60e11b81526001600160a01b03821690630a13bf769061274090869088908790600401615479565b6060604051808303815f875af192505050801561277a575060408051601f3d908101601f191682019092526127779181019061549c565b60015b1561279057919a90995090975095505050505050565b505b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f3c274f76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127ee573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612812919061545e565b6001600160a01b0316630a13bf768385846040518463ffffffff1660e01b815260040161284193929190615479565b6060604051808303815f875af115801561285d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612881919061549c565b96509650965050505050909192565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b604051632474521560e21b81527f34a7520d3d78202e2ebf2e8fd1438c03a5b2d8f76e9ed166769da91b4084c8a960048201819052336024830152907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906391d1485490604401602060405180830381865afa158015612945573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612969919061538b565b61298657604051634ca8886760e01b815260040160405180910390fd5b61298f82613b3a565b6040516001600160a01b03831681527f693da31e3409e3c3e0be8167721f63c21c27ff4cab470a84638df198069f869e9060200160405180910390a150600a80546001600160a01b0319166001600160a01b0392909216919091179055565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f3c274f76040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a4b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a6f919061545e565b6009546001600160a01b039182169163eeaad0bf91166114ec6014546001600160a01b031690565b5f81806020019051810190612aac91906155f2565b9050612afb8787878787865f0151604051602001612ae7919081516001600160a01b0316815260209182015115159181019190915260400190565b604051602081830303815290604052613bfc565b612b26816020015160405180604001604052806005815260200164676175676560d81b815250612e05565b612b5281604001516040518060400160405280600681526020016536b4b73a32b960d11b815250612e05565b612b7b81606001516040518060400160405280600381526020016231b93b60e91b815250612e05565b602080820151601680546001600160a01b039283166101008102610100600160a81b031990921691909117909155604080850151601780549185166001600160a01b0319928316179055606086015160188054919095169116179092558151634163183360e11b815291515f9391926382c630669260048083019391928290030181865afa158015612c0f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c33919061545e565b6009549091506001600160a01b03808316911614612c7e57604051634389d5ab60e01b815260206004820152600760248201526636382a37b5b2b760c91b6044820152606401611202565b5050505050505050565b6015546060908190806001600160401b03811115612ca857612ca8614e3a565b604051908082528060200260200182016040528015612cd1578160200160208202803683370190505b509250806001600160401b03811115612cec57612cec614e3a565b604051908082528060200260200182016040528015612d15578160200160208202803683370190505b5091505f5b81811015612dff5760158181548110612d3557612d356153e4565b905f5260205f20015f9054906101000a90046001600160a01b0316848281518110612d6257612d626153e4565b6001600160a01b039283166020918202929092010152601454604051634903b0d160e01b815260048101849052911690634903b0d190602401602060405180830381865afa158015612db6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612dda91906153cd565b838281518110612dec57612dec6153e4565b6020908102919091010152600101612d1a565b50509091565b6001600160a01b038216611008578060405163eac0d38960e01b81526004016112029190614de7565b5f6110af825490565b5f612e428383613fad565b9392505050565b6060612e428383604051806060016040528060278152602001615ca360279139613fd3565b612710811115612ead57604051634389d5ab60e01b81526020600482015260096024820152681b995dd0dc99591a5d60ba1b6044820152606401611202565b60138190556040518181527ec9cfd00415c379a14eb9c5aa1f6f93a74074d21cdc013cd8ed98af2ec2955b9060200160405180910390a150565b6001600160a01b038316612f495760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401611202565b6001600160a01b038216612faa5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401611202565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f805f807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f3c274f76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561306a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061308e919061545e565b6009546001600160a01b0391821691630a13bf7691166130b66014546001600160a01b031690565b60085460405160e085901b6001600160e01b03191681526130ea93929161010090046001600160a01b031690600401615479565b6060604051808303815f875af1158015613106573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061312a919061549c565b9250925092508061315857604051637d60443b60e01b81526004810184905260248101839052604401611202565b6008546131699060ff16600a615753565b6131738684615761565b61317d9190615778565b95945050505050565b5f6131918484612890565b90505f198114611b1757818110156131eb5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401611202565b611b178484848403612ee7565b6001600160a01b03831661325c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401611202565b6001600160a01b0382166132be5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401611202565b6132c9838383614047565b6001600160a01b0383165f90815260208190526040902054818110156133405760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401611202565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3611b178484846140e1565b6001600160a01b0381165f9081526001830160205260408120541515612e42565b6016546017546018546040516363efa5bb60e11b81526101009093046001600160a01b0390811660048501529182166024840152166044820152600c606482015260609081907347e68bf5ae400a71d5ca1e3174e2c0a3e5c27b249063c7df4b76906084015f60405180830381865af415801561344b573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526134729190810190615863565b90939092509050565b815f036110085780604051634389d5ab60e01b81526004016112029190614de7565b6001600160a01b0382166134fd5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401611202565b613508825f83614047565b6001600160a01b0382165f908152602081905260409020548181101561357b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401611202565b6001600160a01b0383165f818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36135de835f846140e1565b505050565b600954601654604051636ce5768960e11b81526001600160a01b039283166004820152610100909104909116602482015260448101829052733ff09cb41bf373da448814101c019e8f12a295f49063d9caed12906064015b5f6040518083038186803b158015613651575f80fd5b505af4158015613663573d5f803e3d5ffd5b5050505050565b6040516001600160a01b0383166024820152604481018290526135de90849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614147565b6040516001600160a01b0380851660248301528316604482015260648101829052611b179085906323b872dd60e01b90608401613696565b6001600160a01b03821661375b5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401611202565b6137665f8383614047565b8060025f82825461377791906153ba565b90915550506001600160a01b0382165f81815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36110085f83836140e1565b600954601654604051638340f54960e01b81526001600160a01b039283166004820152610100909104909116602482015260448101829052733ff09cb41bf373da448814101c019e8f12a295f490638340f5499060640161363b565b5f60608061385c856040518060400160405280600681526020016573686172657360d01b81525061347b565b604080518681526001600160a01b03888116602083015286168183015290517fdaf261f6a2cf75c6b33475ee12e1ebf0ca3341779796004de863f25330fd32a79181900360600190a16138af868661349d565b6138b8856135e3565b6138c185614218565b8151815160408051808201909152600d81526c746f6b656e2b616d6f756e747360981b6020820152939550919350916138fb9183916143aa565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c31c9c076040518163ffffffff1660e01b8152600401602060405180830381865afa158015613958573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061397c919061545e565b90505f5b82811015613b0c575f85828151811061399b5761399b6153e4565b60200260200101519050600860019054906101000a90046001600160a01b03166001600160a01b0316816001600160a01b0316036139ff578482815181106139e5576139e56153e4565b6020026020010151876139f891906153ba565b9650613b03565b5f858381518110613a1257613a126153e4565b60200260200101511115613b0357613a448184878581518110613a3757613a376153e4565b60200260200101516143d0565b826001600160a01b031663f194f44882878581518110613a6657613a666153e4565b602090810291909101015160085460405160e085901b6001600160e01b03191681526001600160a01b0393841660048201526024810192909252610100900490911660448201525f60648201526084016020604051808303815f875af1158015613ad2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613af691906153cd565b613b0090886153ba565b96505b50600101613980565b508415613b2f57600854613b2f9061010090046001600160a01b0316878761366a565b505093509350939050565b5f816001600160a01b0316632b5663ec6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b77573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613b9b919061545e565b6009549091506001600160a01b0380831691161461100857600954604051630db614ef60e11b81526001600160a01b038084166004830152909116602482015260606044820152600260648201526106c760f41b608482015260a401611202565b5f81806020019051810190613c1191906158b8565b9050613c41815f01516040518060400160405280600981526020016818dd5c9d99541bdbdb60ba1b815250612e05565b8051601480546001600160a01b0319166001600160a01b03909216919091179055613c70878787878787614471565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636c27eaa46040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ccd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613cf1919061545e565b9050613d22816040518060400160405280600d81526020016c31bab93b32a932b9b7b63b32b960991b815250612e05565b8151604051631386d81360e01b81526001600160a01b0391821660048201525f9182918291829190861690631386d8139060240161016060405180830381865afa158015613d72573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613d9691906158d2565b9350935093509350613dc983604051806040016040528060098152602001686e756d546f6b656e7360b81b81525061347b565b613df2826040518060400160405280600781526020016636382a37b5b2b760c91b815250612e05565b5f805b84811015613f4b575f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633fc8cef36040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e5a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e7e919061545e565b90505f878360088110613e9357613e936153e4565b6020020151905083158015613eda575073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee888460088110613eca57613eca6153e4565b60200201516001600160a01b0316145b15613ee6575060019250805b613eef81614966565b60158054600180820183555f929092527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec4750180546001600160a01b0319166001600160a01b039390931692909217909155919091019050613df5565b506016805460ff191683151517905560208701516014805460ff60a81b1916600160a81b83151502179055613f805780613f82565b5f5b60148054911515600160a01b0260ff60a01b1990921691909117905550505050505050505050505050565b5f825f018281548110613fc257613fc26153e4565b905f5260205f200154905092915050565b60605f80856001600160a01b031685604051613fef919061597c565b5f60405180830381855af49150503d805f8114614027576040519150601f19603f3d011682016040523d82523d5f602084013e61402c565b606091505b509150915061403d86838387614971565b9695505050505050565b816001600160a01b0316836001600160a01b03160361406557505050565b6001600160a01b038316156135de57600b5460405163ead5d35960e01b81526001600160a01b038581166004830152602482018490525f60448301529091169063ead5d359906064015b5f604051808303815f87803b1580156140c6575f80fd5b505af11580156140d8573d5f803e3d5ffd5b50505050505050565b816001600160a01b0316836001600160a01b0316036140ff57505050565b6001600160a01b038216156135de57600b546040516356e4bb9760e11b81526001600160a01b038481166004830152602482018490529091169063adc9772e906044016140af565b5f61419b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166149f19092919063ffffffff16565b8051909150156135de57808060200190518101906141b9919061538b565b6135de5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401611202565b6060805f6015805490506001600160401b0381111561423957614239614e3a565b604051908082528060200260200182016040528015614262578160200160208202803683370190505b50905073c795a503140a4a2e73696bcdeba7b0cc3fe3bf1e63a60ca28f828660145f9054906101000a90046001600160a01b031660095f9054906101000a90046001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633fc8cef36040518163ffffffff1660e01b8152600401602060405180830381865afa158015614307573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061432b919061545e565b60145460405160e088901b6001600160e01b031916815261435e969594939291600160a81b900460ff1690600401615997565b5f60405180830381865af4158015614378573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261439f9190810190615a09565b909590945092505050565b8183146135de578282826040516358da50eb60e01b815260040161120293929190615a5e565b604051636eb1769f60e11b81523060048201526001600160a01b0383811660248301525f919085169063dd62ed3e90604401602060405180830381865afa15801561441d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061444191906153cd565b9050801561445d5761445d6001600160a01b03851684836149ff565b611b176001600160a01b0385168484614b08565b600554610100900460ff16158080156144915750600554600160ff909116105b806144ab5750303b1580156144ab575060055460ff166001145b61450e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401611202565b6005805460ff191660011790558015614531576005805461ff0019166101001790555b61455d876040518060400160405280600a8152602001696261736541737365745f60b01b815250612e05565b614589866040518060400160405280600a815260200169756e6465726c7965725f60b01b815250612e05565b6145b4856040518060400160405280600981526020016872657761726465725f60b81b815250612e05565b6145ea8460405180604001604052806014815260200173696e63656e7469766543616c63756c61746f725f60601b815250612e05565b866001600160a01b03166306fdde036040518163ffffffff1660e01b81526004015f60405180830381865afa158015614625573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261464c9190810190615a7c565b866001600160a01b03166306fdde036040518163ffffffff1660e01b81526004015f60405180830381865afa158015614687573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526146ae9190810190615a7c565b6040516020016146bf929190615ae4565b604051602081830303815290604052600690816146dc9190615b77565b50866001600160a01b03166395d89b416040518163ffffffff1660e01b81526004015f60405180830381865afa158015614718573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261473f9190810190615a7c565b866001600160a01b03166395d89b416040518163ffffffff1660e01b81526004015f60405180830381865afa15801561477a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526147a19190810190615a7c565b6040516020016147b2929190615c36565b604051602081830303815290604052600790816147cf9190615b77565b50856001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561480c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906148309190615c82565b6008805460ff191660ff92909216918217905561484e90600a615753565b600f55600880546001600160a01b03808a1661010002610100600160a81b031990921691909117909155600980548883166001600160a01b031991821617909155600b8054928816929091169190911790556148a984613b3a565b600a80546001600160a01b0319166001600160a01b0386161790556148cd87614966565b6148d686614966565b82515f5b8181101561490c576149048582815181106148f7576148f76153e4565b6020026020010151614966565b6001016148da565b506149176096612e6e565b5080156140d8576005805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050505050565b611008600c82614bb7565b606083156149df5782515f036149d8576001600160a01b0385163b6149d85760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401611202565b50816149e9565b6149e98383614bcb565b949350505050565b60606149e984845f85614bf5565b604051636eb1769f60e11b81523060048201526001600160a01b0383811660248301525f919085169063dd62ed3e90604401602060405180830381865afa158015614a4c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614a7091906153cd565b905081811015614ad45760405162461bcd60e51b815260206004820152602960248201527f5361666545524332303a2064656372656173656420616c6c6f77616e63652062604482015268656c6f77207a65726f60b81b6064820152608401611202565b6040516001600160a01b0384166024820152828203604482018190529061366390869063095ea7b360e01b90606401613696565b604051636eb1769f60e11b81523060048201526001600160a01b0383811660248301525f91839186169063dd62ed3e90604401602060405180830381865afa158015614b56573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614b7a91906153cd565b614b8491906153ba565b6040516001600160a01b038516602482015260448101829052909150611b1790859063095ea7b360e01b90606401613696565b5f612e42836001600160a01b038416614ccc565b815115614bdb5781518083602001fd5b8060405162461bcd60e51b81526004016112029190614de7565b606082471015614c565760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401611202565b5f80866001600160a01b03168587604051614c71919061597c565b5f6040518083038185875af1925050503d805f8114614cab576040519150601f19603f3d011682016040523d82523d5f602084013e614cb0565b606091505b5091509150614cc187838387614971565b979650505050505050565b5f818152600183016020526040812054614d1157508154600181810184555f8481526020808220909301849055845484825282860190935260409020919091556110af565b505f6110af565b5f8060208385031215614d29575f80fd5b82356001600160401b0380821115614d3f575f80fd5b818501915085601f830112614d52575f80fd5b813581811115614d60575f80fd5b866020828501011115614d71575f80fd5b60209290920196919550909350505050565b5f60208284031215614d93575f80fd5b5035919050565b5f5b83811015614db4578181015183820152602001614d9c565b50505f910152565b5f8151808452614dd3816020860160208601614d9a565b601f01601f19169290920160200192915050565b602081525f612e426020830184614dbc565b6001600160a01b0381168114614e0d575f80fd5b50565b5f8060408385031215614e21575f80fd5b8235614e2c81614df9565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b0381118282101715614e7657614e76614e3a565b604052919050565b5f6001600160401b03821115614e9657614e96614e3a565b50601f01601f191660200190565b5f82601f830112614eb3575f80fd5b8135614ec6614ec182614e7e565b614e4e565b818152846020838601011115614eda575f80fd5b816020850160208301375f918101602001919091529392505050565b5f8060408385031215614f07575f80fd5b8235915060208301356001600160401b03811115614f23575f80fd5b614f2f85828601614ea4565b9150509250929050565b5f805f60608486031215614f4b575f80fd5b8335614f5681614df9565b92506020840135614f6681614df9565b929592945050506040919091013590565b5f815180845260208085019450602084015f5b83811015614fa657815187529582019590820190600101614f8a565b509495945050505050565b604081525f614fc36040830185614f77565b828103602084015261317d8185614f77565b5f60208284031215614fe5575f80fd5b813560038110612e42575f80fd5b634e487b7160e01b5f52602160045260245ffd5b602081016003831061502757634e487b7160e01b5f52602160045260245ffd5b91905290565b5f815180845260208085019450602084015f5b83811015614fa65781516001600160a01b031687529582019590820190600101615040565b602081525f612e42602083018461502d565b5f60208284031215615087575f80fd5b8135612e4281614df9565b604081525f6150a46040830185614f77565b828103602084015261317d818561502d565b5f80604083850312156150c7575f80fd5b8235915060208301356150d981614df9565b809150509250929050565b8015158114614e0d575f80fd5b5f8060408385031215615102575f80fd5b8235915060208301356150d9816150e4565b5f8083601f840112615124575f80fd5b5081356001600160401b0381111561513a575f80fd5b6020830191508360208260051b8501011115615154575f80fd5b9250929050565b5f805f805f8060608789031215615170575f80fd5b86356001600160401b0380821115615186575f80fd5b6151928a838b01615114565b909850965060208901359150808211156151aa575f80fd5b6151b68a838b01615114565b909650945060408901359150808211156151ce575f80fd5b506151db89828a01615114565b979a9699509497509295939492505050565b838152606060208201525f615205606083018561502d565b828103604084015261403d8185614f77565b5f8060408385031215615228575f80fd5b823561523381614df9565b915060208301356150d981614df9565b5f6001600160401b0382111561525b5761525b614e3a565b5060051b60200190565b5f805f805f8060c0878903121561527a575f80fd5b863561528581614df9565b955060208781013561529681614df9565b955060408801356152a681614df9565b945060608801356152b681614df9565b935060808801356001600160401b03808211156152d1575f80fd5b818a0191508a601f8301126152e4575f80fd5b81356152f2614ec182615243565b81815260059190911b8301840190848101908d831115615310575f80fd5b938501935b8285101561533757843561532881614df9565b82529385019390850190615315565b9650505060a08a013592508083111561534e575f80fd5b505061535c89828a01614ea4565b9150509295509295509295565b604081525f614fc3604083018561502d565b8051615386816150e4565b919050565b5f6020828403121561539b575f80fd5b8151612e42816150e4565b634e487b7160e01b5f52601160045260245ffd5b808201808211156110af576110af6153a6565b5f602082840312156153dd575f80fd5b5051919050565b634e487b7160e01b5f52603260045260245ffd5b60208152816020820152818360408301375f818301604090810191909152601f909201601f19160101919050565b600181811c9082168061543a57607f821691505b60208210810361545857634e487b7160e01b5f52602260045260245ffd5b50919050565b5f6020828403121561546e575f80fd5b8151612e4281614df9565b6001600160a01b0393841681529183166020830152909116604082015260600190565b5f805f606084860312156154ae575f80fd5b835192506020840151915060408401516154c7816150e4565b809150509250925092565b818103818111156110af576110af6153a6565b8183525f60208085019450825f5b85811015614fa657813561550681614df9565b6001600160a01b0316875295820195908201906001016154f3565b606081525f61553460608301888a6154e5565b82810360208401528581526001600160fb1b03861115615552575f80fd5b8560051b80886020840137018281036020908101604085015261557890820185876154e5565b9998505050505050505050565b805161538681614df9565b5f604082840312156155a0575f80fd5b604051604081018181106001600160401b03821117156155c2576155c2614e3a565b806040525080915082516155d581614df9565b815260208301516155e5816150e4565b6020919091015292915050565b5f60a08284031215615602575f80fd5b604051608081018181106001600160401b038211171561562457615624614e3a565b6040526156318484615590565b8152604083015161564181614df9565b6020820152606083015161565481614df9565b6040820152608083015161566781614df9565b60608201529392505050565b600181815b808511156156ad57815f1904821115615693576156936153a6565b808516156156a057918102915b93841c9390800290615678565b509250929050565b5f826156c3575060016110af565b816156cf57505f6110af565b81600181146156e557600281146156ef5761570b565b60019150506110af565b60ff841115615700576157006153a6565b50506001821b6110af565b5060208310610133831016604e8410600b841016171561572e575081810a6110af565b6157388383615673565b805f190482111561574b5761574b6153a6565b029392505050565b5f612e4260ff8416836156b5565b80820281158282048414176110af576110af6153a6565b5f8261579257634e487b7160e01b5f52601260045260245ffd5b500490565b5f82601f8301126157a6575f80fd5b815160206157b6614ec183615243565b8083825260208201915060208460051b8701019350868411156157d7575f80fd5b602086015b848110156157f357805183529183019183016157dc565b509695505050505050565b5f82601f83011261580d575f80fd5b8151602061581d614ec183615243565b8083825260208201915060208460051b87010193508684111561583e575f80fd5b602086015b848110156157f357805161585681614df9565b8352918301918301615843565b5f8060408385031215615874575f80fd5b82516001600160401b038082111561588a575f80fd5b61589686838701615797565b935060208501519150808211156158ab575f80fd5b50614f2f858286016157fe565b5f604082840312156158c8575f80fd5b612e428383615590565b5f805f8061016085870312156158e6575f80fd5b85601f8601126158f4575f80fd5b6040516101008082018281106001600160401b038211171561591857615918614e3a565b6040528601818882111561592a575f80fd5b875b8281101561594d57805161593f81614df9565b82526020918201910161592c565b50505190945092506159626101208601615585565b9150615971610140860161537b565b905092959194509250565b5f825161598d818460208701614d9a565b9190910192915050565b60c080825287519082018190525f9060209060e0840190828b01845b828110156159cf578151845292840192908401906001016159b3565b505050602084019890985250506001600160a01b03948516604082015292841660608401529216608082015290151560a090910152919050565b5f8060408385031215615a1a575f80fd5b82516001600160401b0380821115615a30575f80fd5b615a3c868387016157fe565b93506020850151915080821115615a51575f80fd5b50614f2f85828601615797565b838152826020820152606060408201525f61317d6060830184614dbc565b5f60208284031215615a8c575f80fd5b81516001600160401b03811115615aa1575f80fd5b8201601f81018413615ab1575f80fd5b8051615abf614ec182614e7e565b818152856020838501011115615ad3575f80fd5b61317d826020830160208601614d9a565b67546f6b656d616b2d60c01b81525f8351615b06816008850160208801614d9a565b602d60f81b6008918401918201528351615b27816009840160208801614d9a565b01600901949350505050565b601f8211156135de57805f5260205f20601f840160051c81016020851015615b585750805b601f840160051c820191505b81811015613663575f8155600101615b64565b81516001600160401b03811115615b9057615b90614e3a565b615ba481615b9e8454615426565b84615b33565b602080601f831160018114615bd7575f8415615bc05750858301515b5f19600386901b1c1916600185901b178555615c2e565b5f85815260208120601f198616915b82811015615c0557888601518255948401946001909101908401615be6565b5085821015615c2257878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b64746f6b652d60d81b81525f8351615c55816005850160208801614d9a565b602d60f81b6005918401918201528351615c76816006840160208801614d9a565b01600601949350505050565b5f60208284031215615c92575f80fd5b815160ff81168114612e42575f80fdfe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c656409481f38c1f75ea3f4e6b830ae6282dea8b5240e5f5f64e334a7a8c1297254dda2646970667358221220603ddd0000eab83286aae34f46f60da95e17cefd69f8640ad5b4cbf20b26aa4964736f6c634300081800330000000000000000000000002218f90a98b0c070676f249ef44834686daa4285