4 txs
49 calls
constructor
constructor(address utilsAdr, address holdingAdr, address _tokenContractAdr)
functions
automator
viewfunction automator() view returns (address)
configFast
viewfunction configFast() view returns (uint80 cashOutPrice, uint80 buyBackPrice, uint24 minTradePercent)
configSlow
viewfunction configSlow() view returns (address pool, address base, address quote, uint256 tokenId, int8 decimalDiff)
correctPriceDirection
purefunction correctPriceDirection(address base, address quote, uint160 sqrtPriceX96) pure returns (uint160 sqrtPriceX96Corrected)
GAS_GRANT
viewfunction GAS_GRANT() view returns (uint256)
getDesiredAction
viewfunction getDesiredAction(uint160 price) view returns (uint8 action)
getPriceFromSqrtPriceX96
purefunction getPriceFromSqrtPriceX96(int8 decimalDiff, uint160 sqrtPriceX96) pure returns (uint80 price_12Decimals)
getSqrtPriceX96FromPrice
purefunction getSqrtPriceX96FromPrice(int8 decimalDiff, uint80 price_12Decimals) pure returns (uint160 sqrtPriceX96)
holdingContract
viewfunction holdingContract() view returns (address)
mulDiv
purefunction mulDiv(uint256 a, uint256 b, uint256 denominator) pure returns (uint256 result)
owner
viewfunction owner() view returns (address)
shouldExecute
viewfunction shouldExecute(uint256 handle) view returns (bool)
sqrt
purefunction sqrt(uint256 x) pure returns (uint128)
state
viewfunction state() view returns (uint80 lastTradedPrice, uint80 bestObservedPrice, bool direction, bool providingLiquidity, bool waiting)
taskId
viewfunction taskId() view returns (uint256)
tokenContractAdr
viewfunction tokenContractAdr() view returns (address)
tokenHeld
viewfunction tokenHeld() view returns (address)
utils
viewfunction utils() view returns (address)
execute
nonpayablefunction execute(uint256 handle)
migrateFrom
nonpayablefunction migrateFrom(address old)
migrateManually
nonpayablefunction migrateManually(address base, address quote, uint80 cashOutPrice, uint80 buyBackPrice, uint24 minTradePercent, uint256 tokenId, address _tokenHeld, uint80 lastTradedPrice, uint80 bestObservedPrice, bool direction, bool providingLiquidity, bool waiting)
onDeposit
nonpayablefunction onDeposit(uint256 howMuch)
prepareWithdraw
nonpayablefunction prepareWithdraw(uint256 amtEth)
prepareWithdrawAll
nonpayablefunction prepareWithdrawAll()
renounceOwnership
nonpayablefunction renounceOwnership()
rescueEth
nonpayablefunction rescueEth()
rescueTokens
nonpayablefunction rescueTokens(address token)
setConfig
nonpayablefunction setConfig(address base, address quote, uint80 cashOutPrice, uint80 buyBackPrice, uint80 liquidityLowPrice, uint80 liquidityHighPrice, uint24 minTradePercent)
setHoldingContract
nonpayablefunction setHoldingContract(address holdingAdr)
setToken
nonpayablefunction setToken(address _tokenContractAdr)
setUtils
nonpayablefunction setUtils(address utilsAdr)
startAutomation
nonpayablefunction startAutomation()
stopAutomation
nonpayablefunction stopAutomation()
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
events
AutomationStarted
event AutomationStarted(uint80 price)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
SawBetterPrice
event SawBetterPrice(uint80 price)
TradeExecuted
event TradeExecuted(address targetToken, uint80 price)
errors
No errors.
creation bytecode
0x60e060405273a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4860805273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc260a05273f94e7d0710709388bce3161c32b4eea56d3f91cc60c052600180546001600160a01b03191673aaa000e1b72bf8dfa74c958e19e925c0bfae9ded1790555f600255348015610081575f80fd5b50604051614f79380380614f798339810160408190526100a091610153565b6100a9336100e9565b600480546001600160a01b03199081166001600160a01b039485161790915560038054821694841694909417909355600580549093169116179055610193565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b038116811461014e575f80fd5b919050565b5f805f60608486031215610165575f80fd5b61016e84610138565b925061017c60208501610138565b915061018a60408501610138565b90509250925092565b60805160a05160c051614d796102005f395f50505f818161189e015281816118db01528181611a0201528181611acb0152818161379f0152818161389e01526138e601525f8181611917015281816138260152818161386e0152818161398101526139b10152614d795ff3fe608060405234801561000f575f80fd5b506004361061021a575f3560e01c80635dd8d678116101235780638da5cb5b116100b8578063c19d93fb11610088578063ce31a06b1161006e578063ce31a06b1461060f578063f2fde38b14610617578063fe0d94c11461062a575f80fd5b8063c19d93fb14610549578063c1f36c6814610607575f80fd5b80638da5cb5b1461050b578063aa9a09121461051b578063b1abe1031461052e578063b3a5794314610536575f80fd5b8063715018a6116100f3578063715018a6146104ba5780637a3dfdad146104c25780637e223c52146104f05780638287ccb4146104f8575f80fd5b80635dd8d6781461044d578063677342ce1461046057806369953501146104945780636cb84915146104a7575f80fd5b80632413d155116101b35780633ed29efe1161018357806342fc73951161016957806342fc7395146104145780635a29638d146104275780635d52f9fc1461043a575f80fd5b80633ed29efe146103395780634126c3fa1461039e575f80fd5b80632413d155146102f75780633322b23d1461030a57806335657e6814610313578063382e478114610326575f80fd5b8063144fa6d7116101ee578063144fa6d7146102935780631cb78541146102a65780631f3e51fd146102d15780631fba9eda146102e4575f80fd5b8062ae3bf81461021e578063048e92f614610233578063082e2ffe1461025b578063111ffe5e1461027b575b5f80fd5b61023161022c3660046140de565b61063d565b005b6102466102413660046140f9565b61076c565b60405190151581526020015b60405180910390f35b61026e6102693660046140de565b61087d565b604051610252919061413d565b61028562130ee881565b604051908152602001610252565b6102316102a13660046140de565b610bb3565b6001546102b9906001600160a01b031681565b6040516001600160a01b039091168152602001610252565b6102316102df3660046140de565b610bea565b6102b96102f23660046141ab565b610c21565b6005546102b9906001600160a01b031681565b61028560025481565b6102316103213660046140de565b610c8a565b6102316103343660046140f9565b6112c2565b600854600954600a54600b54600c54610363946001600160a01b03908116948116931691905f0b85565b604080516001600160a01b0396871681529486166020860152929094169183019190915260608201525f9190910b608082015260a001610252565b600d546103e69069ffffffffffffffffffff808216916a010000000000000000000081049091169074010000000000000000000000000000000000000000900462ffffff1683565b6040805169ffffffffffffffffffff948516815293909216602084015262ffffff1690820152606001610252565b61023161042236600461420a565b6113c1565b6003546102b9906001600160a01b031681565b6004546102b9906001600160a01b031681565b61023161045b3660046142e2565b61181a565b61047361046e3660046140f9565b612087565b6040516fffffffffffffffffffffffffffffffff9091168152602001610252565b6102316104a23660046140de565b612208565b6007546102b9906001600160a01b031681565b61023161223f565b6104d56104d0366004614373565b612252565b60405169ffffffffffffffffffff9091168152602001610252565b6102316122f9565b6102316105063660046140f9565b61254c565b5f546001600160a01b03166102b9565b61028561052936600461439f565b6125e7565b610231612692565b6102b96105443660046143c8565b6127c7565b6006546105c99069ffffffffffffffffffff808216916a010000000000000000000081049091169060ff740100000000000000000000000000000000000000008204811691750100000000000000000000000000000000000000000081048216917601000000000000000000000000000000000000000000009091041685565b6040805169ffffffffffffffffffff96871681529590941660208601529115159284019290925290151560608301521515608082015260a001610252565b61023161281c565b6102316129e0565b6102316106253660046140de565b612a1f565b6102316106383660046140f9565b612ac6565b610645612b65565b806001600160a01b031663a9059cbb6106655f546001600160a01b031690565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038516906370a0823190602401602060405180830381865afa1580156106c0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106e49190614410565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af1158015610744573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107689190614427565b5050565b5f6002545f148061077c57504282105b1561078957506001919050565b600854604080517f3850c7bd00000000000000000000000000000000000000000000000000000000815290515f926001600160a01b031691633850c7bd9160048083019260e09291908290030181865afa1580156107e9573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061080d9190614463565b5050600954600a54959650610836956001600160a01b0391821695501692508591506127c79050565b600c549091505f9061084a90820b83612252565b69ffffffffffffffffffff1690505f6108628261087d565b600681111561087357610873614110565b1415949350505050565b6040805160a08101825260065469ffffffffffffffffffff80821683526a010000000000000000000080830482166020808601919091527401000000000000000000000000000000000000000080850460ff90811615158789015275010000000000000000000000000000000000000000008604811615156060808901919091527601000000000000000000000000000000000000000000009096041615156080870190815287519586018852600d54808616875293840490941691850191909152900462ffffff169382019390935291515f9290156109ba57805f01516103e80269ffffffffffffffffffff16846103e3026001600160a01b03161180156109a6575080602001516103e80269ffffffffffffffffffff16846103ed026001600160a01b0316105b156109b5575060069392505050565b610baa565b816060015115610a1757805169ffffffffffffffffffff166001600160a01b03851610156109ec575060039392505050565b806020015169ffffffffffffffffffff16846001600160a01b031611156109b5575060049392505050565b81604001518015610a515750816020015169ffffffffffffffffffff166103e8026001600160a01b0316846103e3026001600160a01b0316115b15610a60575060059392505050565b8160400151158015610a9b5750816020015169ffffffffffffffffffff166103e8026001600160a01b0316846103ed026001600160a01b0316105b15610aaa575060059392505050565b8160400151610b30575f621e84808260400151620f4240610acb9190614510565b62ffffff16835f01518560200151610ae3919061452b565b69ffffffffffffffffffff16610af9919061454d565b610b0391906145b9565b9050806001600160a01b0316856001600160a01b03161115610b2a57506002949350505050565b50610baa565b5f621e84808260400151620f4240610b4891906145e6565b62ffffff1683602001518560200151610b61919061452b565b69ffffffffffffffffffff16610b77919061454d565b610b8191906145b9565b9050806001600160a01b0316856001600160a01b03161015610ba857506001949350505050565b505b505f9392505050565b610bbb612b65565b6005805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b610bf2612b65565b6004805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b5f80610c6369ffffffffffffffffffff84167801000000000000000000000000000000000000000000000000610c5887600c614601565b61052990600a614722565b9050610c6e81612087565b6fffffffffffffffffffffffffffffffff169150505b92915050565b610c92612b65565b5f805f80846001600160a01b0316633ed29efe6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610cd2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cf69190614730565b5093509350935093505f805f876001600160a01b0316634126c3fa6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610d3e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d629190614797565b9250925092506040518060a00160405280886001600160a01b03168152602001876001600160a01b03168152602001866001600160a01b03168152602001858152602001866001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610de2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e0691906147d6565b886001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e42573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e6691906147d6565b610e7091906147ef565b5f90810b90915281516008805473ffffffffffffffffffffffffffffffffffffffff199081166001600160a01b0393841617909155602080850151600980548416918516919091179055604080860151600a80548516918616919091179055606080870151600b55608090960151600c80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff9092169190911790558051958601815269ffffffffffffffffffff89811680885290891692870183905262ffffff8816968201879052600d8054909416176a0100000000000000000000909202919091177fffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000090950294909417905582517fc19d93fb000000000000000000000000000000000000000000000000000000008152925191928392839283928392918f169163c19d93fb9160048082019260a0929091908290030181865afa158015610ff6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061101a919061482d565b945094509450945094508c6001600160a01b0316636cb849156040518163ffffffff1660e01b8152600401602060405180830381865afa158015611060573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110849190614890565b6007805473ffffffffffffffffffffffffffffffffffffffff199081166001600160a01b03939093169290921790556040805160a08101825269ffffffffffffffffffff88811680835290881660208301819052871515938301849052861515606084018190528615156080909401849052600680549096169092176a0100000000000000000000909102177fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000009093027fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff16929092177501000000000000000000000000000000000000000000909202919091177fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff167601000000000000000000000000000000000000000000009091021790556111d7612bd8565b600154604080517fbb54240400000000000000000000000000000000000000000000000000000000815290515f926001600160a01b03169163bb5424049160048083019260209291908290030181865afa158015611237573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061125b9190614890565b90506112668161353d565b5f61126f61370f565b60405169ffffffffffffffffffff821681529091507ff12c538904fa9fe594295f2c4046a3fb31971aa9b8559708d17db8d1103cc86a9060200160405180910390a1505050505050505050505050505050565b6005546001600160a01b031633146112d8575f80fd5b6004546001600160a01b031631811180156112fd57506007546001600160a01b031615155b156113be576004546007546001600160a01b0391821691638172047991165f5f196113298531876148ab565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b1681526001600160a01b039485166004820152939092166024840152604483015260648201526084015b60408051808303815f875af1158015611397573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113bb91906148be565b50505b50565b6113c9612b65565b6003546040517f7afd0a860000000000000000000000000000000000000000000000000000000081526001600160a01b038e811660048301528d811660248301525f60448301819052921690637afd0a86906064016020604051808303815f875af115801561143a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061145e9190614890565b90506040518060a00160405280826001600160a01b031681526020018e6001600160a01b031681526020018d6001600160a01b031681526020018981526020018d6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114da573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114fe91906147d6565b8f6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561153a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061155e91906147d6565b61156891906147ef565b5f0b81525060085f820151815f015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055506020820151816001015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055506040820151816002015f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550606082015181600301556080820151816004015f6101000a81548160ff02191690835f0b60ff16021790555090505060405180606001604052808c69ffffffffffffffffffff1681526020018b69ffffffffffffffffffff1681526020018a62ffffff16815250600d5f820151815f015f6101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055506020820151815f01600a6101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055506040820151815f0160146101000a81548162ffffff021916908362ffffff1602179055509050508660075f6101000a8154816001600160a01b0302191690836001600160a01b031602179055506040518060a001604052808769ffffffffffffffffffff1681526020018669ffffffffffffffffffff1681526020018515158152602001841515815260200183151581525060065f820151815f015f6101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055506020820151815f01600a6101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055506040820151815f0160146101000a81548160ff0219169083151502179055506060820151815f0160156101000a81548160ff0219169083151502179055506080820151815f0160166101000a81548160ff0219169083151502179055509050506111d7612bd8565b611822612b65565b600b541561189c5760048054600b546040517f4a2539c3000000000000000000000000000000000000000000000000000000008152928301526001600160a01b031690634a2539c3906024015f604051808303815f87803b158015611885575f80fd5b505af1158015611897573d5f803e3d5ffd5b505050505b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b03161415801561194d57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316876001600160a01b031614801561194b57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b0316145b155b15611b59575f60045f9054906101000a90046001600160a01b03166001600160a01b0316639ba692496040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119a3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119c791906148e0565b6003546040517f7afd0a860000000000000000000000000000000000000000000000000000000081526001600160a01b038b811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301526fffffffffffffffffffffffffffffffff84166044830152929350911690637afd0a86906064016020604051808303815f875af1158015611a6b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a8f9190614890565b506003546040517f7afd0a860000000000000000000000000000000000000000000000000000000081526001600160a01b0389811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301526fffffffffffffffffffffffffffffffff8416604483015290911690637afd0a86906064016020604051808303815f875af1158015611b32573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b569190614890565b50505b6003546040517f7afd0a860000000000000000000000000000000000000000000000000000000081526001600160a01b03898116600483015288811660248301525f60448301819052921690637afd0a86906064016020604051808303815f875af1158015611bca573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bee9190614890565b6004549091506001600160a01b039081163190881615801590611c165750655af3107a400081115b15611cb857600480546040517f817204790000000000000000000000000000000000000000000000000000000081525f928101929092526001600160a01b038a81166024840152604483018490525f196064840152169063817204799060840160408051808303815f875af1158015611c91573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cb591906148be565b50505b600480546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216928101929092525f91908a16906370a0823190602401602060405180830381865afa158015611d1e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d429190614410565b600480546040517f6a0f27c20000000000000000000000000000000000000000000000000000000081526001600160a01b03878116938201939093528d831660248201528c8316604482015269ffffffffffffffffffff808b1660648301528916608482015260a481018490529293505f92911690636a0f27c29060c40160408051808303815f875af1158015611ddb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611dff919061490f565b5090506040518060a00160405280856001600160a01b031681526020018c6001600160a01b031681526020018b6001600160a01b031681526020018281526020018b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e7c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ea091906147d6565b8d6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611edc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f0091906147d6565b611f0a91906147ef565b5f0b905280516008805473ffffffffffffffffffffffffffffffffffffffff199081166001600160a01b0393841617909155602080840151600980548416918516919091179055604080850151600a805485169190951617909355606080850151600b55608090940151600c80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff9092169190911790558251938401835269ffffffffffffffffffff9c8d168085529b909c169b83018c905262ffffff979097169101819052600d805487169099176a0100000000000000000000909a02999099177fffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000009099029890981790965550506006805475010000000000000000000000000000000000000000007fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff909116179055600780549091169055505050505050565b5f815f0361209657505f919050565b81600170010000000000000000000000000000000082106120bc5760809190911c9060401b5b6801000000000000000082106120d75760409190911c9060201b5b64010000000082106120ee5760209190911c9060101b5b6201000082106121035760109190911c9060081b5b61010082106121175760089190911c9060041b5b6010821061212a5760049190911c9060021b5b600882106121365760011b5b60018185816121475761214761458c565b048201901c9050600181858161215f5761215f61458c565b048201901c905060018185816121775761217761458c565b048201901c9050600181858161218f5761218f61458c565b048201901c905060018185816121a7576121a761458c565b048201901c905060018185816121bf576121bf61458c565b048201901c905060018185816121d7576121d761458c565b0491909101901c5f6121e98286614939565b90508082106121f857806121fa565b815b95945050505050565b919050565b612210612b65565b6003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b612247612b65565b6122505f613732565b565b5f80835f0b126122b8576122b16122766001600160a01b038416630e8d4a5161494c565b61228185600a614722565b612294906001600160a01b03861661494c565b7610000000000000000000000000000000000000000000006125e7565b9050610c84565b6122b16122d26001600160a01b038416630e8d4a5161494c565b6001600160a01b03841660b46122e787614963565b6122f290600a614722565b901b6125e7565b612301612b65565b600154604080517fbb54240400000000000000000000000000000000000000000000000000000000815290515f926001600160a01b03169163bb5424049160048083019260209291908290030181865afa158015612361573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123859190614890565b90506002545f148061242257506002546040517f976217cd00000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0382169063976217cd9060240161012060405180830381865afa1580156123f3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124179190614a4f565b610100015160ff1615155b61248d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f416c72656164792072756e6e696e67000000000000000000000000000000000060448201526064015b60405180910390fd5b5f61249661370f565b6006805473ffffffffffffffffffffffffffffffffffffffff19166a010000000000000000000069ffffffffffffffffffff84169081027fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000016919091171790559050612500612bd8565b6125098261353d565b60405169ffffffffffffffffffff821681527ff12c538904fa9fe594295f2c4046a3fb31971aa9b8559708d17db8d1103cc86a9060200160405180910390a15050565b6005546001600160a01b03163314612562575f80fd5b624c4b40811015801561257f57506007546001600160a01b031615155b156113be57600480546007546040517f817204790000000000000000000000000000000000000000000000000000000081525f938101939093526001600160a01b039081166024840152604483018490525f196064840152169063817204799060840161137c565b5f80805f19858709858702925082811083820303915050805f0361261b575f8411612610575f80fd5b50829004905061268b565b808411612626575f80fd5b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150505b9392505050565b61269a612b65565b5f6002556001546001600160a01b031663a9059cbb6126c05f546001600160a01b031690565b6001546040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa15801561271f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127439190614410565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af11580156127a3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113be9190614427565b5f826001600160a01b0316846001600160a01b031610156127e957508061268b565b6128156001600160a01b0383167801000000000000000000000000000000000000000000000000614939565b905061268b565b6005546001600160a01b03163314612832575f80fd5b600b54156128a85760048054600b546040517f329aa414000000000000000000000000000000000000000000000000000000008152928301526001600160a01b03169063329aa414906024015f604051808303815f87803b158015612895575f80fd5b505af19250505080156128a6575060015b505b6007546001600160a01b03161561225057600480546007546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03928316938101849052638172047992909116905f9082906370a0823190602401602060405180830381865afa158015612929573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061294d9190614410565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526001600160a01b03938416600482015292909116602483015260448201525f19606482015260840160408051808303815f875af11580156129bc573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061076891906148be565b6129e8612b65565b5f80546040516001600160a01b03909116914780156108fc02929091818181858888f193505050501580156113be573d5f803e3d5ffd5b612a27612b65565b6001600160a01b038116612abd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401612484565b6113be81613732565b6002545f03612ad25750565b612ada612bd8565b600154604080517fbb54240400000000000000000000000000000000000000000000000000000000815290516113be926001600160a01b03169163bb5424049160048083019260209291908290030181865afa158015612b3c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b609190614890565b61353d565b5f546001600160a01b03163314612250576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401612484565b600854604080517f3850c7bd00000000000000000000000000000000000000000000000000000000815290515f926001600160a01b031691633850c7bd9160048083019260e09291908290030181865afa158015612c38573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c5c9190614463565b5050600954600a54959650612c85956001600160a01b0391821695501692508591506127c79050565b600c549091505f90612c9990820b83612252565b90505f612cb18269ffffffffffffffffffff1661087d565b6040805160a08101825260065469ffffffffffffffffffff80821683526a0100000000000000000000820416602083015260ff7401000000000000000000000000000000000000000082048116151593830193909352750100000000000000000000000000000000000000000081048316151560608301527601000000000000000000000000000000000000000000009004909116151560808201529091506005826006811115612d6457612d64614110565b03612db45769ffffffffffffffffffff831660208281018290526040519182527f9aa54d3e86f75cc1d8ac502d5a25d5c0563481537f37787aebdc54a27d156897910160405180910390a1613416565b6004826006811115612dc857612dc8614110565b1480612de557506003826006811115612de357612de3614110565b145b156132575760048054600b546040517f329aa414000000000000000000000000000000000000000000000000000000008152928301526001600160a01b03169063329aa414906024015f604051808303815f87803b158015612e45575f80fd5b505af1158015612e57573d5f803e3d5ffd5b50505f60608401819052915060049050836006811115612e7957612e79614110565b03612fed57600a54600480546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0391821692810192909252909116906370a0823190602401602060405180830381865afa158015612ee5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f099190614410565b60048054600a546009546040517f817204790000000000000000000000000000000000000000000000000000000081526001600160a01b039283169481019490945281166024840152604483018490525f196064840152929350919091169063817204799060840160408051808303815f875af1158015612f8c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612fb091906148be565b50506009546007805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0390921691909117905560016040830152613157565b600954600480546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0391821692810192909252909116906370a0823190602401602060405180830381865afa158015613054573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130789190614410565b60048054600954600a546040517f817204790000000000000000000000000000000000000000000000000000000081526001600160a01b039283169481019490945281166024840152604483018490525f196064840152929350919091169063817204799060840160408051808303815f875af11580156130fb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061311f91906148be565b5050600a546007805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039092169190911790555f60408301525b506004546001600160a01b031631655af3107a40008111801561318457506007546001600160a01b031615155b15613251576004546007546001600160a01b03918216916381720479915f9116600a6131b186600961494c565b6131bb9190614939565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526001600160a01b03938416600482015292909116602483015260448201525f19606482015260840160408051808303815f875af115801561322a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061324e91906148be565b50505b50613416565b600682600681111561326b5761326b614110565b0361327b575f6080820152613416565b5f82600681111561328e5761328e614110565b14613416576004546001600160a01b031631655af3107a400081111561337857600454600a80546001600160a01b03928316926381720479925f92909116906132d886600961494c565b6132e29190614939565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526001600160a01b03938416600482015292909116602483015260448201525f19606482015260840160408051808303815f875af1158015613351573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061337591906148be565b50505b60048054600b546040517f145a6ae0000000000000000000000000000000000000000000000000000000008152928301526001600160a01b03169063145a6ae0906024015f604051808303815f87803b1580156133d3575f80fd5b505af11580156133e5573d5f803e3d5ffd5b5050600160608501819052608085015250506007805473ffffffffffffffffffffffffffffffffffffffff19169055505b8051600680546020840151604085015160608601516080909601511515760100000000000000000000000000000000000000000000027fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff9615157501000000000000000000000000000000000000000000027fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff9215157401000000000000000000000000000000000000000002929092167fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff69ffffffffffffffffffff9485166a01000000000000000000000273ffffffffffffffffffffffffffffffffffffffff1990961694909716939093179390931794909416179290921792909216179055505050565b6040517f47e25f2100000000000000000000000000000000000000000000000000000000815262130ee860048201525f906001600160a01b038316906347e25f2190602401602060405180830381865afa15801561359d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135c19190614410565b6001546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0385811660048301526024820184905292935091169063095ea7b3906044016020604051808303815f875af115801561362c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136509190614427565b505f61365f4262093a80614adc565b6040517fbc0d984d00000000000000000000000000000000000000000000000000000000815230600482018190526024820152604481018290526064810184905262130ee8608482015260a481018290529091506001600160a01b0384169063bc0d984d9060c4016020604051808303815f875af11580156136e3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137079190614410565b600255505050565b600954600a545f9161372d916001600160a01b03918216911661378e565b905090565b5f80546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f6001600160a01b0382166137c1577f000000000000000000000000000000000000000000000000000000000000000091505b5f836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156137fe573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061382291906147d6565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b03160361389c5761389461386b6006836147ef565b857f00000000000000000000000000000000000000000000000000000000000000006078613a14565b915050610c84565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b03160361390c576138946138e36012836147ef565b857f00000000000000000000000000000000000000000000000000000000000000006078613a14565b5f6006820390505f6006856001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015613952573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061397691906147d6565b0390505f6139a783887f00000000000000000000000000000000000000000000000000000000000000006078613a14565b90505f6139d783887f00000000000000000000000000000000000000000000000000000000000000006078613a14565b90508069ffffffffffffffffffff168269ffffffffffffffffffff1664e8d4a510000281613a0757613a0761458c565b0498975050505050505050565b6003546040517fbc501ee70000000000000000000000000000000000000000000000000000000081526001600160a01b03858116600483015284811660248301525f92839291169063bc501ee790604401602060405180830381865afa158015613a80573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613aa49190614890565b6040805160028082526060820183529293505f92909160208301908036833701905050905083815f81518110613adc57613adc614aef565b602002602001019063ffffffff16908163ffffffff16815250505f81600181518110613b0a57613b0a614aef565b63ffffffff909216602092830291909101909101526040517f883bdbfd0000000000000000000000000000000000000000000000000000000081525f906001600160a01b0384169063883bdbfd90613b66908590600401614b1c565b5f60405180830381865afa158015613b80573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052613bc59190810190614bfa565b5090505f8563ffffffff1660060b825f81518110613be557613be5614aef565b602002602001015183600181518110613c0057613c00614aef565b60200260200101510360060b81613c1957613c1961458c565b0590505f613c2b898961054485613c45565b9050613c378a82612252565b9a9950505050505050505050565b5f805f8360020b12613c5a578260020b613c67565b8260020b613c6790614cc6565b9050613c927ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff27618614cfc565b62ffffff16811115613d00576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600160248201527f54000000000000000000000000000000000000000000000000000000000000006044820152606401612484565b5f816001165f03613d2257700100000000000000000000000000000000613d34565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff1690506002821615613d73576080613d6e826ffff97272373d413259a46990580e213a61494c565b901c90505b6004821615613d9d576080613d98826ffff2e50f5f656932ef12357cf3c7fdcc61494c565b901c90505b6008821615613dc7576080613dc2826fffe5caca7e10e4e61c3624eaa0941cd061494c565b901c90505b6010821615613df1576080613dec826fffcb9843d60f6159c9db58835c92664461494c565b901c90505b6020821615613e1b576080613e16826fff973b41fa98c081472e6896dfb254c061494c565b901c90505b6040821615613e45576080613e40826fff2ea16466c96a3843ec78b326b5286161494c565b901c90505b6080821615613e6f576080613e6a826ffe5dee046a99a2a811c461f1969c305361494c565b901c90505b610100821615613e9a576080613e95826ffcbe86c7900a88aedcffc83b479aa3a461494c565b901c90505b610200821615613ec5576080613ec0826ff987a7253ac413176f2b074cf7815e5461494c565b901c90505b610400821615613ef0576080613eeb826ff3392b0822b70005940c7a398e4b70f361494c565b901c90505b610800821615613f1b576080613f16826fe7159475a2c29b7443b29c7fa6e889d961494c565b901c90505b611000821615613f46576080613f41826fd097f3bdfd2022b8845ad8f792aa582561494c565b901c90505b612000821615613f71576080613f6c826fa9f746462d870fdf8a65dc1f90e061e561494c565b901c90505b614000821615613f9c576080613f97826f70d869a156d2a1b890bb3df62baf32f761494c565b901c90505b618000821615613fc7576080613fc2826f31be135f97d08fd981231505542fcfa661494c565b901c90505b62010000821615613ff3576080613fee826f09aa508b5b7a84e1c677de54f3e99bc961494c565b901c90505b6202000082161561401e576080614019826e5d6af8dedb81196699c329225ee60461494c565b901c90505b62040000821615614048576080614043826d2216e584f5fa1ea926041bedfe9861494c565b901c90505b6208000082161561407057608061406b826b048a170391f7dc42444e8fa261494c565b901c90505b5f8460020b131561408957614086815f19614939565b90505b61409864010000000082614d30565b156140a45760016140a6565b5f5b6140b79060ff16602083901c614adc565b949350505050565b6001600160a01b03811681146113be575f80fd5b8035612203816140bf565b5f602082840312156140ee575f80fd5b813561268b816140bf565b5f60208284031215614109575f80fd5b5035919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b6020810160078310614176577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b91905290565b805f0b81146113be575f80fd5b69ffffffffffffffffffff811681146113be575f80fd5b803561220381614189565b5f80604083850312156141bc575f80fd5b82356141c78161417c565b915060208301356141d781614189565b809150509250929050565b62ffffff811681146113be575f80fd5b80151581146113be575f80fd5b8035612203816141f2565b5f805f805f805f805f805f806101808d8f031215614226575f80fd5b8c35614231816140bf565b9b5060208d0135614241816140bf565b9a5060408d013561425181614189565b995060608d013561426181614189565b985060808d0135614271816141e2565b975060a08d0135965061428660c08e016140d3565b955061429460e08e016141a0565b94506142a36101008e016141a0565b93506142b26101208e016141ff565b92506142c16101408e016141ff565b91506142d06101608e016141ff565b90509295989b509295989b509295989b565b5f805f805f805f60e0888a0312156142f8575f80fd5b8735614303816140bf565b96506020880135614313816140bf565b9550604088013561432381614189565b9450606088013561433381614189565b9350608088013561434381614189565b925060a088013561435381614189565b915060c0880135614363816141e2565b8091505092959891949750929550565b5f8060408385031215614384575f80fd5b823561438f8161417c565b915060208301356141d7816140bf565b5f805f606084860312156143b1575f80fd5b505081359360208301359350604090920135919050565b5f805f606084860312156143da575f80fd5b83356143e5816140bf565b925060208401356143f5816140bf565b91506040840135614405816140bf565b809150509250925092565b5f60208284031215614420575f80fd5b5051919050565b5f60208284031215614437575f80fd5b815161268b816141f2565b805161ffff81168114612203575f80fd5b805160ff81168114612203575f80fd5b5f805f805f805f60e0888a031215614479575f80fd5b8751614484816140bf565b8097505060208801518060020b811461449b575f80fd5b95506144a960408901614442565b94506144b760608901614442565b93506144c560808901614442565b92506144d360a08901614453565b915060c0880151614363816141f2565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b62ffffff8181168382160190811115610c8457610c846144e3565b69ffffffffffffffffffff8181168382160190811115610c8457610c846144e3565b5f6001600160a01b0382166001600160a01b0384166001600160a01b038183021692508183048114821517614584576145846144e3565b505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6001600160a01b038316806145d1576145d161458c565b806001600160a01b0384160491505092915050565b62ffffff8281168282160390811115610c8457610c846144e3565b5f81810b9083900b01607f81137fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8082121715610c8457610c846144e3565b6001815b600184111561467a5780850481111561465e5761465e6144e3565b600184161561466c57908102905b60019390931c928002614643565b935093915050565b5f8261469057506001610c84565b8161469c57505f610c84565b81600181146146b257600281146146bc576146d8565b6001915050610c84565b60ff8411156146cd576146cd6144e3565b50506001821b610c84565b5060208310610133831016604e8410600b84101617156146fb575081810a610c84565b6147075f19848461463f565b805f190482111561471a5761471a6144e3565b029392505050565b5f61268b60ff841683614682565b5f805f805f60a08688031215614744575f80fd5b855161474f816140bf565b6020870151909550614760816140bf565b6040870151909450614771816140bf565b6060870151608088015191945092506147898161417c565b809150509295509295909350565b5f805f606084860312156147a9575f80fd5b83516147b481614189565b60208501519093506147c581614189565b6040850151909250614405816141e2565b5f602082840312156147e6575f80fd5b61268b82614453565b5f82810b9082900b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808112607f82131715610c8457610c846144e3565b5f805f805f60a08688031215614841575f80fd5b855161484c81614189565b602087015190955061485d81614189565b604087015190945061486e816141f2565b606087015190935061487f816141f2565b6080870151909250614789816141f2565b5f602082840312156148a0575f80fd5b815161268b816140bf565b81810381811115610c8457610c846144e3565b5f80604083850312156148cf575f80fd5b505080516020909101519092909150565b5f602082840312156148f0575f80fd5b81516fffffffffffffffffffffffffffffffff8116811461268b575f80fd5b5f8060408385031215614920575f80fd5b8251915061493060208401614453565b90509250929050565b5f826149475761494761458c565b500490565b8082028115828204841417610c8457610c846144e3565b5f815f0b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808103614996576149966144e3565b5f0392915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051610120810167ffffffffffffffff811182821017156149ef576149ef61499e565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614a3c57614a3c61499e565b604052919050565b8051612203816140bf565b5f610120828403128015614a61575f80fd5b50614a6a6149cb565b614a7383614a44565b8152614a8160208401614a44565b602082015260408381015190820152606080840151908201526080808401519082015260a0808401519082015260c0808401519082015260e08084015190820152614acf6101008401614453565b6101008201529392505050565b80820180821115610c8457610c846144e3565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b602080825282518282018190525f918401906040840190835b81811015614b5957835163ffffffff16835260209384019390920191600101614b35565b509095945050505050565b5f67ffffffffffffffff821115614b7d57614b7d61499e565b5060051b60200190565b5f82601f830112614b96575f80fd5b8151614ba9614ba482614b64565b6149f5565b8082825260208201915060208360051b860101925085831115614bca575f80fd5b602085015b83811015614bf0578051614be2816140bf565b835260209283019201614bcf565b5095945050505050565b5f8060408385031215614c0b575f80fd5b825167ffffffffffffffff811115614c21575f80fd5b8301601f81018513614c31575f80fd5b8051614c3f614ba482614b64565b8082825260208201915060208360051b850101925087831115614c60575f80fd5b6020840193505b82841015614c905783518060060b8114614c7f575f80fd5b825260209384019390910190614c67565b80955050505050602083015167ffffffffffffffff811115614cb0575f80fd5b614cbc85828601614b87565b9150509250929050565b5f7f80000000000000000000000000000000000000000000000000000000000000008203614cf657614cf66144e3565b505f0390565b5f8160020b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000008103614996576149966144e3565b5f82614d3e57614d3e61458c565b50069056fea26469706673582212204b22441981b7045d8fd2d2ec3a478f7e2889e8d5a2dd9ac32aa30ce491fc8f2c64736f6c634300081a0033000000000000000000000000c97b6f6dc641c0f59c724657b91569af00c28b7d000000000000000000000000680ad93df2a2813167e628427aa4b46e2c654a0b000000000000000000000000877df422bf6f792430fe82126e3d794bc2ae4b5a