2 txs
13 calls
constructor
constructor(address globalRegistry_, address vault_, address farmToken_, string description_, address delayedWithdrawalAdapter_)
functions
allTokens
viewfunction allTokens() view returns (address[])
asset
viewfunction asset() view returns (address)
assetYieldCoefficient
viewfunction assetYieldCoefficient() view returns (uint256, uint256)
collectedFees
viewfunction collectedFees() view returns (address[] tokens, uint256[] collected)
delayedWithdrawalAdapter
viewfunction delayedWithdrawalAdapter(address token) view returns (address)
description
viewfunction description() view returns (string)
ERC4626Vault
viewfunction ERC4626Vault() view returns (address)
FEE_MANAGER
viewfunction FEE_MANAGER() view returns (bytes32)
fees
viewfunction fees() view returns (uint8[] types, uint16[] bps)
globalRegistry
viewfunction globalRegistry() view returns (address)
isDepositTokenSupported
viewfunction isDepositTokenSupported(address depositToken) view returns (bool)
isSpecialWithdrawalSupported
viewfunction isSpecialWithdrawalSupported(uint256 withdrawalCode) view returns (bool)
LIQUIDITY_MINING_MANAGER
viewfunction LIQUIDITY_MINING_MANAGER() view returns (bytes32)
maxDeposit
viewfunction maxDeposit(address depositToken) view returns (uint256)
maxWithdraw
viewfunction maxWithdraw() view returns (address[], uint256[])
registry
viewfunction registry() view returns (address)
rewardEmissionsPerSecondPerAsset
viewfunction rewardEmissionsPerSecondPerAsset() view returns (uint256[], uint256[])
strategyId
viewfunction strategyId() view returns (uint96)
supportedDepositTokens
viewfunction supportedDepositTokens() view returns (address[])
supportedSpecialWithdrawals
viewfunction supportedSpecialWithdrawals() view returns (uint256[])
supportedWithdrawals
viewfunction supportedWithdrawals() view returns (uint8[])
supportsInterface
purefunction supportsInterface(bytes4 interfaceId) pure returns (bool)
TOS_MANAGER
viewfunction TOS_MANAGER() view returns (bytes32)
totalBalances
viewfunction totalBalances() view returns (address[] tokens, uint256[] balances)
validatePositionCreation
viewfunction validatePositionCreation(address sender, bytes creationData) view
vault
viewfunction vault() view returns (address)
deposited
payablefunction deposited(address depositToken, uint256 depositAmount) payable returns (uint256 assetsDeposited)
maxApproveVault
nonpayablefunction maxApproveVault()
migrateToNewStrategy
nonpayablefunction migrateToNewStrategy(address newStrategy, bytes migrationData) returns (bytes)
specialWithdraw
nonpayablefunction specialWithdraw(uint256 positionId, uint256 withdrawalCode, uint256[] toWithdraw, bytes withdrawalData, address recipient) returns (uint256[] balanceChanges, address[] actualWithdrawnTokens, uint256[] actualWithdrawnAmounts, bytes result)
specialWithdrawFees
nonpayablefunction specialWithdrawFees(uint256 withdrawalCode, uint256[] toWithdraw, bytes withdrawData, address recipient) returns (uint256[] balanceChanges, address[] actualWithdrawnTokens, uint256[] actualWithdrawnAmounts, bytes result)
strategyRegistered
nonpayablefunction strategyRegistered(uint96 strategyId_, address oldStrategy, bytes migrationResultData)
withdraw
nonpayablefunction withdraw(uint256 positionId, address[] tokens, uint256[] toWithdraw, address recipient) returns (uint8[])
withdrawFees
nonpayablefunction withdrawFees(address[] tokens, uint256[] toWithdraw, address recipient)
events
Initialized
event Initialized(uint64 version)
errors
AddressEmptyCode
error AddressEmptyCode(address target)
AddressInsufficientBalance
error AddressInsufficientBalance(address account)
AlreadyInitialized
error AlreadyInitialized()
CantWithdrawFees
error CantWithdrawFees()
FailedInnerCall
error FailedInnerCall()
InvalidDepositToken
error InvalidDepositToken(address invalidToken)
InvalidSpecialWithdrawalCode
error InvalidSpecialWithdrawalCode(uint256 invalidCode)
InvalidTokens
error InvalidTokens()
MathOverflowedMulDiv
error MathOverflowedMulDiv()
NotEnoughFees
error NotEnoughFees()
NotInitializing
error NotInitializing()
OnlyStrategyRegistry
error OnlyStrategyRegistry()
OnlyVault
error OnlyVault()
SafeCastOverflowedUintDowncast
error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
WithdrawMustBeImmediate
error WithdrawMustBeImmediate()
creation bytecode
0x61010060409080825234620003625762004b9f80380380916200002382856200049a565b833981019060a081830312620003625780516001600160a01b039283821682036200036257602092838101518581168103620003625762000066878301620004be565b60608301516001600160401b0393919291908481116200036257810185601f8201121562000362578051906200009c82620004d3565b96620000ab8c5198896200049a565b82885289838301011162000362579088915f5b82811062000469575050608092915f91880101520151948786168603620003625760a05260c05260e05281519081116200045557600254916001928381811c911680156200044a575b868210146200043657601f8111620003ea575b508490601f831160011462000384579282939183925f9462000378575b50501b915f199060031b1c1916176002555b6080526004818360e051168551928380926338d52e0f60e01b82525afa80156200036e5783915f916200032a575b50169160e0511691835191808301905f8063095ea7b360e01b938481528760248801528119604488015260448752620001b0876200047e565b86519082875af1620001c1620004ef565b81620002f5575b5080620002ea575b15620002a8575b855161457f908162000620823960805181505060a051818181611d8b01528181611eff015281816130a5015261318f015260c051818181610e8a015281816111950152818161223601526123e6015260e05181818161069b01528181610bff015281816113290152818161166e015281816116e501528181611a9e01528181611c8501528181611fb1015281816121de01528181612a0c01528181612ed301528181612ff7015281816131cd0152818161338b015281816134f70152818161360701528181613de301526143b40152f35b620002df94620002d99287519283015260248201525f604482015260448152620002d2816200047e565b826200053d565b6200053d565b5f80808080620001d7565b50823b1515620001d0565b805180159250839083156200030f575b5050505f620001c8565b62000321935082018101910162000523565b5f828162000305565b809250838092503d831162000366575b6200034681836200049a565b8101031262000362576200035b8391620004be565b5f62000177565b5f80fd5b503d6200033a565b84513d5f823e3d90fd5b015192505f8062000137565b90601f1983169160025f5283875f20935f5b8988838310620003d25750505010620003b9575b505050811b0160025562000149565b01515f1960f88460031b161c191690555f8080620003aa565b86860151885590960195948501948793500162000396565b60025f52855f20601f840160051c8101918785106200042b575b601f0160051c019084905b8281106200041f5750506200011a565b5f81550184906200040f565b909150819062000404565b634e487b7160e01b5f52602260045260245ffd5b90607f169062000107565b634e487b7160e01b5f52604160045260245ffd5b8181018401518982018501528a9301620000be565b608081019081106001600160401b038211176200045557604052565b601f909101601f19168101906001600160401b038211908210176200045557604052565b51906001600160a01b03821682036200036257565b6001600160401b0381116200045557601f01601f191660200190565b3d156200051e573d906200050382620004d3565b916200051360405193846200049a565b82523d5f602084013e565b606090565b908160209103126200036257518015158103620003625790565b5f80620005699260018060a01b03169360208151910182865af162000561620004ef565b9083620005b7565b805190811515918262000599575b5050620005815750565b60249060405190635274afe760e01b82526004820152fd5b620005ae925060208091830101910162000523565b155f8062000577565b90620005e05750805115620005ce57805190602001fd5b604051630a12f52160e11b8152600490fd5b8151158062000615575b620005f3575090565b604051639996b31560e01b81526001600160a01b039091166004820152602490fd5b50803b15620005ea56fe6080604052600436101561001a575b3615610018575f80fd5b005b5f3560e01c806301ffc9a714610239578063034db2351461023457806316f3542a1461022f57806317417e0e1461022a578063222142d0146102255780632968766e146102205780632a7c08471461021b57806331f91a8414610216578063326c36811461021157806338d52e0f1461020c5780633c5343b714610207578063402d267d14610202578063492f4e18146101fd578063688e89c1146101f85780636b6b97cd146101f35780636d13e02c146101ee5780636ff97f1d146101e95780637284e416146101e4578063789759be146101df5780637b103999146101da5780639003adfe146101d55780639af1d35a146101d0578063a69a2ad1146101cb578063ac7a1b5b146101c6578063bf9766fe146101c1578063d52bacf3146101bc578063daa8bfdd146101b7578063dae864cf146101b2578063db56b101146101ad578063e8e5ccf3146101a8578063ea26266c146101a3578063f50cd5f81461019e578063fa4c5453146101995763fbfa77cf0361000e57612217565b612188565b6120e0565b6120a6565b611f64565b611f3e565b611f23565b611ee0565b611e5c565b611cef565b611c19565b611a7c565b61190c565b6116c3565b611692565b61164f565b611523565b611437565b6113fd565b61127c565b611171565b611147565b611118565b610e26565b610d75565b610b91565b6109da565b6106ea565b61064d565b610528565b610397565b610358565b610320565b3461030b57602060031936011261030b576004357fffffffff00000000000000000000000000000000000000000000000000000000811680910361030b57807ff2670b7300000000000000000000000000000000000000000000000000000000602092149081156102e1575b81156102b7575b506040519015158152f35b7f01ffc9a7000000000000000000000000000000000000000000000000000000009150145f6102ac565b7fe8662db900000000000000000000000000000000000000000000000000000000811491506102a5565b5f80fd5b6001600160a01b0381160361030b57565b3461030b57602060031936011261030b5760206103476004356103428161030f565b6124c0565b6001600160a01b0360405191168152f35b3461030b57602060031936011261030b576020600435801590811561038257506040519015158152f35b60019150145f6102ac565b5f91031261030b57565b3461030b575f60031936011261030b5760206040517f585fc1073b6cfa774673b8c567d17fb3595441dcb101cca207779783ece150808152f35b9181601f8401121561030b5782359167ffffffffffffffff831161030b576020808501948460051b01011161030b57565b9181601f8401121561030b5782359167ffffffffffffffff831161030b576020838186019501011161030b57565b9081518082526020808093019301915f5b82811061044f575050505090565b835185529381019392810192600101610441565b9081518082526020808093019301915f5b828110610482575050505090565b83516001600160a01b031685529381019392810192600101610474565b91908251928382525f5b8481106104c9575050601f19601f845f6020809697860101520116010190565b6020818301810151848301820152016104a9565b9261050961052595936104fb61051794608088526080880190610430565b908682036020880152610463565b908482036040860152610430565b91606081840391015261049f565b90565b3461030b5760a060031936011261030b5767ffffffffffffffff60443581811161030b5761055a9036906004016103d1565b60643592831161030b5761057561058c933690600401610402565b5050608435916105848361030f565b602435613bd7565b6001600160a01b0361059f949394613048565b16916bffffffffffffffffffffffff5f5416845115610648576020850151843b1561030b576040517f740d45200000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff9290921660048301526024820152925f908490604490829084905af19283156106435761063093610634575b50604051948594856104dd565b0390f35b61063d90611493565b5f610623565b6123a5565b612327565b3461030b57602060031936011261030b57602060043561066c8161030f565b6001600160a01b0390818061067f612fc0565b169116908114918215610699575b50506040519015158152f35b7f0000000000000000000000000000000000000000000000000000000000000000161490505f8061068d565b90916106dc61052593604084526040840190610430565b916020818403910152610430565b3461030b575f60031936011261030b576bffffffffffffffffffffffff5f5416610712613048565b9061071b613dc0565b6001600160a01b0361072e949294613dd1565b604080517f26a5bea80000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff881660048083019190915293969294909216905f83602481855afa928315610643575f936109b6575b506107a161079c8a51855190612592565b61248f565b946107b261079c8b51865190612592565b975f5b8b518110156107f357806107cb6001928e612361565b516107d6828b612361565b526107e1818b612361565b516107ec828d612361565b52016107b5565b50908894969597918a61081061080a8e5194612354565b516130d9565b955f5b8a5181101561099057808c8861083b61082e8f958896612361565b516001600160a01b031690565b81517f74168e070000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff9095169285019283526001600160a01b038116602084015291849081906040010381875afa8015610643578a8d928a92898d6001985f915f9461095c575b5050914211610954575b6108bf91926130eb565b939015610914576108f86108f26109059486946108eb6108ff956108e561090c9a6125c8565b90612361565b5190614002565b926125c8565b8095612361565b51612592565b918d612361565b525b01610813565b509091506109229250613f4b565b61092c878d612361565b526c0c9f2c9cd04674edea4000000061094e610947886125ba565b978c612361565b5261090e565b5f91506108b5565b61098093945080919250903d10610989575b6109788183611500565b8101906125a4565b91905f8f6108ab565b503d61096e565b888a6106308988835181106109ab575b5051928392836106c5565b8084528452846109a0565b6109d39193503d805f833e6109cb8183611500565b8101906124e1565b915f61078b565b3461030b57606060031936011261030b57600467ffffffffffffffff813581811161030b57610a0c90369084016103d1565b9160243590811161030b57610a2490369085016103d1565b610a2f60443561030f565b610a37612686565b92610a62610a436131c3565b610a51969196368986612281565b610a5c3687896122d9565b906127e2565b610a81610a70368784612281565b610a7b3685876122d9565b90613377565b9380518603610b68575f5b868110610a9557005b610aa261082e8284612361565b6001600160a01b03610acc610ac0610abb858c8961237e565b61238e565b6001600160a01b031690565b911603610b3f57610ade81858761237e565b35151580610b1c575b610af357600101610a8c565b876040517ff00866c7000000000000000000000000000000000000000000000000000000008152fd5b50610b2f610b2a8288612361565b612398565b610b3881610dcd565b1515610ae7565b876040517f672215de000000000000000000000000000000000000000000000000000000008152fd5b866040517f672215de000000000000000000000000000000000000000000000000000000008152fd5b3461030b57608060031936011261030b5767ffffffffffffffff60243581811161030b57610bc39036906004016103d1565b909160443590811161030b57610bdd903690600401610402565b505060643591610bec8361030f565b610bf4612686565b916001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690610c2861244e565b90610c4e610c37610ac0612fc0565b610c4084612354565b906001600160a01b03169052565b610c5661244e565b6040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152909660209290918381602481895afa801561064357610cde9685925f92610d56575b5060405180809981947f4cdad506000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b03915afa9586156106435761063096610d1d96610d10955f92610d29575b5050610d078a612354565b526004356135f9565b94928097929891946127e2565b604051948594856104dd565b610d489250803d10610d4f575b610d408183611500565b8101906129f2565b5f80610cfc565b503d610d36565b610d6e919250833d8511610d4f57610d408183611500565b905f610ca4565b3461030b575f60031936011261030b5760206001600160a01b03610d97612fc0565b16604051908152f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b60021115610dd757565b610da0565b60209060206040818301928281528551809452019301915f5b828110610e03575050505090565b909192938451906002821015610dd7579081528201938201929190600101610df5565b3461030b57608060031936011261030b5767ffffffffffffffff60243581811161030b57610e589036906004016103d1565b9160443590811161030b57610e719036906004016103d1565b929091610e7f60643561030f565b6001600160a01b03807f00000000000000000000000000000000000000000000000000000000000000001633036110ee57926bffffffffffffffffffffffff5f541694610eca613048565b91610ed361408e565b93610ede855161248f565b96610ee98484612375565b3596871515946001928716925b828110610f3557505050505050610f1f575b610630610f13612e49565b60405191829182610ddc565b610f2b946004356137e0565b5f80808080610f08565b610f4081838861237e565b35610f4f610abb83868961237e565b908d6040928351917f8e6e20a90000000000000000000000000000000000000000000000000000000083528280610fb16020948594600484019092916001600160a01b036020916bffffffffffffffffffffffff604085019616845216910152565b03818b5afa801561064357610fd09284925f926110d1575b50506137ce565b9182611020575b508a518310610feb575b5050600101610ef6565b90610ff5916125d6565b610fff828d612361565b5261100a818c612361565b51611017575b5f80610fe1565b60019650611010565b61102e610abb85888b61237e565b873b1561030b578f915f916110a786925194859384937f5612785a000000000000000000000000000000000000000000000000000000008552606435926004860192936060929195946bffffffffffffffffffffffff60808601971685526001600160a01b038093166020860152604085015216910152565b0381838b5af180156106435715610fd757806110c56110cb92611493565b8061038d565b5f610fd7565b6110e79250803d10610d4f57610d408183611500565b5f80610fc9565b60046040517f8d1af8bd000000000000000000000000000000000000000000000000000000008152fd5b3461030b57602060031936011261030b57602061113f60043561113a8161030f565b612a01565b604051908152f35b3461030b575f60031936011261030b5760206bffffffffffffffffffffffff5f5416604051908152f35b604060031936011261030b576004356111898161030f565b6001600160a01b0390817f00000000000000000000000000000000000000000000000000000000000000001633036110ee576111c890602435906140b6565b906111d1613048565b16906bffffffffffffffffffffffff5f541691803b1561030b576040517f3b1bc9570000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff939093166004840152602483018290525f908390604490829084905af1918215610643576106309261125c575b506040519081529081906020820190565b61126590611493565b5f61124b565b90602061052592818152019061049f565b3461030b57604060031936011261030b576004356112998161030f565b60243567ffffffffffffffff811161030b576112b9903690600401610402565b50506001600160a01b0390816112cd6123b0565b1633036113d3575f80547fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001690556040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201527f00000000000000000000000000000000000000000000000000000000000000008316602082602481845afa90811561064357610630946113909461139e945f946113aa575b5091839161137c931690613884565b604051928391602083019190602083019252565b03601f198101835282611500565b6040519182918261126b565b61137c93919294506113ca9060203d602011610d4f57610d408183611500565b9391909261136d565b60046040517f8cec1de2000000000000000000000000000000000000000000000000000000008152fd5b3461030b575f60031936011261030b5760206040517fe72db512f617f63e889242cd75fa9e0d2876dc0efa5932893da1cf5a9a0624aa8152f35b3461030b575f60031936011261030b57610630611452612af5565b604051918291602083526020830190610463565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff81116114a757604052565b611466565b6080810190811067ffffffffffffffff8211176114a757604052565b6060810190811067ffffffffffffffff8211176114a757604052565b6020810190811067ffffffffffffffff8211176114a757604052565b90601f601f19910116810190811067ffffffffffffffff8211176114a757604052565b3461030b575f60031936011261030b576040515f60025460018160011c9160018116918215611645575b6020916020851084146116185784875260208701939081156115db5750600114611582575b6106308661139e81880382611500565b60025f90815294509192917f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace5b8386106115ca575050509101905061139e826106305f611572565b8054858701529482019481016115af565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016845250505090151560051b01905061139e826106305f611572565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b92607f169261154d565b3461030b575f60031936011261030b5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461030b575f60031936011261030b5760206103476123b0565b90916106dc61052593604084526040840190610463565b3461030b575f60031936011261030b576116db612c2e565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169061170e61244e565b9161172661171d610ac0612fc0565b610c4085612354565b61172e61244e565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290916020918281602481855afa8015610643576117b49284925f92611868575b5060405180809581947f4cdad506000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b03915afa918215610643575f9261184b575b50506117d482949394612354565b526117df825161248f565b926040015f5b8351811015611839578061182861180161082e60019488612361565b61180b8387612361565b5161182261181b875161ffff1690565b61ffff1690565b91612ce8565b6118328288612361565b52016117e5565b505050610630604051928392836116ac565b6118619250803d10610d4f57610d408183611500565b5f806117c6565b611880919250833d8511610d4f57610d408183611500565b905f61177a565b604081019060408152825180925260608101916020809401905f5b8181106118e757505050828183039101528180845192838152019301915f5b8281106118cf575050505090565b835161ffff16855293810193928101926001016118c1565b909194938551906005821015610dd757908152939493850193850191906001016118a2565b3461030b575f60031936011261030b57611924612c2e565b61192c612dd3565b611934612dd3565b915f9061ffff611946825161ffff1690565b16611a43575b8060206060920161196261181b825161ffff1690565b611a23575b506040810161197b61181b825161ffff1690565b6119ef575b500161199161181b825161ffff1690565b6119ab575b50808252825261063060405192839283611887565b6119cd6119e9916119c56119bf8587612361565b60039052565b5161ffff1690565b6119e06119d9846125ba565b9386612361565b9061ffff169052565b5f611996565b611a0a611a1d915f611a018789612361565b525161ffff1690565b6119e0611a16866125ba565b9588612361565b5f611980565b611a0a611a3d916119c5611a378789612361565b60029052565b5f611967565b9050611a57611a5183612354565b60019052565b6060611a65825161ffff1690565b91611a756001936119e087612354565b905061194c565b3461030b575f60031936011261030b57611a94612c2e565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690611ac761244e565b91611ad661171d610ac0612fc0565b611ade61244e565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290916020918281602481855afa801561064357611b639284925f92611868575060405180809581947f4cdad506000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b03915afa918215610643575f92611bfc575b5050611b8082612354565b5260405f9201915b8351811015611be25780611bd1611bc1611ba761082e60019589612361565b611bb18487612361565b5161182261181b895161ffff1690565b611bcb8386612361565b516125d6565b611bdb8285612361565b5201611b88565b611bec82856138d2565b90610630604051928392836116ac565b611c129250803d10610d4f57610d408183611500565b5f80611b75565b3461030b575f60031936011261030b57611c3161244e565b611c48611c3f610ac0612fc0565b610c4083612354565b611c5061244e565b6040517fce96cb77000000000000000000000000000000000000000000000000000000008152306004820152916020836024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561064357611bec935f91611cd0575b50611cca83612354565b526138d2565b611ce9915060203d602011610d4f57610d408183611500565b5f611cc0565b3461030b57604060031936011261030b57600435611d0c8161030f565b60243567ffffffffffffffff811161030b57611d2c903690600401610402565b91906001600160a01b036040517fb407991c0000000000000000000000000000000000000000000000000000000081527fe72db512f617f63e889242cd75fa9e0d2876dc0efa5932893da1cf5a9a0624aa6004820152602081602481857f0000000000000000000000000000000000000000000000000000000000000000165afa908115610643575f91611e2d575b50166bffffffffffffffffffffffff5f541692813b1561030b575f93611e10604051968795869485947f134ab19500000000000000000000000000000000000000000000000000000000865260048601612dff565b03915afa801561064357611e2057005b806110c561001892611493565b611e4f915060203d602011611e55575b611e478183611500565b810190612fab565b5f611dbb565b503d611e3d565b3461030b575f60031936011261030b57604051611e78816114c8565b6002815260208082016040368237825115610648575f8152825192600193600110156106485783836001604084015260405192602084019060208552518091526040840194915f5b828110611ecd5785870386f35b8351875295810195928101928401611ec0565b3461030b575f60031936011261030b5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461030b575f60031936011261030b57610630610f13612e49565b3461030b575f60031936011261030b576040611f58612e9f565b82519182526020820152f35b3461030b575f60031936011261030b57611f7c612fc0565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000602082018181526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116602485018190525f196044808701919091528552929492601f199290915f908190611ffe606489611500565b86169287519082855af190612011613b0d565b82612074575b5081612069575b501561202657005b60405160208101959095526001600160a01b031660248501525f604485015260649081018452610018936120649161205e9082611500565b82613b4c565b613b4c565b90503b15155f61201e565b8051919250811591821561208c575b5050905f612017565b61209f9250602080918301019101612607565b5f80612083565b3461030b575f60031936011261030b5760206040517f8e24cef3d118e2320bff2d4ac4e82fd5ff0dd3a6e6044ca19f91cd3b6f84750e8152f35b3461030b57606060031936011261030b576004356bffffffffffffffffffffffff8116810361030b5761211460243561030f565b60443567ffffffffffffffff811161030b57612134903690600401610402565b50506001600160a01b036121466123b0565b1633036113d357610018906bffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffff0000000000000000000000005f5416175f55565b3461030b575f60031936011261030b576040516121a4816114c8565b60028152602081019060403683376001600160a01b0391826121c4612fc0565b1690825115610648575280516001101561064857610630917f0000000000000000000000000000000000000000000000000000000000000000166040820152604051918291602083526020830190610463565b3461030b575f60031936011261030b5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b60405190612267826114c8565b565b67ffffffffffffffff81116114a75760051b60200190565b929161228c82612269565b9161229a6040519384611500565b829481845260208094019160051b810192831161030b57905b8282106122c05750505050565b83809183356122ce8161030f565b8152019101906122b3565b92916122e482612269565b916122f26040519384611500565b829481845260208094019160051b810192831161030b57905b8282106123185750505050565b8135815290830190830161230b565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b8051156106485760200190565b80518210156106485760209160051b010190565b90156106485790565b91908110156106485760051b0190565b356105258161030f565b516002811015610dd75790565b6040513d5f823e3d90fd5b6040517f8f75315b0000000000000000000000000000000000000000000000000000000081526020816004816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa908115610643575f91612419575090565b90506020813d602011612446575b8161243460209383611500565b8101031261030b57516105258161030f565b3d9150612427565b604051906040820182811067ffffffffffffffff8211176114a7576040526001825260203681840137565b604051612485816114e4565b5f8152905f368137565b9061249982612269565b6124a66040519182611500565b828152601f196124b68294612269565b0190602036910137565b6001600160a01b03806124d1612fc0565b169116146124dd575f90565b5f90565b602090818184031261030b5780519067ffffffffffffffff821161030b57019180601f8401121561030b57825161251781612269565b936125256040519586611500565b818552838086019260051b82010192831161030b578301905b82821061254c575050505090565b838091835161255a8161030f565b81520191019061253e565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b9190820180921161259f57565b612565565b919082604091031261030b576020825192015190565b5f19811461259f5760010190565b905f19820191821161259f57565b9190820391821161259f57565b604051906125f0826114ac565b5f6060838281528260208201528260408201520152565b9081602091031261030b5751801515810361030b5790565b519061ffff8216820361030b57565b9081608091031261030b5761267e60606040519261264b846114ac565b6126548161261f565b84526126626020820161261f565b60208501526126736040820161261f565b60408501520161261f565b606082015290565b61268e6125e3565b506bffffffffffffffffffffffff5f54166126aa610ac0613132565b6040517f7c4d3fef0000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff83166004820152336024820152602081604481855afa908115610643575f916127b3575b5015612789576040517f4a79e4d90000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff929092166004830152608090829060249082905afa908115610643575f91612760575090565b610525915060803d608011612782575b61277a8183611500565b81019061262e565b503d612770565b60046040517f463396db000000000000000000000000000000000000000000000000000000008152fd5b6127d5915060203d6020116127db575b6127cd8183611500565b810190612607565b5f612701565b503d6127c3565b91909392935f5b83518110156129ea576127fc8183612361565b518061280c575b506001016127e9565b61281961082e8387612361565b6128238386612361565b519161283e604092838b019461182261181b875161ffff1690565b928382116129c157918493916001958861ffff612860612979975161ffff1690565b161561297f576128908361288a6128856128d89796611bcb6128d09761289597612361565b613322565b966125d6565b6132ce565b6128b86128a061225a565b6fffffffffffffffffffffffffffffffff9096168652565b6effffffffffffffffffffffffffffff166020850152565b820160019052565b6128ff6128e861082e858a612361565b6001600160a01b03165f52600160205260405f2090565b8151602083015160409093015160809390931b7effffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff919091161791151560f81b7fff0000000000000000000000000000000000000000000000000000000000000016919091179055565b90612803565b5050612890612990915f93946125d6565b916129b961299c61225a565b8381526effffffffffffffffffffffffffffff9094166020850152565b8201526128d8565b600483517f156bbc5b000000000000000000000000000000000000000000000000000000008152fd5b505050509050565b9081602091031261030b575190565b6001600160a01b03807f00000000000000000000000000000000000000000000000000000000000000001690612a3b610ac0610ac0612fc0565b908316908103612aae57506040517f402d267d000000000000000000000000000000000000000000000000000000008152306004820152915060209082908180602481015b03915afa908115610643575f91612a95575090565b610525915060203d602011610d4f57610d408183611500565b03612ab957505f1990565b6040517f417562560000000000000000000000000000000000000000000000000000000081526001600160a01b03919091166004820152602490fd5b612b58612b0061408e565b5f612b0c610ac0613048565b81546040517f26a5bea80000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff909116600482015293849190829081906024820190565b03915afa918215610643575f92612c12575b50612b7b61079c8251845190612592565b925f5b8251811015612baa5780612ba4612b9a61082e60019487612361565b610c408389612361565b01612b7e565b5091908051915f5b8151811015612c005780612bcb61082e60019385612361565b612bd585826130eb565b5015612be3575b5001612bb2565b612bfa90610c40612bf3886125ba565b978a612361565b5f612bdc565b50505082518110612c0e5750565b8252565b612c279192503d805f833e6109cb8183611500565b905f612b6a565b612c366125e3565b506001600160a01b03612c47613132565b1660806bffffffffffffffffffffffff5f54166024604051809481937f4a79e4d900000000000000000000000000000000000000000000000000000000835260048301525afa908115610643575f91612760575090565b8181029291811591840414171561259f57565b8115612cbb570490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b6001600160a01b0390929192165f52600160205260405f209060405191612d0e836114c8565b549160406fffffffffffffffffffffffffffffffff84169182815260208101946effffffffffffffffffffffffffffff8160801c16865260f81c1515918291015280612dca575b612d875750505161052591506effffffffffffffffffffffffffffff165b6effffffffffffffffffffffffffffff1690565b830392831161259f57612d73612dae612da6612dc49361052596612c9e565b612710900490565b92516effffffffffffffffffffffffffffff1690565b90612592565b50808411612d55565b6040519060a0820182811067ffffffffffffffff8211176114a757604052600482526080366020840137565b9293806080956001600160a01b03601f19956bffffffffffffffffffffffff601f9616885216602087015260606040870152816060870152868601375f8582860101520116010190565b612e51614075565b90612e63612e5d612af5565b5161248f565b915f5b8151811015612e9b57612e7c610b2a8284612361565b90612e878186612361565b916002811015610dd7576001925201612e66565b5050565b6040517f18160ddd000000000000000000000000000000000000000000000000000000008152670de0b6b3a76400009060207f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168183600481845afa928315610643575f93612f8c575b508215612f8457908060049392604051948580927f01e1d1140000000000000000000000000000000000000000000000000000000082525afa801561064357612f649385925f92612f67575b5050614002565b91565b612f7d9250803d10610d4f57610d408183611500565b5f80612f5d565b505050908190565b612fa4919350823d8411610d4f57610d408183611500565b915f612f11565b9081602091031261030b57516105258161030f565b6001600160a01b036040517f38d52e0f000000000000000000000000000000000000000000000000000000008152602081600481857f0000000000000000000000000000000000000000000000000000000000000000165afa908115610643575f9161302b57501690565b613044915060203d602011611e5557611e478183611500565b1690565b6001600160a01b036040517fb407991c0000000000000000000000000000000000000000000000000000000081527f585fc1073b6cfa774673b8c567d17fb3595441dcb101cca207779783ece150806004820152602081602481857f0000000000000000000000000000000000000000000000000000000000000000165afa908115610643575f9161302b57501690565b60018111156130e55790565b50600190565b91909160015b8351811015613128576001600160a01b038061310d8387612361565b51169083161461311f576001016130f1565b92505060019190565b505090505f905f90565b6001600160a01b036040517fb407991c0000000000000000000000000000000000000000000000000000000081527f8e24cef3d118e2320bff2d4ac4e82fd5ff0dd3a6e6044ca19f91cd3b6f84750e6004820152602081602481857f0000000000000000000000000000000000000000000000000000000000000000165afa908115610643575f9161302b57501690565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166131f561244e565b9161320461171d610ac0612fc0565b61320c61244e565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290926020918281602481855afa8015610643576132919284925f92611868575060405180809581947f4cdad506000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b03915afa918215610643575f926132b1575b50506132ae83612354565b52565b6132c79250803d10610d4f57610d408183611500565b5f806132a3565b6effffffffffffffffffffffffffffff908181116132ea571690565b604490604051907f6dfcc650000000000000000000000000000000000000000000000000000000008252607860048301526024820152fd5b6fffffffffffffffffffffffffffffffff9081811161333f571690565b604490604051907f6dfcc650000000000000000000000000000000000000000000000000000000008252608060048301526024820152fd5b906133ea9060206133b16001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692612354565b51604051809481927f0a28a477000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b0381845afa918215610643575f926134bd575b508161341b91613415610ac061034261082e88612354565b90613884565b61343961082e613433610ac061034261082e87612354565b93612354565b90823b1561030b576040517f272017e00000000000000000000000000000000000000000000000000000000081525f600482018190526001600160a01b0390931660248201526044810191909152918290818381606481015b03925af18015610643576134aa575b50610525614075565b806110c56134b792611493565b5f6134a1565b61341b9192506134db9060203d602011610d4f57610d408183611500565b91906133fd565b909161351d9060206133b16001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692612354565b0381845afa918215610643575f926135c2575b508161354891613415610ac061034261082e89612354565b61356661082e613560610ac061034261082e88612354565b94612354565b92803b1561030b576040517f272017e000000000000000000000000000000000000000000000000000000000815260048101939093526001600160a01b0390931660248301526044820152905f90829081838160648101613492565b6135489192506135e09060203d602011610d4f57610d408183611500565b9190613530565b604051906135f4826114e4565b5f8252565b909192936001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001661362f61244e565b9561363861244e565b9561364161244e565b9561364a6135e7565b95806136fc57509061365b91612375565b3591604051917f4cdad5060000000000000000000000000000000000000000000000000000000083526020838061369a87600483019190602083019252565b0381855afa801561064357846136d0945f926136d9575b506136bd919284613884565b6136c689612354565b52610c4087612354565b6132ae84612354565b6136bd92506136f69060203d602011610d4f57610d408183611500565b916136b1565b9293926001810361379b57509061371291612375565b3590604051917f0a28a4770000000000000000000000000000000000000000000000000000000083526020838061375184600483019190602083019252565b0381855afa928315610643575f93613774575b506136bd836136d0949584613884565b6136d093506137946136bd9160203d602011610d4f57610d408183611500565b9350613764565b6040517fb3f26d5d0000000000000000000000000000000000000000000000000000000081526004810191909152602490fd5b90808210156137db575090565b905090565b9194939485613804575b50508251156106485761380193602084015261424f565b50565b6001600160a01b0316803b1561030b576040517f740d45200000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff929092166004830152602482018690525f908290604490829084905af1801561064357613875575b806137ea565b61387e90611493565b5f61386f565b612267926001600160a01b03604051937fa9059cbb000000000000000000000000000000000000000000000000000000006020860152166024840152604483015260448252612064826114ac565b91906bffffffffffffffffffffffff5f5416906138f0610ac0613048565b92604092604051917f26a5bea80000000000000000000000000000000000000000000000000000000083526004955f848061394386600483019190916bffffffffffffffffffffffff6020820193169052565b0381845afa938415610643575f94613af1575b5061396761079c8951865190612592565b9361397861079c8a51835190612592565b965f5b8a518110156139bd57806139a161399761082e6001948f612361565b610c40838b612361565b6139ab818a612361565b516139b6828c612361565b520161397b565b509297909398919695508151935f5b8151811015613ad4576139e261082e8284612361565b908186517f8e6e20a90000000000000000000000000000000000000000000000000000000081528d818d8180613a426020998a968d84019092916001600160a01b036020916bffffffffffffffffffffffff604085019616845216910152565b03915afa908115610643576001945f92613ab7575b50508a613a6488846130eb565b939015613a8c5750613a84916108ff84613a7d93612361565b918b612361565b525b016139cc565b9050613a9e919250610c408a8c612361565b613ab1613aaa896125ba565b988b612361565b52613a86565b613acd9250803d10610d4f57610d408183611500565b5f80613a57565b505050505091939250935083518110613aea5750565b8084528252565b613b069194503d805f833e6109cb8183611500565b925f613956565b3d15613b47573d9067ffffffffffffffff82116114a75760405191613b3c6020601f19601f8401160184611500565b82523d5f602084013e565b606090565b5f806001600160a01b03613b7593169360208151910182865af1613b6e613b0d565b90836144ec565b8051908115159182613bbc575b5050613b8b5750565b602490604051907f5274afe70000000000000000000000000000000000000000000000000000000082526004820152fd5b613bcf9250602080918301019101612607565b155f80613b82565b919290926040916040613be8612c2e565b019161ffff613bf9845161ffff1690565b1615613d6f5790613c1491613c0c6131c3565b9790966135f9565b919083925f5b8851811015613d6257613c2d818b612361565b51613c388288612361565b51613c42916125d6565b613c4b90613322565b613c55828b612361565b516001600160a01b0316613c69838d612361565b51895161ffff1661ffff1690613c7e92612ce8565b613c87906132ce565b613c8f61225a565b6fffffffffffffffffffffffffffffffff90921682526effffffffffffffffffffffffffffff1660208201526001818a0152613ccb828b612361565b516001600160a01b03165f9081526001602052604090208151602083015160409093015160809390931b7effffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff919091161791151560f81b7fff0000000000000000000000000000000000000000000000000000000000000016919091179055600101613c1a565b5095509550955095915050565b91509150613d7f9492939461408e565b945f5b8651811015613da95780613da3613d9e61082e6001948b612361565b6141ae565b01613d82565b509091929450613db8936135f9565b929391929091565b613dc8612479565b90610525612479565b613dd9612c2e565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016613e0b61244e565b613e19611c3f610ac0612fc0565b613e2161244e565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290926020918281602481855afa801561064357613ea69284925f92611868575060405180809581947f4cdad506000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b03915afa918215610643575f92613f2e575b5050613ec683959495612354565b5281819060405f9601955b8351811015613f255780613f14613f0a613ef061082e60019589612361565b613efa848a612361565b5161182261181b8d5161ffff1690565b611bcb8389612361565b613f1e8288612361565b5201613ed1565b50939250935050565b613f449250803d10610d4f57610d408183611500565b5f80613eb8565b6c0c9f2c9cd04674edea4000000091828202915f1984820993838086109503948086039514613ff55784831115613fcb57829109815f038216809204600280826003021880830282030280830282030280830282030280830282030280830282030280920290030293600183805f03040190848311900302920304170290565b60046040517f227bc153000000000000000000000000000000000000000000000000000000008152fd5b5050906105259250612cb1565b9091828202915f1984820993838086109503948086039514613ff55784831115613fcb57829109815f038216809204600280826003021880830282030280830282030280830282030280830282030280830282030280920290030293600183805f03040190848311900302920304170290565b61407d61244e565b908151156106485760016020830152565b61409661244e565b906001600160a01b036140a7612fc0565b16825115610648576020830152565b91909160406140c3612c2e565b019061ffff938483511615614188576135606141149161410e6140e46131c3565b9890966001600160a01b036140f889612354565b5116916141048b612354565b5191511691612ce8565b936143a8565b5184810180911161259f576128e861082e6122679461417c61414161413b6128ff96613322565b966132ce565b61416461414c61225a565b6fffffffffffffffffffffffffffffffff9098168852565b6effffffffffffffffffffffffffffff166020870152565b60016040860152612354565b91506105259293506141a96001600160a01b036141a3612fc0565b166141ae565b6143a8565b6001600160a01b0381165f52600160205260405f2060408051916141d1836114c8565b54916fffffffffffffffffffffffffffffffff831681526effffffffffffffffffffffffffffff8360801c169283602083015260f81c15159182910152614216575050565b6128ff612267926040519261422a846114c8565b5f845260208401525f60408401526001600160a01b03165f52600160205260405f2090565b9192604090604061425e612c2e565b0161ffff61426e825161ffff1690565b16156143715761427c6131c3565b9290505f5b8551811015614361578083858a8960019561429b83612354565b51156143575761288561433b936142f3836142ec816142e68a6143519c61182261181b6142dc866142d66143009f6142fa9f61082e91612361565b95612361565b51925161ffff1690565b99612361565b5192612361565b51906125d6565b926132ce565b61432361430b61225a565b6fffffffffffffffffffffffffffffffff9094168452565b6effffffffffffffffffffffffffffff166020830152565b6001818901526128ff6128e861082e858c612361565b01614281565b5050505050614351565b50959392505050610525926134e2565b5091929390505f5b835181101561439b5780614395613d9e61082e60019488612361565b01614379565b50909291610525926134e2565b6001600160a01b0390817f000000000000000000000000000000000000000000000000000000000000000016916143e3610ac0610ac0612fc0565b9082169081036144a75750506040517f6e553f65000000000000000000000000000000000000000000000000000000008152600481019290925230602483015260209182816044815f865af180156106435761447b9284925f92611868575060405180809581947f4cdad506000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b03915afa918215610643575f9261449157505090565b6105259250803d10610d4f57610d408183611500565b8203612ab957506040517f4cdad50600000000000000000000000000000000000000000000000000000000815260048101929092526020908290818060248101612a80565b9061452b575080511561450157805190602001fd5b60046040517f1425ea42000000000000000000000000000000000000000000000000000000008152fd5b81511580614576575b61453c575090565b6024906001600160a01b03604051917f9996b315000000000000000000000000000000000000000000000000000000008352166004820152fd5b50803b15614534560000000000000000000000007da14784e8f1fb71c23ad6c6ac7f063fdf098f3800000000000000000000000063a8ae714568ec8f8ec14472674c68582b0b0458000000000000000000000000bb287e6017d3deb0e2e65061e8684eab2106012300000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000e060cb6b337fa546c9c4b6e0f8a5448ac9661788000000000000000000000000000000000000000000000000000000000000001744656c6179656420596561726e20763320555344542d41000000000000000000