1 tx
0 calls
constructor
constructor(address _npm, address _operator, address _withdrawer, uint32 _TWAPSeconds, uint16 _maxTWAPTickDifference, address _aeroToken, address _feeWithdrawer)
functions
aeroToken
viewfunction aeroToken() view returns (address)
factory
viewfunction factory() view returns (address)
feeWithdrawer
viewfunction feeWithdrawer() view returns (address)
gaugeManagers
viewfunction gaugeManagers(address) view returns (bool)
MAX_REWARD_X64
viewfunction MAX_REWARD_X64() view returns (uint64)
MAX_TWAP_TICK_DIFFERENCE
viewfunction MAX_TWAP_TICK_DIFFERENCE() view returns (uint32)
maxTWAPTickDifference
viewfunction maxTWAPTickDifference() view returns (uint16)
MIN_TWAP_SECONDS
viewfunction MIN_TWAP_SECONDS() view returns (uint32)
nonfungiblePositionManager
viewfunction nonfungiblePositionManager() view returns (address)
operators
viewfunction operators(address) view returns (bool)
owner
viewfunction owner() view returns (address)
pendingOwner
viewfunction pendingOwner() view returns (address)
positionBalances
viewfunction positionBalances(uint256, address) view returns (uint256)
totalRewardX64
viewfunction totalRewardX64() view returns (uint64)
TWAPSeconds
viewfunction TWAPSeconds() view returns (uint32)
universalRouter
viewfunction universalRouter() view returns (address)
vaults
viewfunction vaults(address) view returns (bool)
weth
viewfunction weth() view returns (address)
withdrawer
viewfunction withdrawer() view returns (address)
zeroxAllowanceHolder
viewfunction zeroxAllowanceHolder() view returns (address)
acceptOwnership
nonpayablefunction acceptOwnership()
execute
nonpayablefunction execute(tuple params)
executeForGauge
nonpayablefunction executeForGauge(tuple params)
executeWithGauge
nonpayablefunction executeWithGauge(tuple params, address gaugeManager)
executeWithVault
nonpayablefunction executeWithVault(tuple params, address vault)
multicall
nonpayablefunction multicall(bytes[] data) returns (bytes[] results)
renounceOwnership
nonpayablefunction renounceOwnership()
setFeeWithdrawer
nonpayablefunction setFeeWithdrawer(address _feeWithdrawer)
setGaugeManager
nonpayablefunction setGaugeManager(address gaugeManager, bool active)
setOperator
nonpayablefunction setOperator(address _operator, bool _active)
setReward
nonpayablefunction setReward(uint64 _totalRewardX64)
setTWAPConfig
nonpayablefunction setTWAPConfig(uint16 _maxTWAPTickDifference, uint32 _TWAPSeconds)
setVault
nonpayablefunction setVault(address _vault)
setWithdrawer
nonpayablefunction setWithdrawer(address _withdrawer)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
uniswapV3SwapCallback
nonpayablefunction uniswapV3SwapCallback(int256 amount0Delta, int256 amount1Delta, bytes data)
withdrawBalances
nonpayablefunction withdrawBalances(address[] tokens, address to)
withdrawETH
nonpayablefunction withdrawETH(address to)
withdrawFees
nonpayablefunction withdrawFees(address[] tokens, address to)
withdrawLeftoverBalances
nonpayablefunction withdrawLeftoverBalances(uint256 tokenId, address to)
events
AutoCompounded
event AutoCompounded(address account, uint256 tokenId, uint256 amountAdded0, uint256 amountAdded1, uint256 reward0, uint256 reward1, address token0, address token1)
BalanceAdded
event BalanceAdded(uint256 tokenId, address token, uint256 amount)
BalanceRemoved
event BalanceRemoved(uint256 tokenId, address token, uint256 amount)
BalanceWithdrawn
event BalanceWithdrawn(uint256 tokenId, address token, address to, uint256 amount)
FeesWithdrawn
event FeesWithdrawn(address token, address to, uint256 amount)
FeeWithdrawerUpdated
event FeeWithdrawerUpdated(address withdrawer)
GaugeAutoCompounded
event GaugeAutoCompounded(address account, uint256 tokenId, uint256 aeroAmount, uint256 amountAdded0, uint256 amountAdded1, uint256 reward0, uint256 reward1, address token0, address token1)
GaugeManagerSet
event GaugeManagerSet(address gaugeManager, bool active)
OperatorChanged
event OperatorChanged(address newOperator, bool active)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
OwnershipTransferStarted
event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner)
RewardUpdated
event RewardUpdated(address account, uint64 totalRewardX64)
Swap
event Swap(address indexed tokenIn, address indexed tokenOut, uint256 amountIn, uint256 amountOut)
TWAPConfigChanged
event TWAPConfigChanged(uint32 TWAPSeconds, uint16 maxTWAPTickDifference)
VaultSet
event VaultSet(address newVault)
WithdrawerChanged
event WithdrawerChanged(address newWithdrawer)
errors
AlreadyStaked
error AlreadyStaked()
AmountError
error AmountError()
ChainlinkPriceError
error ChainlinkPriceError()
CollateralFactorExceedsMax
error CollateralFactorExceedsMax()
CollateralFail
error CollateralFail()
CollateralValueLimit
error CollateralValueLimit()
CollectError
error CollectError()
DailyDebtIncreaseLimit
error DailyDebtIncreaseLimit()
DailyLendIncreaseLimit
error DailyLendIncreaseLimit()
DebtChanged
error DebtChanged()
EtherSendFailed
error EtherSendFailed()
ExceedsMaxReward
error ExceedsMaxReward()
GaugeManagerNotSet
error GaugeManagerNotSet()
GaugeNotSet
error GaugeNotSet()
GlobalDebtLimit
error GlobalDebtLimit()
GlobalLendLimit
error GlobalLendLimit()
InsufficientLiquidity
error InsufficientLiquidity()
InterestNotUpdated
error InterestNotUpdated()
InvalidConfig
error InvalidConfig()
InvalidPool
error InvalidPool()
InvalidTickSpacing
error InvalidTickSpacing()
InvalidToken
error InvalidToken()
MinLoanSize
error MinLoanSize()
MissingSwapData
error MissingSwapData()
NeedsRepay
error NeedsRepay()
NoEtherToken
error NoEtherToken()
NoLiquidity
error NoLiquidity()
NoSharesRepayed
error NoSharesRepayed()
NotConfigured
error NotConfigured()
NotDepositor
error NotDepositor()
NotEnoughReward
error NotEnoughReward()
NotLiquidatable
error NotLiquidatable()
NotReady
error NotReady()
NotStaked
error NotStaked()
NotSupportedFeeTier
error NotSupportedFeeTier()
NotSupportedWhatToDo
error NotSupportedWhatToDo()
NotWETH
error NotWETH()
PriceDifferenceExceeded
error PriceDifferenceExceeded()
Reentrancy
error Reentrancy()
RewardClaimFailed
error RewardClaimFailed()
SameRange
error SameRange()
SameToken
error SameToken()
SelfSend
error SelfSend()
SequencerDown
error SequencerDown()
SequencerGracePeriodNotOver
error SequencerGracePeriodNotOver()
SequencerUptimeFeedInvalid
error SequencerUptimeFeedInvalid()
SlippageError
error SlippageError()
SwapAmountTooLarge
error SwapAmountTooLarge()
SwapFailed
error SwapFailed()
TooMuchEtherSent
error TooMuchEtherSent()
TransferError
error TransferError()
TransformFailed
error TransformFailed()
TransformNotAllowed
error TransformNotAllowed()
TWAPCheckFailed
error TWAPCheckFailed()
Unauthorized
error Unauthorized()
WrongContract
error WrongContract()
ZeroAddress
error ZeroAddress()
creation bytecode
0x61014080604052346200044e5760e0816200480d8038038091620000248285620004a8565b8339810103126200044e578051906001600160a01b03821682036200044e576200005160208201620004e0565b916200006060408301620004e0565b606083015163ffffffff811681036200044e5760808401519161ffff831683036200044e57620000a160c06200009960a08801620004e0565b9601620004e0565b600180546001600160a01b03199081169091555f8054339281168317825560405193979392916001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a36312a9293f60e21b81526020816004816001600160a01b0386165afa9081156200045b575f9162000466575b506001600160a01b0390811660805260405163c45a015560e01b8152906020908290600490829086165afa9081156200045b575f9162000415575b5060a05260c0525f60e052610100955f87526200017a620004f5565b604080516001600160a01b0390921680835260016020840152917f193de8d500b5cb7b720089b258a39e9c1d0b840019a73ae7c51c3f9101732b029190a15f52600360205260405f20600160ff19825416179055620001d8620004f5565b6040516001600160a01b03909116808252907fe01f246deab125c166ce0af811ab6c9df550a5df2c09786e50c294b547555acb90602090a1600480546001600160a01b031981168317909155926200022f620004f5565b603c63ffffffff841610620004035760c861ffff82161162000403577f357caff64c051e6cfe5bc6ac50962fffbed9b9d32b95bc99bd724139c65766456040805163ffffffff8616815261ffff84166020820152a160a09290921b63ffffffff60a01b166001600160d01b0319909316179190911760c09190911b61ffff60c01b16176004556001600555600880546001600160a01b039093166101209081526001600160e01b0319909316604092831b600160401b600160e01b0316179055516142bf92909190836200054e8439608051838181601a0152611bb2015260a0518381816113cc0152613c02015260c051838181610761015281816107b801528181610ae7015281816111290152818161143801528181611cad015281816125fb0152818161291501526138f0015260e051838181611bf601528181612a4b01528181612b4e01528181612c3701528181612d380152818161326d015281816133fd0152818161343201526134ab015251828181611244015281816136bd015281816137240152818161376a01526137b00152518181816112000152818161259f015281816129ef01528181612a7801528181612aee01528181612b6f01528181612c6401528181612ce20152612d590152f35b6040516306b7c75960e31b8152600490fd5b90506020813d60201162000452575b816200043360209383620004a8565b810103126200044e576200044790620004e0565b5f6200015e565b5f80fd5b3d915062000424565b6040513d5f823e3d90fd5b90506020813d6020116200049f575b816200048460209383620004a8565b810103126200044e576200049890620004e0565b5f62000123565b3d915062000475565b601f909101601f19168101906001600160401b03821190821017620004cc57604052565b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b03821682036200044e57565b5f546001600160a01b031633036200050957565b606460405162461bcd60e51b815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fdfe6080604052600436101561005c575b3615610018575f80fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361004a57005b604051635724f38560e01b8152600490fd5b5f3560e01c8062fc59c01461204c578063026d3a7c146120085780630d174c2414611f995780630d33438014611f755780630f131cd414611f3857806313e7c9d814611efb5780631f30d9ab14611c6a57806331268b6914611c4f57806332b4fa6b14611c2557806335a9e4df14611be15780633fc8cef314611b9d57806341381fc614611b59578063558a729714611ad557806355b86dad14611aaf57806355f2c8ef14611976578063655b4b0a146118f15780636817031b1461187e578063690d832014611820578063715018a6146117d057806379ba5097146117275780638375cf42146117055780638da5cb5b146116de578063976b3d9e1461161b578063a622ee7c146115de578063ac9650d814611467578063b44a272214611423578063b526b8e6146113fb578063c45a0155146113b7578063cdc184241461138f578063ceee8d8114611374578063cf20d58c14611273578063d2a5e66d1461122f578063d956ba9f146111eb578063e30c3978146111c3578063e6daaf9c146106a4578063eb4f36cf146105a4578063f069143d146104ed578063f2fde38b14610487578063f7e7aab0146103035763fa461e330361000e57346102f65760603660031901126102f6576024356044356004356001600160401b038083116102f657366023840112156102f65782600401359081116102f6578201923660248501116102f6575f8213938480156102fa575b156102f6578360609103126102f65761028b602484016120f6565b6064610299604486016120f6565b94013562ffffff811681036102f6576001600160a01b03918216946102c19190831686613bc6565b1633036102e5576102db93156102dd5750905b3390613d26565b005b9050906102d4565b6040516282b42960e81b8152600490fd5b5f80fd5b505f8213610270565b346102f65761031136612209565b9161031a612ffe565b6008546001600160a01b03939060401c8416330361044d575f5b838110610342576001600555005b84610356610351838787612f83565b612f93565b169060405180926370a0823160e01b825230600483015281602460209384935afa801561044257879187915f9061040e575b60019550878588836103a2575b5050505050505001610334565b7f5e110f8bc8a20b65dcc87f224bdf1cc039346e267118bae2739847f07321ffa8966103d861035186946060996103de97612f83565b16613d26565b6103ec610351868b8b612f83565b918a604051931683528a8816908301526040820152a185858880878588610395565b509150508083813d831161043b575b61042781836122b7565b810103126102f65785879160019451610388565b503d61041d565b6040513d5f823e3d90fd5b60405162461bcd60e51b81526020600482015260126024820152712737ba103332b2903bb4ba34323930bbb2b960711b6044820152606490fd5b346102f65760203660031901126102f6576104a06120ca565b6104a8612fa7565b60018060a01b03809116908160018060a01b031960015416176001555f54167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b346102f65760203660031901126102f6576004356001600160401b038116908190036102f65761051b612fa7565b670ccccccccccccccc811161057057600880546001600160401b031916821790556040805133815260208101929092527f4f8e1611b968330cd0bb35a8eb118e101c3150d89857953901527628483bc9ed91a1005b60405162461bcd60e51b815260206004820152600c60248201526b08ccaca40e8dede40d0d2ced60a31b6044820152606490fd5b346102f6576105b236612209565b6105bd929192612ffe565b6004546001600160a01b0390811633036102e5575f5b8481106105e1576001600555005b806105f26103516001938888612f83565b83165f8181525f8051602061424a83398151915260209081526040909120546007919080610625575b50505050016105d3565b5f8051602061426a833981519152936080936106418380612558565b905f8052845260405f20825f52845260405f2055604051905f825280848301528260408301525f805160206141aa83398151915260608093a1610685838b83613d26565b604051935f85528401528789166040840152820152a18680808061061b565b346102f65760803660031901126102f6576106bd612ffe565b335f52600360205260ff60405f20541615611068575b6106db6122da565b604051608081016001600160401b03811182821017610eea57604090815260048035835230602084019081526001600160801b0384840181815260608601828152855163fc6f786560e01b815296519487019490945291516001600160a01b03908116602487015291518116604486015291519091166064840152829060849082905f907f0000000000000000000000000000000000000000000000000000000000000000165af18015610442575f915f9161102f575b506020830152815260405163133f757160e31b81526004803590820152610180816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610442575f905f905f905f905f90610fe3575b600290810b6101608801520b61014086015262ffffff166101208501526001600160a01b0390811661010085015290811660e0840190815283516004355f90815260076020908152604080832094519095168252929092529190205461085e9250906124eb565b815261089460208201516004355f52600760205260405f2060018060a01b03610100850151165f5260205260405f2054906124eb565b80602083015281511590811591610fd9575b50610927575b610100816101805f805160206141ea833981519152930151906101a081015190608081015160a08201519060018060a01b0360e084015116928660018060a01b03910151169360405195338752600435602088015260408701526060860152608085015260a084015260c083015260e0820152a16001600555005b60443580610bc8575b5060085481516001600160401b0390911690604081901b90600160401b8183041490151715610bb457600160401b82018211610bb45761097790600160401b830190612119565b60408301526020820151808060401b04600160401b1481151715610bb4576109a891600160401b019060401b612119565b80606083015260408201511590811591610baa575b50610a68575b6101005f805160206141ea83398151915291610a0260018060a01b0360e0830151166109f9604084015161018085015190612558565b90600435613a1a565b8082015160608201516101a0830151610a29926001600160a01b0316916109f99190612558565b60e08101516080820151610a45916001600160a01b0316613aca565b8082015160a0820151610a60916001600160a01b0316613aca565b9150506108ac565b60e0810151610100820151610ae29291610a8e916001600160a01b0390811691166138d7565b606060408201518183015160405191610aa68361224b565b6004358352602083015260408201525f828201525f608082015260643560a08201526040518094819263219f5d1760e01b83526004830161251a565b03815f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af1908115610442575f805160206141ea83398151915292610100925f915f91610b76575b506101a0830152610180820152610b518151604083015190612558565b6080820152610b696020820151606083015190612558565b60a08201529150506109c3565b9050610b9a915060603d606011610ba3575b610b9281836122b7565b8101906124f8565b91509085610b34565b503d610b88565b90501515826109bd565b634e487b7160e01b5f52601160045260245ffd5b60e0820151610100830151610120840151610bf79262ffffff909116916001600160a01b039081169116613bc6565b604051633850c7bd60e01b815290919060e0816004816001600160a01b0387165afa8015610442575f915f91610f4e575b5060020b6101c085018190526001600160a01b039091166101e08501526004549060a082901c63ffffffff169081610f27575b50505080610c6a575b50610930565b60e083015161010084015161012085015162ffffff16926001600160a01b0391821692909116610c98612f74565b604051926001600160401b0360e0850190811190851117610eea5760e0840160405260018060a01b038716845282602085015284604085015285606085015260c060808501921515948584528260a082015201935f85525f975f9783610d80575b50505050505050506102008301906102208401928184528252610d1a612f74565b15610d705750610d2d8351825190612558565b8352610d37612f74565b15610d59575060208201519051610d4d916124eb565b60208201528180610c64565b610d6b91506020830151905190612558565b610d4d565b610d7b9084516124eb565b610d2d565b91939597509193959750825f14610f0c576401000276a4975b8315610f0557865b8415610efe57505b604080516001600160a01b0398891660208201529190971696810196909652606080870191909152855260808501966001600160401b03881186891017610eea576040938893848652630251596160e31b855230608489015260a488015260c487015260018060a01b031660e486015260a0610104860152815f607f1987610e35610124820182612188565b0301926001600160a01b03165af1918215610442575f945f93610ead575b5050511580159390610ea757805b9315610e985750610e7190613d16565b80915111610e86578380808080808080610cf9565b604051630d4205a160e11b8152600490fd5b610ea29150613d16565b610e71565b81610e61565b91925093506040843d604011610ee2575b81610ecb604093856122b7565b810103126102f65760a09051930151908580610e53565b3d9150610ebe565b634e487b7160e01b5f52604160045260245ffd5b9050610da9565b8096610da1565b73fffd8963efd1fc6a506488495d951d5263988d2597610d99565b61ffff610f399360c01c169185613cb3565b15610f47575b838080610c5b565b505f610f3f565b91505060e0813d60e011610fd1575b81610f6a60e093836122b7565b810103126102f657610f7b8161236d565b610f8760208301612381565b91610f9460408201612f58565b50610fa160608201612f58565b50610fae60808201612f58565b5060a081015160ff8116036102f65760c0610fc99101612f67565b509085610c28565b3d9150610f5d565b90501515826108a6565b505050505061100f62ffffff916101803d61018011611028575b61100781836122b7565b8101906123a3565b50979a508a995095975093955091935091506107f79050565b503d610ffd565b9150506040813d604011611060575b8161104b604093836122b7565b810103126102f6576020815191015183610792565b3d915061103e565b600260205260405f205460ff16156102e557600435335f52600260205260ff60405f2054165f146111035760405163ae41abab60e01b815290602082600481335afa918215610442575f926110cf575b50146106d3576040516282b42960e81b8152600490fd5b9091506020813d6020116110fb575b816110eb602093836122b7565b810103126102f6575190826110b8565b3d91506110de565b6040516331a9108f60e11b815260048101919091526001600160a01b03906020816024817f000000000000000000000000000000000000000000000000000000000000000086165afa908115610442575f91611189575b501633811415908161117e575b50156106d3576040516282b42960e81b8152600490fd5b905030141581611167565b90506020813d6020116111bb575b816111a4602093836122b7565b810103126102f6576111b59061236d565b8261115a565b3d9150611197565b346102f6575f3660031901126102f6576001546040516001600160a01b039091168152602090f35b346102f6575f3660031901126102f6576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346102f6575f3660031901126102f6576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346102f657366003190160a081126102f6576080136102f6576084356001600160a01b038116908190036102f657335f526020906003825260ff60405f20541615801561135e575b6102e5576040516339b6abe760e21b818401526004356024820181905261132a928492916112e761210a565b15156044840152604435606484015260643560848401526084835261130b8361224b565b5f604051809681958294631e331d9160e21b8452309060048501612ea5565b03925af180156104425761133a57005b813d8311611357575b61134d81836122b7565b810103126102f657005b503d611343565b50805f526002825260ff60405f205416156112bb565b346102f6575f3660031901126102f657602060405160c88152f35b346102f6575f3660031901126102f6576004546040516001600160a01b039091168152602090f35b346102f6575f3660031901126102f6576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346102f6575f3660031901126102f6576008546040516001600160401b039091168152602090f35b346102f6575f3660031901126102f6576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346102f6576020806003193601126102f6576001600160401b03906004358281116102f65761149a903690600401612137565b90926040518381019181831090831117610eea57816040525f81526114be83612efc565b946114cc60405196876122b7565b838652601f196114db85612efc565b01855f5b8281106115ce575050505f5b84811061150957604051868152806115058189018a6121ad565b0390f35b806115b261154c5f808a61155861152760019860051b8a018a61244e565b8b8d60409593955198838a948686019889378401918583019389855251938491612167565b010380875201856122b7565b6040519361156585612281565b602785527f416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c8d860152660819985a5b195960ca1b60408601525190305af46115ab612ecd565b903061410c565b6115bc828a612f44565b526115c78189612f44565b50016114eb565b606082828b0101520186906114df565b346102f65760203660031901126102f6576001600160a01b036115ff6120ca565b165f526002602052602060ff60405f2054166040519015158152f35b346102f65760403660031901126102f65760043561ffff8116908181036102f6576024359163ffffffff8316908184036102f657611657612fa7565b603c82106116cc5760c881116116cc577f357caff64c051e6cfe5bc6ac50962fffbed9b9d32b95bc99bd724139c65766459160409182519182526020820152a16004805465ffffffffffff60a01b191660a09390931b63ffffffff60a01b169290921760c09190911b61ffff60c01b16179055005b6040516306b7c75960e31b8152600490fd5b346102f6575f3660031901126102f6575f546040516001600160a01b039091168152602090f35b346102f6575f3660031901126102f6576020604051670ccccccccccccccc8152f35b346102f6575f3660031901126102f6576001546001600160a01b0333818316036117795760018060a01b03198092166001555f549133908316175f553391165f8051602061422a8339815191525f80a3005b60405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608490fd5b346102f6575f3660031901126102f6576117e8612fa7565b600180546001600160a01b03199081169091555f80549182168155906001600160a01b03165f8051602061422a8339815191528280a3005b346102f65760203660031901126102f6576118396120ca565b6004546001600160a01b031633036102e55747908161185457005b5f80809381935af1611864612ecd565b501561186c57005b604051637cd69c3960e11b8152600490fd5b346102f65760203660031901126102f6576118976120ca565b61189f612fa7565b6040516001600160a01b03909116808252907fe7ae49f883c825b05681b3e00e8be6fdea9ed2a8a45e4c6ecb9390fc44cce61590602090a15f908152600260205260409020805460ff19166001179055005b346102f65760403660031901126102f6577f5e3b6f4487fee88c139b5443efdf7965dae9ccf8dadf46f76a71e6205455044861192b6120ca565b61193361210a565b9061193c612fa7565b6001600160a01b0381165f908152600660205260409020805460ff191660ff8415151617905561197160405192839283612e38565b0390a1005b346102f6576003196040368201126102f6576004356001600160401b0381116102f65760e0816004019282360301126102f6576119b16120e0565b90335f526020926003845260ff60405f205416158015611a8e575b6102e557611a7592849261130b83611a4194359260c4604051968793629b4e9f60e21b8a860152896024860152866044860152611a2f611a24611a126024870184612e53565b60e060648a0152610124890191612e85565b916044860190612e53565b86830360431901608488015290612e85565b91606481013560a485015260848101358285015260a481013560e4850152013561010483015203601f1981018552846122b7565b03926001600160a01b03165af180156104425761133a57005b506001600160a01b0383165f90815260068552604090205460ff16156119cc565b346102f6575f3660031901126102f657602063ffffffff60045460a01c16604051908152f35b346102f65760403660031901126102f6576102db611af16120ca565b611af961210a565b90611b02612fa7565b7f193de8d500b5cb7b720089b258a39e9c1d0b840019a73ae7c51c3f9101732b0260405180611b32858583612e38565b0390a160018060a01b03165f52600360205260405f209060ff801983541691151516179055565b346102f65760403660031901126102f657611b726120e0565b6004355f52600760205260405f209060018060a01b03165f52602052602060405f2054604051908152f35b346102f6575f3660031901126102f6576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346102f6575f3660031901126102f6576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346102f6575f3660031901126102f6576008546040805191901c6001600160a01b03168152602090f35b346102f6575f3660031901126102f6576020604051603c8152f35b346102f65760403660031901126102f657600435611c866120e0565b611c8e612ffe565b6040516331a9108f60e11b808252600482018490526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169492909160209182816024818a5afa801561044257849284925f92611ebf575b50838216805f526002845260ff60405f2054165f14611e3b57506024905f604051958694859384528a6004850152165af1908115610442575f91611e06575b505b82339116036102e557604051809563133f757160e31b82528460048301528160246101809384935afa958615610442575f915f97611dd9575b50508490845f526007835260405f208482165f52835260405f20549081611dc5575b505050825f526007815260405f209185165f525260405f20549182611db1575b6001600555005b611dbc938392613b24565b80808080611daa565b611dd192829187613b24565b838680611d8a565b869750611df29250803d106110285761100781836122b7565b505050505050505097925090509087611d68565b90508181813d8311611e34575b611e1d81836122b7565b810103126102f657611e2e9061236d565b86611d2d565b503d611e13565b919350506006825260ff60405f205416611e57575b5050611d2f565b60249250604051928380926362474ea160e01b82528860048301525afa908115610442575f91611e8a575b508187611e50565b90508181813d8311611eb8575b611ea181836122b7565b810103126102f657611eb29061236d565b86611e82565b503d611e97565b92839194508092503d8311611ef4575b611ed981836122b7565b810103126102f6578391611eed849261236d565b9089611cee565b503d611ecf565b346102f65760203660031901126102f6576001600160a01b03611f1c6120ca565b165f526003602052602060ff60405f2054166040519015158152f35b346102f65760203660031901126102f6576001600160a01b03611f596120ca565b165f526006602052602060ff60405f2054166040519015158152f35b346102f6575f3660031901126102f657602061ffff60045460c01c16604051908152f35b346102f65760203660031901126102f657611fb26120ca565b611fba612fa7565b6040516001600160a01b03909116808252907fe01f246deab125c166ce0af811ab6c9df550a5df2c09786e50c294b547555acb90602090a1600480546001600160a01b031916919091179055005b346102f6576003196020368201126102f657600435906001600160401b0382116102f65760e09082360301126102f657611daa90612044612ffe565b600401612565565b346102f65760203660031901126102f6577f5f69f9a50088e24c4b3901d14e89e4dac168abd771d24ef096bb47a7696c2f0060206120886120ca565b612090612fa7565b60088054600160401b600160e01b031916604083811b600160401b600160e01b031691909117909155516001600160a01b039091168152a1005b600435906001600160a01b03821682036102f657565b602435906001600160a01b03821682036102f657565b35906001600160a01b03821682036102f657565b6024359081151582036102f657565b8115612123570490565b634e487b7160e01b5f52601260045260245ffd5b9181601f840112156102f6578235916001600160401b0383116102f6576020808501948460051b0101116102f657565b5f5b8381106121785750505f910152565b8181015183820152602001612169565b906020916121a181518092818552858086019101612167565b601f01601f1916010190565b90808251908181526020809101926020808460051b8301019501935f915b8483106121db5750505050505090565b90919293949584806121f9600193601f198682030187528a51612188565b98019301930191949392906121cb565b60406003198201126102f657600435906001600160401b0382116102f65761223391600401612137565b90916024356001600160a01b03811681036102f65790565b60c081019081106001600160401b03821117610eea57604052565b60a081019081106001600160401b03821117610eea57604052565b606081019081106001600160401b03821117610eea57604052565b608081019081106001600160401b03821117610eea57604052565b601f909101601f19168101906001600160401b03821190821017610eea57604052565b6040519061024082016001600160401b03811183821017610eea576040525f610220838281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e08201528261010082015282610120820152826101408201528261016082015282610180820152826101a0820152826101c0820152826101e0820152826102008201520152565b51906001600160a01b03821682036102f657565b51908160020b82036102f657565b51906001600160801b03821682036102f657565b9190826101809103126102f65781516001600160601b03811681036102f657916123cf6020820161236d565b916123dc6040830161236d565b916123e96060820161236d565b91608082015162ffffff811681036102f6579161240860a08201612381565b9161241560c08301612381565b9161242260e0820161238f565b91610100820151916101208101519161244b610160612444610140850161238f565b930161238f565b90565b903590601e19813603018212156102f657018035906001600160401b0382116102f6576020019181360383136102f657565b6001600160a01b0391821681529116602082015260400190565b6001600160401b038111610eea57601f01601f191660200190565b9291926124c18261249a565b916124cf60405193846122b7565b8294818452818301116102f6578281602093845f960137010152565b91908201809211610bb457565b908160609103126102f65761250c8161238f565b916040602083015192015190565b91909160a08060c083019480518452602081015160208501526040810151604085015260608101516060850152608081015160808501520151910152565b91908203918211610bb457565b335f52600660205260ff60405f205416156102e5576125826122da565b6040516370a0823160e01b815230600482015291906020836024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa928315610442575f93612e04575b508215612dff5760405163133f757160e31b815282356004820152610180816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610442575f905f905f905f905f90612dc3575b600290810b6101608801520b61014086015262ffffff166101208501526001600160a01b039081166101008501521660e08301525061267c602083018361244e565b9050151580612db6575b612bfe575b612698604083018361244e565b90506129d4575b6126ce815183355f52600760205260405f2060018060a01b0360e0850151165f5260205260405f2054906124eb565b8152612703602082015183355f52600760205260405f2060018060a01b03610100850151165f5260205260405f2054906124eb565b60208201526008548151600160401b916001600160401b031690604081901b90801590820484141715610bb457828201809211610bb4578161274491612119565b604084015260208301518060401b928184041490151715610bb45761276891612119565b806060830152604082015115908115916129ca575b50612892575b905f8051602061420a833981519152926101209260018060a01b0360e0820151166127c66040830151916127be610180850193845190612558565b908635613a1a565b60018060a01b0361010083015116906127f76060840151926127ef6101a0860194855190612558565b908735613a1a565b60e0830151608084018051909161281791906001600160a01b0316613aca565b61010084015160a08501805190939161283991906001600160a01b0316613aca565b519251905191519260018060a01b0360e0860151169461010060018060a01b0391015116956040519733895235602089015260408801526060870152608086015260a085015260c084015260e0830152610100820152a1565b60e081015161010082015161291094929392916128bb916001600160a01b0390811691166138d7565b6060604084015181850151604051916128d38361224b565b85358352602083015260408201525f828201525f608082015260c084013560a08201526040518096819263219f5d1760e01b83526004830161251a565b03815f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af1928315610442575f8051602061420a83398151915294610120945f915f916129a6575b506101a083015261018082015261297f8151604083015190612558565b60808201526129976020820151606083015190612558565b60a08201529192509250612783565b90506129c1915060603d606011610ba357610b9281836122b7565b9150905f612962565b905015155f61277d565b6040516370a0823160e01b81523060048201526020816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610442575f91612bcc575b5080612a34575b5061269f565b604051636eb1769f60e11b81529060208280612a747f00000000000000000000000000000000000000000000000000000000000000003060048401612480565b03817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa918215610442575f92612b98575b5080612b3d9210612b49575b6101008301516001600160a01b031690612b3390612add604087018761244e565b909160405194612aec86612266565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168652602086015260408501526080870135606085015236916124b5565b60808201526131c0565b6020830152505f612a2e565b612b937f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000061306f565b612abc565b91506020823d602011612bc4575b81612bb3602093836122b7565b810103126102f65790519080612ab0565b3d9150612ba6565b90506020813d602011612bf6575b81612be7602093836122b7565b810103126102f657515f612a27565b3d9150612bda565b60a082013583818102048103610bb45761271081850204612c20575b5061268b565b604051636eb1769f60e11b81529060208280612c607f00000000000000000000000000000000000000000000000000000000000000003060048401612480565b03817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa8015610442575f90612d82575b612d2a92506127108287020411612d33575b60e08301516001600160a01b031690612b3390612710612cd0602088018861244e565b91909260405195612ce087612266565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168752602087015289020460408501526060878101359085015236916124b5565b8252505f612c1a565b612d7d7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000061306f565b612cad565b506020823d602011612dae575b81612d9c602093836122b7565b810103126102f657612d2a9151612c9b565b3d9150612d8f565b5060a08201351515612686565b5050505050612de662ffffff916101803d610180116110285761100781836122b7565b50979a508a9950959750939550919350915061263a9050565b505050565b9092506020813d602011612e30575b81612e20602093836122b7565b810103126102f65751915f6125d7565b3d9150612e13565b6001600160a01b039091168152901515602082015260400190565b9035601e19823603018112156102f6570160208101919035906001600160401b0382116102f65781360383136102f657565b908060209392818452848401375f828201840152601f01601f1916010190565b9081526001600160a01b03909116602082015260606040820181905261244b92910190612188565b3d15612ef7573d90612ede8261249a565b91612eec60405193846122b7565b82523d5f602084013e565b606090565b6001600160401b038111610eea5760051b60200190565b805115612f205760200190565b634e487b7160e01b5f52603260045260245ffd5b805160011015612f205760400190565b8051821015612f205760209160051b010190565b519061ffff821682036102f657565b519081151582036102f657565b60243580151581036102f65790565b9190811015612f205760051b0190565b356001600160a01b03811681036102f65790565b5f546001600160a01b03163303612fba57565b606460405162461bcd60e51b815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b60026005541461300f576002600555565b60405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606490fd5b6001600160a01b039091168152602081019190915260400190565b604051636eb1769f60e11b8152919291602091906001600160a01b039083818061309d893060048401612480565b03818587165afa908115610442575f91613151575b506130ed576130eb93946040519363095ea7b360e01b908501521660248301525f196044830152604482526130e68261229c565b613d4d565b565b60405162461bcd60e51b815260048101849052603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b6064820152608490fd5b90508381813d8311613177575b61316881836122b7565b810103126102f657515f6130b2565b503d61315e565b81601f820112156102f65780516131948161249a565b926131a260405194856122b7565b818452602082840101116102f65761244b9160208085019101612167565b5f915f915f9060408101511515806138c9575b806138b3575b806138a0575b6131e7575050565b80516040516370a0823160e01b8152306004820152929550909350602090829060249082906001600160a01b03165afa908115610442575f9161386e575b506020838101516040516370a0823160e01b81523060048201529190829060249082906001600160a01b03165afa908115610442575f9161383c575b506080840151602001517f00000000000000000000000000000000000000000000000000000000000000000361369457608084015180518101906040818303126102f65760208101516001600160a01b038116036102f6576040810151916001600160401b0383116102f6576132de92602080920192010161317e565b805181016020828203126102f65760208201516001600160401b0381116102f65760608184018303126102f65760405192606084016001600160401b03811185821017610eea57604052808201602001516001600160401b0381116102f65761335190602080860191858501010161317e565b845280820160400151926001600160401b0384116102f65760208101603f85858501010112156102f65760208484840101015161338d81612efc565b9461339b60405196876122b7565b818652602086016020840160408460051b84898901010101116102f6576040828787010101905b60408460051b84898901010101821061365b575050505050602084019283520160600151604080840191825287519088015191939161342b917f0000000000000000000000000000000000000000000000000000000000000000906001600160a01b0316613d26565b51905191517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163b156102f6575f9161348c9161349e6040519586948594630d64d59360e21b8652606060048701526064860190612188565b848103600319016024860152906121ad565b60448301919091520381837f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af180156104425761363f575b505b83516040516370a0823160e01b815230600482015290602090829060249082906001600160a01b03165afa908115613634578691613601575b5061352890602493612558565b6020858101516040516370a0823160e01b815230600482015292979294859182906001600160a01b03165afa9081156135f557906135c1575b61356b9250612558565b9160608101518310610e865760018060a01b0381511690602060018060a01b0391015116907ffa2dda1cc1b86e41239702756b13effbc1a092b5c57e3ad320fbe4f3b13fe23560408051878152866020820152a3565b506020823d6020116135ed575b816135db602093836122b7565b810103126102f65761356b9151613561565b3d91506135ce565b604051903d90823e3d90fd5b90506020813d60201161362c575b8161361c602093836122b7565b810103126102f65751602461351b565b3d915061360f565b6040513d88823e3d90fd5b9094506001600160401b038111610eea576040525f935f6134e0565b8151906001600160401b0382116102f657602080916136878960408096898e878e01940101010161317e565b81520192019190506133c2565b83516040808601519051636eb1769f60e11b81526001600160a01b0390921691602081806136e67f00000000000000000000000000000000000000000000000000000000000000003060048401612480565b0381865afa908115610442575f91613808575b5061375a91613707916124eb565b91604051906130e68261374c63095ea7b360e01b968760208401527f000000000000000000000000000000000000000000000000000000000000000060248401613054565b03601f1981018452836122b7565b5f806080870151602081519101827f00000000000000000000000000000000000000000000000000000000000000005af1613793612ecd565b50156137f657845160405160208101929092526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660248401525f60448085019190915283526137f19291166130e68261229c565b6134e2565b60405163081ceff360e41b8152600490fd5b90506020813d602011613834575b81613823602093836122b7565b810103126102f6575161375a6136f9565b3d9150613816565b90506020813d602011613866575b81613857602093836122b7565b810103126102f657515f613261565b3d915061384a565b90506020813d602011613898575b81613889602093836122b7565b810103126102f657515f613225565b3d915061387c565b5080516001600160a01b031615156131df565b5060208101516001600160a01b031615156131d9565b5060808101515115156131d3565b604051636eb1769f60e11b808252926001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116936020939192919083169084818061392d893060048401612480565b0381855afa80156104425786915f916139c8575b50156139b8575b50501692604051908152818180613963863060048401612480565b0381875afa918215610442575f9261398a575b505015613981575050565b6130eb9161306f565b90809250813d83116139b1575b6139a181836122b7565b810103126102f657515f80613976565b503d613997565b6139c19161306f565b5f84613948565b809250868092503d83116139f2575b6139e181836122b7565b810103126102f6578590515f613941565b503d6139d7565b9081526001600160a01b039091166020820152604081019190915260600190565b5f8181526007602090815260408083206001600160a01b03861680855292529182902054919490828203613a51575b505050505050565b835f526007602052855f20905f5260205280855f20558181115f14613aa65793613a8c613a97925f805160206141ca83398151915296612558565b9051938493846139f9565b0390a15b5f8080808080613a49565b93613a8c5f805160206141aa83398151915295613ac293612558565b0390a1613a9b565b6001600160a01b03165f8181525f8051602061424a8339815191526020526040902080545f805160206141ca83398151915293606093929091613b0e9083906124eb565b9055604051915f835260208301526040820152a1565b919390838211613bb4575f8051602061426a83398151915294613b4983608096612558565b91845f5260076020525f805160206141aa8339815191528460405f209260018060a01b039586821694855f5260205260405f2055613b8d6040519283928a846139f9565b0390a1613b9b848383613d26565b60405194855260208501521660408301526060820152a1565b60405163bb55fd2760e01b8152600490fd5b6040516328af8d0b60e01b81526001600160a01b039182166004820152918116602483015262ffffff90921660020b60448201526020816064817f000000000000000000000000000000000000000000000000000000000000000086165afa908115610442575f91613c79575b50168015613c3e5790565b60405162461bcd60e51b8152602060048201526013602482015272141bdbdb08191bd95cc81b9bdd08195e1a5cdd606a1b6044820152606490fd5b90506020813d602011613cab575b81613c94602093836122b7565b810103126102f657613ca59061236d565b5f613c33565b3d9150613c87565b90613cbd91613e6f565b90919015613d0f5760020b9060020b03627fffff8113627fffff19821217610bb45760020b9061ffff1660010b617fff198114610bb457805f0360010b8212159182613d0857505090565b1315919050565b5050505f90565b600160ff1b8114610bb4575f0390565b6130e66130eb939261374c60405194859263a9059cbb60e01b602085015260248401613054565b60408051908101916001600160a01b03166001600160401b03831182841017610eea57613dbb926040525f806020958685527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656487860152868151910182855af1613db5612ecd565b9161410c565b8051828115918215613e2b575b5050905015613dd45750565b6084906040519062461bcd60e51b82526004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152fd5b83809293500103126102f65781613e429101612f67565b80825f613dc8565b600691820b910b0390667fffffffffffff198212667fffffffffffff831317610bb457565b6040805192613e7d84612281565b6002845260209283850194833687375f613e9682612f13565b52613ea081612f34565b9563ffffffff809416809752845193849263883bdbfd60e01b84526024840190886004860152518091526044840192915f905b898383106140ef57505f9694869003948694506001600160a01b0316925050505afa9283925f94613fe7575b505050613f0e5750505f905f90565b613f1781612f13565b5190613f33600692613f2883612f34565b51840b90840b613e4a565b820b9183810b8015612123575f1993667fffffffffffff19811482861416610bb4570560020b935f613f7c613f6785612f13565b51840b613f7386612f34565b51850b90613e4a565b830b129283613fa8575b505050613f95575b5090600190565b90627fffff198114610bb457015f613f8e565b613fcd91929350613fc4613fbb82612f13565b51850b91612f34565b51840b90613e4a565b9060030b90811561212357820b07900b15155f8080613f86565b90919293503d805f853e613ffb81856122b7565b83019080848303126102f65783516001600160401b03908181116102f65785019483601f870112156102f65785519561403387612efc565b96614040855198896122b7565b808852868089019160051b830101918683116102f6578701905b8282106140d657505050848101519182116102f6570182601f820112156102f657838082519361409561408c86612efc565b915191826122b7565b848152019260051b8201019283116102f6578301905b8282106140bf5750505050905f8080613eff565b8380916140cb8461236d565b8152019101906140ab565b81518060060b81036102f657815290870190870161405a565b845182168652889650948501949093019260019190910190613ed3565b9192901561416e5750815115614120575090565b3b156141295790565b60405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606490fd5b8251909150156141815750805190602001fd5b60405162461bcd60e51b8152602060048201529081906141a5906024830190612188565b0390fdfe8b7613446491a76eca2e0fedab9e58de16b6214b8da7c5bf9f28f788552d60bebcd62a17a6c89a58306c4a7736fa96032326d6d625d6076830b31c4d8594bb7885058548e7a7243b0976c561ca5316398d5368a87260205c952f2dc35aadc4eaa7a6254b38dd604059df306835b666e51101787ab6d49df4026057693033b0918be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e06d5257204ebe7d88fd91ae87941cb2dd9d8062b64ae5a2bd2d28ec40b9fbf6df979d1484603fb6269bf081e96ad146b46974ce457dc161637a77d2ddaea8918da26469706673582212209617a47e92040eb6edd453cb1fb1336eba9dfc7575d45bf8199b04f0b00e4f4064736f6c63430008180033000000000000000000000000827922686190790b37229fd06084350e74485b720000000000000000000000003895e33b91f19b279d30b1436640c87e300d2dac0000000000000000000000003895e33b91f19b279d30b1436640c87e300d2dac000000000000000000000000000000000000000000000000000000000000003c00000000000000000000000000000000000000000000000000000000000000c8000000000000000000000000940181a94a35a4569e4529a3cdfb74e38fd986310000000000000000000000003895e33b91f19b279d30b1436640c87e300d2dac