0 txs
0 calls
constructor
constructor((address timelockAddress, address fraxErc20, uint8 fraxErc20Decimals, address usdcErc20, uint8 usdcErc20Decimals, address wethErc20, uint8 wethErc20Decimals, address fraxUsdcCurveLpErc20, uint8 fraxUsdcCurveLpErc20Decimals, address baseToken0, uint8 baseToken0Decimals, address quoteToken0, uint8 quoteToken0Decimals, address baseToken1, uint8 baseToken1Decimals, address quoteToken1, uint8 quoteToken1Decimals, address usdcUsdChainlinkFeedAddress, uint256 usdUsdcChainlinkMaximumOracleDelay, address fraxUsdChainlinkFeedAddress, uint256 fraxUsdMaximumOracleDelay, address curvePoolVirtualPriceAddress, uint256 minimumCurvePoolVirtualPrice, uint256 maximumCurvePoolVirtualPrice, address fraxUsdcUniswapV3PairAddress, uint32 fraxUsdcTwapDuration, address fraxUsdcTwapBaseToken, address fraxUsdcTwapQuoteToken) _params)
functions
BASE_TOKEN_0_DECIMALS
viewfunction BASE_TOKEN_0_DECIMALS() view returns (uint256)
BASE_TOKEN_0
viewfunction BASE_TOKEN_0() view returns (address)
BASE_TOKEN_1_DECIMALS
viewfunction BASE_TOKEN_1_DECIMALS() view returns (uint256)
BASE_TOKEN_1
viewfunction BASE_TOKEN_1() view returns (address)
calculatePrices
purefunction calculatePrices(bool _isBadDataFraxUsdChainlink, uint256 _usdPerFraxChainlink, uint256 _underlyingPerLp, bool _isBadDataUsdcUsdChainlink, uint256 _usdPerUsdcChainlink, uint256 _fraxPerUsdcTwap) pure returns (bool _isBadData, uint256 _priceLow, uint256 _priceHigh)
CHAINLINK_FEED_ADDRESS
viewfunction CHAINLINK_FEED_ADDRESS() view returns (address)
CHAINLINK_FEED_DECIMALS
viewfunction CHAINLINK_FEED_DECIMALS() view returns (uint8)
CHAINLINK_FEED_PRECISION
viewfunction CHAINLINK_FEED_PRECISION() view returns (uint256)
CURVE_POOL_VIRTUAL_PRICE_ADDRESS
viewfunction CURVE_POOL_VIRTUAL_PRICE_ADDRESS() view returns (address)
CURVE_POOL_VIRTUAL_PRICE_PRECISION
viewfunction CURVE_POOL_VIRTUAL_PRICE_PRECISION() view returns (uint256)
decimals
purefunction decimals() pure returns (uint8)
FRAX_ERC20_DECIMALS
viewfunction FRAX_ERC20_DECIMALS() view returns (uint8)
FRAX_ERC20_PRECISION
viewfunction FRAX_ERC20_PRECISION() view returns (uint256)
FRAX_USD_CHAINLINK_FEED_ADDRESS
viewfunction FRAX_USD_CHAINLINK_FEED_ADDRESS() view returns (address)
FRAX_USD_CHAINLINK_FEED_DECIMALS
viewfunction FRAX_USD_CHAINLINK_FEED_DECIMALS() view returns (uint8)
FRAX_USD_CHAINLINK_FEED_PRECISION
viewfunction FRAX_USD_CHAINLINK_FEED_PRECISION() view returns (uint256)
FRAX_USDC_CURVE_POOL_LP_ERC20_DECIMALS
viewfunction FRAX_USDC_CURVE_POOL_LP_ERC20_DECIMALS() view returns (uint8)
FRAX_USDC_CURVE_POOL_LP_ERC20_PRECISION
viewfunction FRAX_USDC_CURVE_POOL_LP_ERC20_PRECISION() view returns (uint256)
FRAX_USDC_TWAP_PRECISION
viewfunction FRAX_USDC_TWAP_PRECISION() view returns (uint128)
FRAX_USDC_UNI_V3_PAIR_ADDRESS
viewfunction FRAX_USDC_UNI_V3_PAIR_ADDRESS() view returns (address)
FRAX_USDC_UNISWAP_V3_TWAP_BASE_TOKEN
viewfunction FRAX_USDC_UNISWAP_V3_TWAP_BASE_TOKEN() view returns (address)
FRAX_USDC_UNISWAP_V3_TWAP_QUOTE_TOKEN
viewfunction FRAX_USDC_UNISWAP_V3_TWAP_QUOTE_TOKEN() view returns (address)
fraxUsdcTwapDuration
viewfunction fraxUsdcTwapDuration() view returns (uint32)
getChainlinkPrice
viewfunction getChainlinkPrice() view returns (bool _isBadData, uint256 _updatedAt, uint256 _price)
getChainlinkUsdPerFrax
viewfunction getChainlinkUsdPerFrax() view returns (bool _isBadData, uint256 _usdPerFrax)
getChainlinkUsdPerUsdc
viewfunction getChainlinkUsdPerUsdc() view returns (bool _isBadData, uint256 _usdPerUsdc)
getCurvePoolVirtualPrice
viewfunction getCurvePoolVirtualPrice() view returns (uint256 _virtualPrice)
getFraxUsdcCurvePoolVirtualPrice
viewfunction getFraxUsdcCurvePoolVirtualPrice() view returns (uint256 _virtualPrice)
getFraxUsdChainlinkPrice
viewfunction getFraxUsdChainlinkPrice() view returns (bool _isBadData, uint256 _updatedAt, uint256 _usdPerFrax)
getFraxUsdcUniswapV3Twap
viewfunction getFraxUsdcUniswapV3Twap() view returns (uint256 _twap)
getPrices
viewfunction getPrices() view returns (bool _isBadData, uint256 _priceLow, uint256 _priceHigh)
getPricesNormalized
viewfunction getPricesNormalized() view returns (bool _isBadDataNormal, uint256 _priceLowNormal, uint256 _priceHighNormal)
getTwapFraxPerUsdc
viewfunction getTwapFraxPerUsdc() view returns (uint256 _fraxPerUsdc)
maximumCurvePoolVirtualPrice
viewfunction maximumCurvePoolVirtualPrice() view returns (uint256)
maximumFraxUsdOracleDelay
viewfunction maximumFraxUsdOracleDelay() view returns (uint256)
maximumOracleDelay
viewfunction maximumOracleDelay() view returns (uint256)
minimumCurvePoolVirtualPrice
viewfunction minimumCurvePoolVirtualPrice() view returns (uint256)
name
purefunction name() pure returns (string)
NORMALIZATION_0
viewfunction NORMALIZATION_0() view returns (int256)
NORMALIZATION_1
viewfunction NORMALIZATION_1() view returns (int256)
ORACLE_PRECISION
viewfunction ORACLE_PRECISION() view returns (uint256)
pendingTimelockAddress
viewfunction pendingTimelockAddress() view returns (address)
QUOTE_TOKEN_0_DECIMALS
viewfunction QUOTE_TOKEN_0_DECIMALS() view returns (uint256)
QUOTE_TOKEN_0
viewfunction QUOTE_TOKEN_0() view returns (address)
QUOTE_TOKEN_1_DECIMALS
viewfunction QUOTE_TOKEN_1_DECIMALS() view returns (uint256)
QUOTE_TOKEN_1
viewfunction QUOTE_TOKEN_1() view returns (address)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
timelockAddress
viewfunction timelockAddress() view returns (address)
USDC_ERC20_DECIMALS
viewfunction USDC_ERC20_DECIMALS() view returns (uint8)
USDC_ERC20_PRECISION
viewfunction USDC_ERC20_PRECISION() view returns (uint256)
USDC_TO_FRAX_NORMALIZATION
viewfunction USDC_TO_FRAX_NORMALIZATION() view returns (uint256)
acceptTransferTimelock
nonpayablefunction acceptTransferTimelock()
renounceTimelock
nonpayablefunction renounceTimelock()
setFraxUsdcTwapDuration
nonpayablefunction setFraxUsdcTwapDuration(uint32 _newTwapDuration)
setMaximumCurvePoolVirtualPrice
nonpayablefunction setMaximumCurvePoolVirtualPrice(uint256 _newMaximum)
setMaximumFraxUsdOracleDelay
nonpayablefunction setMaximumFraxUsdOracleDelay(uint256 _newMaxOracleDelay)
setMaximumOracleDelay
nonpayablefunction setMaximumOracleDelay(uint256 _newMaxOracleDelay)
setMinimumCurvePoolVirtualPrice
nonpayablefunction setMinimumCurvePoolVirtualPrice(uint256 _newMinimum)
transferTimelock
nonpayablefunction transferTimelock(address _newTimelock)
events
SetFraxUsdcTwapDuration
event SetFraxUsdcTwapDuration(uint256 oldTwapDuration, uint256 newTwapDuration)
SetMaximumCurvePoolVirtualPrice
event SetMaximumCurvePoolVirtualPrice(uint256 oldMaximum, uint256 newMaximum)
SetMaximumFraxUsdOracleDelay
event SetMaximumFraxUsdOracleDelay(uint256 oldMaxOracleDelay, uint256 newMaxOracleDelay)
SetMaximumOracleDelay
event SetMaximumOracleDelay(address oracle, uint256 oldMaxOracleDelay, uint256 newMaxOracleDelay)
SetMaximumOracleDelay
event SetMaximumOracleDelay(uint256 oldMaxOracleDelay, uint256 newMaxOracleDelay)
SetMinimumCurvePoolVirtualPrice
event SetMinimumCurvePoolVirtualPrice(uint256 oldMinimum, uint256 newMinimum)
TimelockTransferred
event TimelockTransferred(address indexed previousTimelock, address indexed newTimelock)
TimelockTransferStarted
event TimelockTransferStarted(address indexed previousTimelock, address indexed newTimelock)
errors
OnlyPendingTimelock
error OnlyPendingTimelock()
OnlyTimelock
error OnlyTimelock()
creation bytecode
0x6103e06040523480156200001257600080fd5b50604051620027cb380380620027cb83398101604081905262000035916200068b565b60405180608001604052808261030001516001600160a01b0316815260200182610320015163ffffffff1681526020018261034001516001600160a01b031681526020018261036001516001600160a01b031681525060405180604001604052808361022001516001600160a01b0316815260200183610240015181525060405180604001604052808461026001516001600160a01b031681526020018461028001518152506040518060600160405280856102a001516001600160a01b03168152602001856102c001518152602001856102e001518152506040518061010001604052808661012001516001600160a01b0316815260200186610140015160ff1681526020018661016001516001600160a01b0316815260200186610180015160ff168152602001866101a001516001600160a01b03168152602001866101c0015160ff168152602001866101e001516001600160a01b0316815260200186610200015160ff1681525033600160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555080604001516001600160a01b03166080816001600160a01b031681525050806060015160ff1660a081815250508060c001516001600160a01b031660c0816001600160a01b0316815250508060e0015160ff1660e0818152505080600001516001600160a01b0316610100816001600160a01b031681525050806020015160ff16610120818152505080608001516001600160a01b0316610140816001600160a01b0316815250508060a0015160ff1661016081815250506101205160a051620002929190620008c4565b610180526101605160e051620002a99190620008c4565b6101a05250620002c06342747cc160e11b6200052f565b80516001600160a01b03166101c052602081015160035560400151600455620002f06351eb09cd60e01b6200052f565b80516001600160a01b03166101e08190526040805163313ce56760e01b8152905163313ce567916004808201926020929091908290030181865afa1580156200033d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003639190620008ee565b60ff166102008190526200037990600a62000a12565b61022052602001516005556200039663034a813d60e01b6200052f565b80516001600160a01b03166102408190526040805163313ce56760e01b8152905163313ce567916004808201926020929091908290030181865afa158015620003e3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004099190620008ee565b60ff166102608190526200041f90600a62000a12565b61028052602001516006556200043c6334e204dd60e21b6200052f565b80516001600160a01b039081166102a05260208201516007805463ffffffff191663ffffffff909216919091179055604082015181166102c052606090910151166102e05280516200048e90620005b3565b620004a063415f130360e01b6200052f565b620004b2632fa3fc3160e21b6200052f565b604081015160ff16610300819052620004cd90600a62000a20565b61032052608081015160ff16610340819052620004ec90600a62000a20565b6103605261010081015160ff166103808190526200050c90600a62000a20565b6103a052610360516103205162000524919062000a31565b6103c0525062000a54565b6001600160e01b031980821690036200058e5760405162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015260640160405180910390fd5b6001600160e01b0319166000908152600260205260409020805460ff19166001179055565b6001546040516001600160a01b038084169216907f31b6c5a04b069b6ec1b3cef44c4e7c1eadd721349cda9823d0b1877b3551cdc690600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b60405161038081016001600160401b03811182821017156200064157634e487b7160e01b600052604160045260246000fd5b60405290565b80516001600160a01b03811681146200065f57600080fd5b919050565b805160ff811681146200065f57600080fd5b805163ffffffff811681146200065f57600080fd5b600061038082840312156200069f57600080fd5b620006a96200060f565b620006b48362000647565b8152620006c46020840162000647565b6020820152620006d76040840162000664565b6040820152620006ea6060840162000647565b6060820152620006fd6080840162000664565b60808201526200071060a0840162000647565b60a08201526200072360c0840162000664565b60c08201526200073660e0840162000647565b60e08201526101006200074b81850162000664565b908201526101206200075f84820162000647565b908201526101406200077384820162000664565b908201526101606200078784820162000647565b908201526101806200079b84820162000664565b908201526101a0620007af84820162000647565b908201526101c0620007c384820162000664565b908201526101e0620007d784820162000647565b90820152610200620007eb84820162000664565b90820152610220620007ff84820162000647565b9082015261024083810151908201526102606200081e81850162000647565b9082015261028083810151908201526102a06200083d81850162000647565b908201526102c083810151908201526102e080840151908201526103006200086781850162000647565b908201526103206200087b84820162000676565b908201526103406200088f84820162000647565b90820152610360620008a384820162000647565b908201529392505050565b634e487b7160e01b600052601160045260246000fd5b8181036000831280158383131683831282161715620008e757620008e7620008ae565b5092915050565b6000602082840312156200090157600080fd5b6200090c8262000664565b9392505050565b600181815b8085111562000954578160001904821115620009385762000938620008ae565b808516156200094657918102915b93841c939080029062000918565b509250929050565b6000826200096d5750600162000a0c565b816200097c5750600062000a0c565b8160018114620009955760028114620009a057620009c0565b600191505062000a0c565b60ff841115620009b457620009b4620008ae565b50506001821b62000a0c565b5060208310610133831016604e8410600b8410161715620009e5575081810a62000a0c565b620009f1838362000913565b806000190482111562000a085762000a08620008ae565b0290505b92915050565b60006200090c83836200095c565b60006200090c60ff8416836200095c565b60008262000a4f57634e487b7160e01b600052601260045260246000fd5b500490565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e05161020051610220516102405161026051610280516102a0516102c0516102e05161030051610320516103405161036051610380516103a0516103c051611bde62000bed600039600081816109aa0152610cbd015260006103dc0152600061059f015260006106be0152600061068e015260006108e20152600061076301526000818161064001526112b901526000818161079201526112970152600081816107b901526111eb01526000818161073c0152610dc00152600061070c0152600081816104ce0152610e48015260006108bb015260006109d101526000818161080e0152611599015260008181610983015261132f0152600081816103a201528181610bc801528181610bf10152610c3401526000818161084501528181610b2601528181610b4f0152610b9201526000610519015260006104a7015260006109f801526000610480015260006106e501526000610667015260006109540152600061092d0152611bde6000f3fe608060405234801561001057600080fd5b50600436106103985760003560e01c80638b8b2c91116101e9578063c87c72721161010f578063e0d2e780116100ad578063ebcf2fd61161007c578063ebcf2fd6146109a5578063ebf43bca146109cc578063f097486c146109f3578063f6ccaad414610a1a57600080fd5b8063e0d2e78014610928578063e5a66dfa1461094f578063e792b4c714610976578063e7b2e73c1461097e57600080fd5b8063cedadcea116100e9578063cedadcea146108dd578063cede91a414610904578063d2333be71461090d578063d8db77381461092057600080fd5b8063c87c727214610867578063cbda2f1a14610897578063cca992fa146108b657600080fd5b8063a15a12ee11610187578063b374839b11610156578063b374839b14610809578063b93cd81614610830578063bd9a548b14610838578063c82f2b121461084057600080fd5b8063a15a12ee146107b4578063a2adab2c146107db578063a4ca6a01146107ee578063a885c8651461080157600080fd5b8063986dd76b116101c3578063986dd76b1461075e5780639af68a9d146107855780639c0d313f146104f05780639c616f8a1461078d57600080fd5b80638b8b2c91146107075780638db9cd1f1461072e5780638e7dc4c01461073757600080fd5b80634185e8ce116102ce57806351f43f551161026c5780635def11a01161023b5780635def11a01461068957806365c781b6146106b05780636e2cbbab146106b9578063781097d0146106e057600080fd5b806351f43f5514610620578063528c6e0b14610633578063585a1ca91461063b57806359c909e11461066257600080fd5b80634bc66f32116102a85780634bc66f32146105dd5780634d3375e8146105fd5780634f8b4ae714610605578063515efa8f1461060d57600080fd5b80634185e8ce1461059a57806345014095146105c1578063471d7789146105d457600080fd5b806320bf30fc1161033b57806337f85f661161031557806337f85f66146105145780633aeef3d31461053b5780633be38cf9146105605780633dcdde0d1461057557600080fd5b806320bf30fc146104c9578063230b5fa8146104f0578063313ce567146104ff57600080fd5b806306fdde031161037757806306fdde0314610421578063090f3f5014610436578063116d79761461047b57806320888004146104a257600080fd5b806232e91a1461039d578063019bd967146103d757806301ffc9a7146103fe575b600080fd5b6103c47f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b6103c47f000000000000000000000000000000000000000000000000000000000000000081565b61041161040c3660046116b7565b610a22565b60405190151581526020016103ce565b610429610aab565b6040516103ce9190611700565b6000546104569073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016103ce565b6104567f000000000000000000000000000000000000000000000000000000000000000081565b6104567f000000000000000000000000000000000000000000000000000000000000000081565b6104567f000000000000000000000000000000000000000000000000000000000000000081565b6103c4670de0b6b3a764000081565b60125b60405160ff90911681526020016103ce565b6103c47f000000000000000000000000000000000000000000000000000000000000000081565b610543610acb565b6040805193151584526020840192909252908201526060016103ce565b61057361056e36600461176c565b610ae3565b005b6007546105859063ffffffff1681565b60405163ffffffff90911681526020016103ce565b6105027f000000000000000000000000000000000000000000000000000000000000000081565b6105736105cf366004611785565b610af7565b6103c460055481565b6001546104569073ffffffffffffffffffffffffffffffffffffffff1681565b610543610b08565b610573610c6e565b61057361061b36600461176c565b610c94565b61057361062e36600461176c565b610ca5565b6103c4610cb6565b6104567f000000000000000000000000000000000000000000000000000000000000000081565b6104567f000000000000000000000000000000000000000000000000000000000000000081565b6105027f000000000000000000000000000000000000000000000000000000000000000081565b6103c460045481565b6103c47f000000000000000000000000000000000000000000000000000000000000000081565b6103c47f000000000000000000000000000000000000000000000000000000000000000081565b6105027f000000000000000000000000000000000000000000000000000000000000000081565b6103c460035481565b6103c47f000000000000000000000000000000000000000000000000000000000000000081565b6105027f000000000000000000000000000000000000000000000000000000000000000081565b6103c4610d13565b6104567f000000000000000000000000000000000000000000000000000000000000000081565b6104567f000000000000000000000000000000000000000000000000000000000000000081565b6105436107e93660046117d0565b610d42565b6105736107fc366004611828565b610d67565b6103c4610d78565b6104567f000000000000000000000000000000000000000000000000000000000000000081565b610543610d82565b610543610d9b565b6103c47f000000000000000000000000000000000000000000000000000000000000000081565b610876670de0b6b3a764000081565b6040516fffffffffffffffffffffffffffffffff90911681526020016103ce565b61089f610da8565b6040805192151583526020830191909152016103ce565b6103c47f000000000000000000000000000000000000000000000000000000000000000081565b6103c47f000000000000000000000000000000000000000000000000000000000000000081565b6103c460065481565b61057361091b36600461176c565b610e05565b61089f610e16565b6104567f000000000000000000000000000000000000000000000000000000000000000081565b6103c47f000000000000000000000000000000000000000000000000000000000000000081565b6103c4610e24565b6104567f000000000000000000000000000000000000000000000000000000000000000081565b6103c47f000000000000000000000000000000000000000000000000000000000000000081565b6105027f000000000000000000000000000000000000000000000000000000000000000081565b6103c47f000000000000000000000000000000000000000000000000000000000000000081565b610573610e2e565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000083161480610aa557507fffffffff00000000000000000000000000000000000000000000000000000000821660009081526002602052604090205460ff165b92915050565b6060604051806060016040528060408152602001611b9260409139905090565b6000806000610ad8610e3e565b925092509250909192565b610aeb610f01565b610af481610f52565b50565b610aff610f01565b610af481610f93565b600080600080600080610b19611008565b92509250925082955060007f000000000000000000000000000000000000000000000000000000000000000013610b8d57610b737f000000000000000000000000000000000000000000000000000000000000000061187d565b610b7e90600a6119d5565b610b8890836119e1565b610bc2565b610bb87f0000000000000000000000000000000000000000000000000000000000000000600a6119d5565b610bc29083611a1c565b945060007f000000000000000000000000000000000000000000000000000000000000000013610c2f57610c157f000000000000000000000000000000000000000000000000000000000000000061187d565b610c2090600a6119d5565b610c2a90826119e1565b610c64565b610c5a7f0000000000000000000000000000000000000000000000000000000000000000600a6119d5565b610c649082611a1c565b9350505050909192565b610c76610f01565b610c7e611063565b610c886000610f93565b610c9260006110b4565b565b610c9c610f01565b610af481611142565b610cad610f01565b610af481611183565b6000610cea7f0000000000000000000000000000000000000000000000000000000000000000670de0b6b3a7640000611a1c565b610cf26111c4565b610d0490670de0b6b3a7640000611a1c565b610d0e91906119e1565b905090565b600080610d1e61132b565b9050610d32670de0b6b3a7640000806119e1565b610d3c9082611a1c565b91505090565b6000806000610d558989898989896113e6565b92509250925096509650969350505050565b610d6f610f01565b610af481611514565b6000610d0e61132b565b6000806000610d8f61158f565b91959094509092509050565b6000806000610ad8611008565b600080600080610db661158f565b92505091508193507f000000000000000000000000000000000000000000000000000000000000000081670de0b6b3a7640000610df39190611a1c565b610dfd91906119e1565b925050509091565b610e0d610f01565b610af481611645565b600080600080610db6610e3e565b6000610d0e6111c4565b610e36611063565b610c92611686565b60008060008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610eb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed59190611a4d565b50935050925050600082131580610ef65750600654610ef48242611a9d565b115b959094509092509050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610c92576040517f1c0be90a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60055460408051918252602082018390527f5215771cad7bc88de36c71ac95764acc6eb44eeca03f4b9f90eb8a8c1131e3aa910160405180910390a1600555565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff838116918217835560015460405192939116917f162998b90abc2507f3953aa797827b03a14c42dbd9a35f09feaf02e0d592773a9190a350565b6000806000806000611018610da8565b915091506000611026610d13565b9050600080611033610e16565b915091506000611041610cb6565b90506110518686868686866113e6565b919b909a509098509650505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610c92576040517ff5c49e6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60015460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f31b6c5a04b069b6ec1b3cef44c4e7c1eadd721349cda9823d0b1877b3551cdc690600090a3600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60045460408051918252602082018390527fd9091eaf8ffa90874fbbfbf50958c6c6a5d100127e4c7deef1d60d4867d5b34b910160405180910390a1600455565b60035460408051918252602082018390527f9fcdd2fe48cfa74742b6d5df5ad1e1ac33489df503c6d8ccd07dee23649d42d0910160405180910390a1600355565b604080516001808252818301909252600091829190602080830190803683370190505090507f00000000000000000000000000000000000000000000000000000000000000008160008151811061121d5761121d611ab0565b73ffffffffffffffffffffffffffffffffffffffff909216602092830291909101909101526007546040517f07f7ca9f00000000000000000000000000000000000000000000000000000000815273b210ce856631eeeb767efa666ec7c1c57738d438916307f7ca9f916112ea91670de0b6b3a7640000917f0000000000000000000000000000000000000000000000000000000000000000917f000000000000000000000000000000000000000000000000000000000000000091889163ffffffff1690600401611adf565b602060405180830381865afa158015611307573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3c9190611b78565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb7b8b806040518163ffffffff1660e01b8152600401602060405180830381865afa158015611398573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113bc9190611b78565b905060045481116113cd57806113d1565b6004545b905060035481106113df5790565b5060035490565b6000808080886113fe87670de0b6b3a7640000611a1c565b61140891906119e1565b90506000670de0b6b3a7640000861061142957670de0b6b3a764000061142b565b855b90506000670de0b6b3a7640000831061144c57670de0b6b3a764000061144e565b825b90506000670de0b6b3a76400006114658c85611a1c565b61146f91906119e1565b90506000670de0b6b3a76400006114868d85611a1c565b61149091906119e1565b90506000826114a7670de0b6b3a764000080611a1c565b6114b191906119e1565b90506000826114c8670de0b6b3a764000080611a1c565b6114d291906119e1565b90508c806114dd57508f5b99508082106114ec57806114ee565b815b98508082116114fd57806114ff565b815b97505050505050505096509650969350505050565b6007546040805163ffffffff928316815291831660208301527fff6329dc32592cc1ca7632b812eeb3c11c2ad1fa053fb8d15999ab5d2a934f11910160405180910390a1600780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff92909216919091179055565b60008060008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015611602573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116269190611a4d565b50935050925050600082131580610ef65750600554610ef48242611a9d565b60065460408051918252602082018390527fd72ef688fa430b6a285b84371ba35e8a8e0762b32c1deb7be9d9c111ca79f5ea910160405180910390a1600655565b600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055610c92336110b4565b6000602082840312156116c957600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146116f957600080fd5b9392505050565b600060208083528351808285015260005b8181101561172d57858101830151858201604001528201611711565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b60006020828403121561177e57600080fd5b5035919050565b60006020828403121561179757600080fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146116f957600080fd5b803580151581146117cb57600080fd5b919050565b60008060008060008060c087890312156117e957600080fd5b6117f2876117bb565b9550602087013594506040870135935061180e606088016117bb565b92506080870135915060a087013590509295509295509295565b60006020828403121561183a57600080fd5b813563ffffffff811681146116f957600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007f800000000000000000000000000000000000000000000000000000000000000082036118ae576118ae61184e565b5060000390565b600181815b8085111561190e57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156118f4576118f461184e565b8085161561190157918102915b93841c93908002906118ba565b509250929050565b60008261192557506001610aa5565b8161193257506000610aa5565b816001811461194857600281146119525761196e565b6001915050610aa5565b60ff8411156119635761196361184e565b50506001821b610aa5565b5060208310610133831016604e8410600b8410161715611991575081810a610aa5565b61199b83836118b5565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156119cd576119cd61184e565b029392505050565b60006116f98383611916565b600082611a17577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b8082028115828204841417610aa557610aa561184e565b805169ffffffffffffffffffff811681146117cb57600080fd5b600080600080600060a08688031215611a6557600080fd5b611a6e86611a33565b9450602086015193506040860151925060608601519150611a9160808701611a33565b90509295509295909350565b81810381811115610aa557610aa561184e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060a082016fffffffffffffffffffffffffffffffff88168352602073ffffffffffffffffffffffffffffffffffffffff80891682860152808816604086015260a0606086015282875180855260c087019150838901945060005b81811015611b59578551841683529484019491840191600101611b3b565b50508094505050505063ffffffff831660808301529695505050505050565b600060208284031215611b8a57600080fd5b505191905056fe4672617855534443204375727665204c50204475616c204f7261636c6520772f204d696e204d617820426f756e64732c205374616c656e65737320436865636ba164736f6c6343000813000a0000000000000000000000008412ebf45bac1b340bbe8f318b928c466c4e39ca000000000000000000000000853d955acef822db058eb8505911ed77f175b99e0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000000000000000000000000000000000000000000006000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000000000000000000000000000000000000000000120000000000000000000000003175df0976dfa876431c2e9ee6bc45b65d3473cc0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000034800000000000000000000000000000000000000000000000000000000000000120000000000000000000000003175df0976dfa876431c2e9ee6bc45b65d3473cc0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000034800000000000000000000000000000000000000000000000000000000000000120000000000000000000000003175df0976dfa876431c2e9ee6bc45b65d3473cc00000000000000000000000000000000000000000000000000000000000000120000000000000000000000008fffffd4afb6115b954bd326cbe7b4ba576818f600000000000000000000000000000000000000000000000000000000000152ac000000000000000000000000b9e1e3a9feff48998e45fa90847ed4d467e8bcfd0000000000000000000000000000000000000000000000000000000000000f3c000000000000000000000000dcef968d416a41cdac0ed8702fac8128a64241a20000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000010a741a462780000000000000000000000000000c63b0708e2f7e69cb8a1df0e1389a98c35a76d520000000000000000000000000000000000000000000000000000000000000384000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000853d955acef822db058eb8505911ed77f175b99e