0 txs
853 calls
constructor
constructor()
functions
getPositionData
viewfunction getPositionData(uint256 _tokenId) view returns (uint96 nonce, address operator, address token0Addr, address token1Addr, uint24 fee, int24 tickLower, int24 tickUpper, uint128 liquidity, uint256 feeGrowthInside0LastX128, uint256 feeGrowthInside1LastX128, uint128 tokensOwed0, uint128 tokensOwed1)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
collectFeesFromPosition
nonpayablefunction collectFeesFromPosition(uint256 tokenId, address user, uint256 previousCollected0, uint256 previousCollected1, uint256 companyTax, bool send) returns (uint256 collected0, uint256 collected1, uint256 companyFees)
decreaseLiquidityPosition
nonpayablefunction decreaseLiquidityPosition(uint256 tokenId, uint128 percentageToRemove, address user, bool migrate) returns (uint256 collectedMainToken)
increaseLiquidityPosition
nonpayablefunction increaseLiquidityPosition(uint256 tokenId, uint256 amountDesired, address user) returns (uint256 increasedAmount0, uint256 increasedAmount1)
initialize
nonpayablefunction initialize(address _protocolConfig, address _userManagerAddress)
mintPosition
nonpayablefunction mintPosition(address token0, address token1, uint24 fee, int24 tickLower, int24 tickUpper, uint256 amountDesired, address user, bool isVault) returns (uint256 tokenID, uint256 mintedAmount0, uint256 mintedAmount1)
moveRangeOfPosition
nonpayablefunction moveRangeOfPosition(address manager, uint256 tokenId, int24 tickLower, int24 tickUpper) returns (uint256 newTokenId, uint256 cumulatedFee0, uint256 cumulatedFee1)
setProtocolConfigAddress
nonpayablefunction setProtocolConfigAddress(address _newProtocolConfig) returns (bool)
setUserManagerAddress
nonpayablefunction setUserManagerAddress(address _newUserManagerAddress) returns (bool)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
events
AmountsDesired
event AmountsDesired(uint256 indexed amount0Desired, uint256 indexed amount1Desired)
FeesCollected
event FeesCollected(uint256 indexed tokenId, uint256 amount0, uint256 amount1)
Initialized
event Initialized(uint64 version)
LiquidityAdded
event LiquidityAdded(uint256 indexed tokenId, uint256 amount0, uint256 amount1)
LiquidityRemoved
event LiquidityRemoved(uint256 indexed tokenId, uint256 amountMainToken, uint256 amount0, uint256 amount1)
PositionBurned
event PositionBurned(uint256 indexed tokenId)
PositionMigrated
event PositionMigrated(uint256 indexed oldTokenId, uint256 indexed newTokenId, uint256 cumulatedFee0, uint256 cumulatedFee1)
PositionMinted
event PositionMinted(uint256 indexed tokenId, uint256 amount0, uint256 amount1)
ProtocolConfigSet
event ProtocolConfigSet()
Upgraded
event Upgraded(address indexed implementation)
UserManagerSet
event UserManagerSet()
errors
AddressEmptyCode
error AddressEmptyCode(address target)
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
FailedCall
error FailedCall()
InvalidInitialization
error InvalidInitialization()
LM_ADDRESS_UNCHANGED
error LM_ADDRESS_UNCHANGED()
LM_INSUFFICIENT_TOKEN0_BALANCE
error LM_INSUFFICIENT_TOKEN0_BALANCE()
LM_INSUFFICIENT_TOKEN1_BALANCE
error LM_INSUFFICIENT_TOKEN1_BALANCE()
LM_NO_ACTIVE_POSITION
error LM_NO_ACTIVE_POSITION()
LM_NO_LIQUIDITY
error LM_NO_LIQUIDITY()
LM_NOT_NFT_OWNER
error LM_NOT_NFT_OWNER()
LM_PERCENTAGE_TOO_HIGH
error LM_PERCENTAGE_TOO_HIGH()
LM_ZERO_ADDRESS
error LM_ZERO_ADDRESS()
NotInitializing
error NotInitializing()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
UAC_EMERGENCY_MODE_ACTIVE
error UAC_EMERGENCY_MODE_ACTIVE()
UAC_NOT_2FA
error UAC_NOT_2FA()
UAC_NOT_GENERAL_ADMIN
error UAC_NOT_GENERAL_ADMIN()
UAC_NOT_GENERAL_OR_MASTER_ADMIN
error UAC_NOT_GENERAL_OR_MASTER_ADMIN()
UAC_NOT_LIQUIDITY_MANAGER
error UAC_NOT_LIQUIDITY_MANAGER()
UAC_NOT_MASTER_ADMIN
error UAC_NOT_MASTER_ADMIN()
UAC_NOT_USER_MANAGER_OR_GENERAL_ADMIN
error UAC_NOT_USER_MANAGER_OR_GENERAL_ADMIN()
UAC_NOT_USER_MANAGER
error UAC_NOT_USER_MANAGER()
UAC_NOT_USER
error UAC_NOT_USER()
UAC_NOT_VAULT_MANAGER
error UAC_NOT_VAULT_MANAGER()
UAC_NOT_VAULT_OR_LIQUIDITY_MANAGER
error UAC_NOT_VAULT_OR_LIQUIDITY_MANAGER()
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
creation bytecode
0x60a080604052346100ea57306080527ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460ff8160401c166100d9576002600160401b03196001600160401b03821601610073575b6040516148bf90816100f082396080518181816111b101526112810152f35b6001600160401b0319166001600160401b039081177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a13880610054565b63f92ee8a960e01b60005260046000fd5b600080fdfe608080604052600436101561001357600080fd5b600090813560e01c908162955af1146133f95750806307b781fd14612a195780630f415acb146128755780632e23bdd614611657578063485cc955146114bb5780634f1ef2861461120657806352d1902d1461119e578063ad3cb1cc14611124578063b5e8afb914610985578063c24c9a9d14610312578063c4359683146101c75763d97ed65a146100a457600080fd5b346101c45760203660031901126101c4576100bd613ab1565b8154604051637bc4162b60e11b815233600482015290602090829060249082906001600160a01b03165afa9081156101b957839161018a575b501561017b576001600160a01b031690811561016c57600154916001600160a01b038316811461015d5760209260018060a01b031916176001557f74961419d6c00f878abfe2ba8c02be0a4d3dea9950888f4a88351994247498d76040519180a160018152f35b63035f5c8760e11b8252600482fd5b6380c8afed60e01b8152600490fd5b633bda9c4560e11b8252600482fd5b6101ac915060203d6020116101b2575b6101a48183613b6b565b810190613ba9565b386100f6565b503d61019a565b6040513d85823e3d90fd5b80fd5b50346101c45760203660031901126101c4576101e1613ab1565b81546040516350b48de160e01b81523360048201529092916001600160a01b03841691602081602481865afa9081156102e85784916102f3575b508015610298575b15610289576001600160a01b031690811561027a57811461015d5760209260018060a01b0319161781557f3aa8516ef6b9e3e1011337ef06158ac1869f76b2dba1bc42788a46d28109a0856040519180a160018152f35b6380c8afed60e01b8352600483fd5b63136de93960e21b8352600483fd5b50604051637bc4162b60e11b8152336004820152602081602481865afa9081156102e85784916102c9575b50610223565b6102e2915060203d6020116101b2576101a48183613b6b565b386102c3565b6040513d86823e3d90fd5b61030c915060203d6020116101b2576101a48183613b6b565b3861021b565b50346101c45760803660031901126101c4576024356001600160801b038116906004359082900361070357610345613ac7565b6064359283151584036109815784546040516337e26cd160e21b81523360048201526001600160a01b0390911690602081602481855afa908115610744578791610962575b501561095357602060049160405192838092632fcf47c160e11b82525afa908115610948578691610929575b5061091a576103c3613fe7565b936001600160a01b036103d4613f45565b16926040519563133f757160e31b875285600488015261018087602481885afa801561090f57889789908a938b938c928d916108c8575b506104146141ba565b89116108b9576001600160801b031680156108aa5788026001600160801b038116908103610896576001600160801b0361044c6141ba565b1690811561088257848d8f97969593899561048b916040950495869160018060a01b03169986519c8d96879663183e293d60e11b885260048801613e22565b038188885af18015610820578596869161085d575b50604051966104ae88613b50565b8c88526001600160801b03928316602089019081526040808a0192835260608a019384524260808b019081528151630624e65f60e11b81529a5160048c0152915190941660248a015290516044890152905160648801525160848701528560a481878d5af19586156102e8578a978a8697879961082b575b5061057860409188999a9b83999899519061054082613b03565b81523060208201526001600160801b038482018190526060820152835163fc6f786560e01b81529a8b93849283919060048301613cb8565b03925af19687156108205785976107e9575b506040516370a0823160e01b81523060048201526001600160a01b038e16908f90602081602481865afa90811561079a578892916107b4575b50106107a5578e9060018060a01b038616916040516370a0823160e01b8152306004820152602081602481875afa90811561079a578b9291610765575b501061075557928f94919261062a8a8a610650966106258c60209f9e809e9d9b61408b565b61408b565b1561074f575030925b60405163331dbfbb60e11b81529e8f988997889660048801613d6d565b03925af195861561074457879661070b575b5084916000805160206147ea833981519152916106856040519283928a84613add565b0390a26106906141ba565b146106a1575b602083604051908152f35b8084913b15610707578190602460405180948193630852cd8d60e31b83528760048401525af180156102e8576106ee575b5060008051602061480a83398151915283602094a23880610696565b6106f9848092613b6b565b61070357386106d2565b8280fd5b5080fd5b9095506020813d60201161073c575b8161072760209383613b6b565b8101031261073757519484610662565b600080fd5b3d915061071a565b6040513d89823e3d90fd5b92610633565b5063c2b72d8960e01b8f5260048ffd5b9150506020813d602011610792575b8161078160209383613b6b565b810103126107375789905138610600565b3d9150610774565b6040513d84823e3d90fd5b638fbbd7f560e01b8f5260048ffd5b9150506020813d6020116107e1575b816107d060209383613b6b565b8101031261073757869051386105c3565b3d91506107c3565b90965061080f91945060403d604011610819575b6108078183613b6b565b810190613ca2565b939093953861058a565b503d6107fd565b6040513d87823e3d90fd5b604091995087985061084f61057891839998993d8511610819576108078183613b6b565b9a9099509150969596610526565b905061087991965060403d604011610819576108078183613b6b565b959095386104a0565b634e487b7160e01b8e52601260045260248efd5b634e487b7160e01b8d52601160045260248dfd5b631e7935ef60e31b8d5260048dfd5b630d14f57f60e31b8d5260048dfd5b945050995050506108f191506101803d8111610908575b6108e98183613b6b565b810190613bf7565b50979f95995093975094955090935090503861040b565b503d6108df565b6040513d8a823e3d90fd5b63061eacdb60e41b8552600485fd5b610942915060203d6020116101b2576101a48183613b6b565b386103b6565b6040513d88823e3d90fd5b631c113f1760e31b8652600486fd5b61097b915060203d6020116101b2576101a48183613b6b565b3861038a565b8480fd5b50346101c45760603660031901126101c4576004356109a2613ac7565b9060018060a01b038354166040516337e26cd160e21b8152336004820152602081602481855afa908115610820578591611105575b50156110f657602060049160405192838092632fcf47c160e11b82525afa9081156102e85784916110d7575b506110c857610a10614247565b610a18613f45565b92610a21613fe7565b6040516370a0823160e01b81523060048201529094906001600160a01b038416602082602481845afa91821561090f578892611093575b506020602491610a72833530610a6c613ea7565b8a61404e565b6040516370a0823160e01b815230600482015292839182905afa90811561090f57889161105f575b50610abc91610aa891613d0a565b956001600160a01b0316938690859061408b565b60405163133f757160e31b8152600481018590526001600160a01b03919091169161018082602481865afa958615610744578794889789948a908b92611027575b5060018060a01b038816908b60018060a01b038c169360408d8c610b358c84519b8c948594633c90044160e01b865260048601613dac565b0381858a5af196871561079a5782908398611003575b506040516370a0823160e01b815230600482015290602082602481895afa9182156102e8578492610fca575b50610b849030898861404e565b6040516370a0823160e01b8152306004820152602081602481895afa9081156102e8578491610f91575b5090610bb991613d0a565b95604051976370a0823160e01b89523060048a01526020896024818a5afa9889156102e8578499610f57575b50610bf29030838961404e565b6040516370a0823160e01b8152306004820152916020836024818a5afa80156102e8578f90998e9a8d958791610f0f575b5060209291610c3191613d0a565b9a610c548c8c868b6040519a8b97889763dc64389f60e01b895260048901613dda565b038187865af1938415610f03578f918e908d958397610eb2575b50604096610c92918851998a988997889663183e293d60e11b885260048801613e22565b03925af1978815610ea7578c918d99610e84575b50610cb285828561408b565b610cbd86828661408b565b6040519160c083016001600160401b03811184821017610e7057908e9392916040528c8352602083019a878c526040840191898352606085019081526080850191825260a08501924284526040519d8e9663219f5d1760e01b88525160048801525160248701525160448601525160648501525160848401525160a4830152815a9360c492606095f1998a15610e65578b978c9b610dfc575b5093610d919896938c96938c938c9a9760409f50899a8985118015610df3575b610dcc575b508f868d8f8e610d8b8f8f613d2d565b93613d2d565b907fd7f28048575eead8851d024ead087913957dfb4fd1a02b4d1573f5352a5a2be3848051858152846020820152a282519182526020820152f35b610d8b9b50610de29a50899c9996979899614315565b928593923888818080808080610d7b565b50868611610d76565b97509392919099506060873d606011610e5d575b81610e1d60609383613b6b565b81010312610e595792610d9197959260409b95928895610e3d8c9a613be3565b508d60208801519701519c939296995093969c50939698610d56565b8a80fd5b3d9150610e10565b6040513d8d823e3d90fd5b634e487b7160e01b8f52604160045260248ffd5b909850610ea0915060403d604011610819576108078183613b6b565b9738610ca6565b6040513d8e823e3d90fd5b935094505093506020813d602011610efb575b81610ed260209383613b6b565b81010312610ef7576040938f91610c928f9195610eef8f97613be3565b975090610c6e565b8380fd5b3d9150610ec5565b604051903d90823e3d90fd5b95505094505097506020823d602011610f4f575b81610f3060209383613b6b565b81010312610737578b978f938f610c316020928e965191509192610c23565b3d9150610f23565b935097506020833d602011610f89575b81610f7460209383613b6b565b8101031261073757610bf28f93519890610be5565b3d9150610f67565b919350506020813d602011610fc2575b81610fae60209383613b6b565b8101031261073757518e9290610bb9610bae565b3d9150610fa1565b935090506020833d602011610ffb575b81610fe760209383613b6b565b810103126107375791518e92610b84610b77565b3d9150610fda565b905061101f91975060403d604011610819576108078183613b6b565b969038610b4b565b939550505096506110489194506101803d8111610908576108e98183613b6b565b505050505092989550959350989196989438610afd565b90506020813d60201161108b575b8161107a60209383613b6b565b810103126107375751610abc610a9a565b3d915061106d565b9091506020813d6020116110c0575b816110af60209383613b6b565b810103126107375751906020610a58565b3d91506110a2565b63061eacdb60e41b8352600483fd5b6110f0915060203d6020116101b2576101a48183613b6b565b38610a03565b631c113f1760e31b8452600484fd5b61111e915060203d6020116101b2576101a48183613b6b565b386109d7565b50346101c457806003193601126101c45760408051916111448284613b6b565b60058352640352e302e360dc1b6020840152815192839160208352815191826020850152815b838110611187575050828201840152601f01601f19168101030190f35b60208282018101518883018801528795500161116a565b50346101c457806003193601126101c4577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031630036111f75760206040516000805160206147ca8339815191528152f35b63703e46dd60e11b8152600490fd5b5060403660031901126101c45761121b613ab1565b602435906001600160401b0382116107035736602383011215610703578160040135908361124883613b8e565b936112566040519586613b6b565b8385526020850193366024828401011161070357806024602093018637850101526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016308114908115611498575b50611489578354604051637bc4162b60e11b815233600482015290602090829060249082906001600160a01b03165afa90811561082057859161146a575b501561145b576040516352d1902d60e01b81526001600160a01b0382169390602081600481885afa869181611423575b5061133357634c9c8ce360e01b86526004859052602486fd5b93846000805160206147ca8339815191528796036114115750823b156113ff576000805160206147ca83398151915280546001600160a01b031916821790558491907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b8380a28051156113e4576113d89382915190845af43d156113dc573d916113bc83613b8e565b926113ca6040519485613b6b565b83523d85602085013e614748565b5080f35b606091614748565b50505050346113f05780f35b63b398979f60e01b8152600490fd5b634c9c8ce360e01b8552600452602484fd5b632a87526960e21b8652600452602485fd5b9091506020813d602011611453575b8161143f60209383613b6b565b8101031261144f5751903861131a565b8680fd5b3d9150611432565b633bda9c4560e11b8452600484fd5b611483915060203d6020116101b2576101a48183613b6b565b386112ea565b63703e46dd60e11b8452600484fd5b6000805160206147ca833981519152546001600160a01b031614159050386112ac565b50346101c45760403660031901126101c4576114d5613ab1565b6114dd613a9b565b60008051602061486a83398151915254604081901c60ff161592906001600160401b0381168015908161164f575b6001149081611645575b15908161163c575b5061162d576001600160401b0319811660011760008051602061486a8339815191525583611604575b506001600160a01b031690811580156115f3575b6115e45783546001600160a01b03919091166001600160a01b03199182161784556001805490911691909117905561158f5780f35b60ff60401b1960008051602061486a833981519152541660008051602061486a833981519152557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a180f35b6380c8afed60e01b8452600484fd5b506001600160a01b0381161561155a565b6001600160481b0319166001600160401b011760008051602061486a8339815191525538611546565b63f92ee8a960e01b8552600485fd5b9050153861151d565b303b159150611515565b85915061150b565b50346101c45760803660031901126101c457611671613ab1565b906044358060020b810361070757611687613af3565b82546040516337e26cd160e21b81523360048201526001600160a01b039091169490602081602481895afa908115610820578591612856575b50156110f657604051632fcf47c160e11b8152602081600481895afa908115610820578591612837575b50612828576024906101806001600160a01b03611705613f45565b166040519384809263133f757160e31b8252823560048301525afa958615610820578590869387986127f5575b506040516337e26cd160e21b8152336004820152602081602481855afa90811561090f5788916127d6575b50156127c757602060049160405192838092632fcf47c160e11b82525afa9081156107445787916127a8575b5061279957611796613ea7565b9361179f613f45565b6117a7613fe7565b5060018060a01b03166040519563133f757160e31b8752602435600488015261018087602481855afa918215612338579089959493929186988793612760575b5061183460409182516117f981613b03565b60243581523060208201526001600160801b038482018190526060820152835163fc6f786560e01b81529d8e93849283919060048301613cb8565b03925af197881561094857869a8799612738575b50908891611856888d613d2d565b506118618884613d2d565b506040518c81528360208201526000805160206147aa833981519152604060243592a28b828161271e575b50505081612704575b506001600160801b0391506118aa90506141ba565b169460018060a01b038554166040516337e26cd160e21b8152336004820152602081602481855afa9081156107445787916126e5575b501561095357602060049160405192838092632fcf47c160e11b82525afa9081156109485786916126c6575b5061091a57611919613fe7565b956001600160a01b0361192a613f45565b169060405163133f757160e31b8152602435600482015261018081602481865afa90811561090f578899899a8a938b908c948d9161268f575b5061196c6141ba565b87116108b9576001600160801b031680156108aa5786026001600160801b038116908103610896576001600160801b036119a46141ba565b1690811561088257918d8f93604093899104946119d88686519a8b968795869563183e293d60e11b87528c60048801613e22565b03916001600160a01b0388165af18015610ea7578c80958192612663575b506040929160a491845191611a0a83613b50565b6024358352602083019460018060801b031685528583019889526060830190815260808301904282528651998a968795630624e65f60e11b875251600487015260018060801b0390511660248601525160448501525160648401525160848301528a5af1938415610e65578b938c9561263c575b50611acc9060408d815190611a9282613b03565b60243582523060208301526001600160801b038383018190526060830152825163fc6f786560e01b81529485928391829160048301613cb8565b03918c5af191821561263157908d91829361260e575b506040516370a0823160e01b81523060048201526020816024816001600160a01b0389165afa9081156125bd57908f918492916125d9575b50106125ca5760248f602090604051928380926370a0823160e01b825230600483015260018060a01b03165afa9081156125bd57908f91859291612588575b5010612579578e611b77836001600160a01b0388811690881661408b565b611b8f9084906001600160a01b03888116911661408b565b60405163331dbfbb60e11b81529e8f948594611baf943060048801613d6d565b6001600160a01b039093169203818c5a94602095f1998a1561233857899a612535575b50604051602435926000805160206147ea833981519152928291611bf7918e84613add565b0390a2611c026141ba565b146124cb575b5084546040516337e26cd160e21b81523360048201526001600160a01b0390911690602081602481855afa9081156107445787916124ac575b501561095357602060049160405192838092632fcf47c160e11b82525afa90811561094857869161248d575b5061091a57611ccf9899611c7f614247565b94611c88613ea7565b996040838a611cb3611c98613fe7565b9c8d9b611ca3613f45565b9c6001600160a01b03169061408b565b8251633c90044160e01b81529e8f928392898c60048601613dac565b03818b6001600160a01b038e165af19b8c1561090f578890899d612469575b506040516370a0823160e01b8152306004820152906020826024816001600160a01b038c165afa9182156122b4578a92612433575b50611d3c90306001600160a01b038d8116908b1661404e565b6040516370a0823160e01b8152306004820152906020826024816001600160a01b038c165afa80156122b4578a906123ff575b611d799250613d0a565b6040516370a0823160e01b8152306004820152909c6020826024816001600160a01b038a165afa9182156122b4578a926123c9575b50611dc790306001600160a01b038d811690891661404e565b6040516370a0823160e01b81523060048201526020816024816001600160a01b038a165afa9081156122b457908e92918b91612390575b5090611e0991613d0a565b9989888c84816040519660008051602061482a833981519152868997a363dc64389f60e01b84528a878a8c6004880196611e4297613dda565b6001600160a01b03831691849103818d5a94602095f19182156122b4578391878c8b89948297612343575b50611e92604096978d8851998a988997889663183e293d60e11b885260048801613e22565b03926001600160a01b03165af1908115612338578d92918a918291612316575b50611eca846001600160a01b038c8116908c1661408b565b611ee18c6001600160a01b038c8116908a1661408b565b8b60405194611eef86613b34565b6001600160a01b038b811687528981166020880190815262ffffff8a81166040808b019182526002998a0b60608c019081529e8a0b60808c0190815260a08c0196875260c08c0197885260e08c019889526101008c01998a52306101208d01908152426101408e019081529251634418b22b60e11b81529c51871660048e01529451861660248d0152915190921660448b01529c51880b60648a01529b5190960b6084880152905160a4870152905160c4860152905160e4850152905161010484015290518116610124830152945161014482015293879085908816815a9361016492608095f197881561074457879b8895899a6122c3575b506001600160a01b03611ff96142ae565b166001600160a01b0389163b156122bf57898e61202b92604051938492839263095ea7b360e01b845260048401613e6a565b0381836001600160a01b038e165af180156122b457918a8f969594928d94612288575b509861208099508b968c988a8411801561227f575b61224d575b505050505050505061207a9192613d2d565b94613d2d565b6040516331a9108f60e11b8152600481018890529095906020816024816001600160a01b0387165afa9081156102e8578491612213575b50306001600160a01b0390911603612204576001600160a01b0382163b156107035760405163095ea7b360e01b815260006004820152602481018890528381604481836001600160a01b0388165af180156102e8579084916121ef575b50506001600160a01b0382163b15610703578661214b92849283604051809681958294632142170760e11b84523060048501613e85565b03926001600160a01b03165af1801561079a5790869392916121d0575b5050604060008051602061484a833981519152916121cc9582519182526020820152a2826040518581528260208201527f61d9e03f696ce448855c07b74614b2cdc94faa0ef058c241a3e24fae4712f231604060243592a360405193849384613add565b0390f35b818093959694506121e091613b6b565b6101c457918285929493612168565b816121f991613b6b565b610703578238612114565b63e617a6c160e01b8352600483fd5b90506020813d602011612245575b8161222e60209383613b6b565b81010312610ef75761223f90613bc1565b386120b7565b3d9150612221565b61207a995061227298508a9493926001600160a01b0380831693908216929190614315565b9138888180808f81612068565b50858511612063565b61229c9295975081939698999a9450613b6b565b6122b0579594939189908d94928a3861204e565b8880fd5b6040513d8c823e3d90fd5b8980fd5b9c509850935060808b3d60801161230e575b816122e260809383613b6b565b8101031261144f578a51936122f960208d01613be3565b50606060408d01519c0151949b949838611fe8565b3d91506122d5565b9050612331915060403d604011610819576108078183613b6b565b9038611eb2565b6040513d8b823e3d90fd5b95505050509250506020813d602011612388575b8161236460209383613b6b565b810103126122bf57848392878c8b611e92612380604097613be3565b979650611e6d565b3d9150612357565b919250506020813d6020116123c1575b816123ad60209383613b6b565b8101031261073757518d9190611e09611dfe565b3d91506123a0565b9091506020813d6020116123f7575b816123e560209383613b6b565b81010312610737575190611dc7611dae565b3d91506123d8565b506020823d60201161242b575b8161241960209383613b6b565b8101031261073757611d799151611d6f565b3d915061240c565b9091506020813d602011612461575b8161244f60209383613b6b565b81010312610737575190611d3c611d23565b3d9150612442565b9050612485919c5060403d604011610819576108078183613b6b565b9b9038611cee565b6124a6915060203d6020116101b2576101a48183613b6b565b38611c6d565b6124c5915060203d6020116101b2576101a48183613b6b565b38611c41565b803b1561253157858091602460405180948193630852cd8d60e31b8352833560048401525af180156109485790869161251c575b505060243560008051602061480a8339815191528680a238611c08565b8161252691613b6b565b6109815784386124ff565b8580fd5b909199506020813d602011612571575b8161255260209383613b6b565b81010312610737575198906000805160206147ea833981519152611bd2565b3d9150612545565b63c2b72d8960e01b8e5260048efd5b9150506020813d6020116125b5575b816125a460209383613b6b565b810103126107375783905138611b59565b3d9150612597565b8f604051903d90823e3d90fd5b638fbbd7f560e01b8e5260048efd5b9150506020813d602011612606575b816125f560209383613b6b565b810103126107375782905138611b1a565b3d91506125e8565b90925061262a915060403d604011610819576108078183613b6b565b9138611ae2565b6040513d8f823e3d90fd5b61265b919550611acc945060403d604011610819576108078183613b6b565b949093611a7e565b60a4919650604093925061268390843d8611610819576108078183613b6b565b969096929350906119f6565b945050505099506126af91506101803d8111610908576108e98183613b6b565b505050509550919d93909550919c94909338611963565b6126df915060203d6020116101b2576101a48183613b6b565b3861190c565b6126fe915060203d6020116101b2576101a48183613b6b565b386118e0565b612716926001600160a01b031661408b565b388681611895565b612730926001600160a01b031661408b565b388b8261188c565b909a5061275591985060403d604011610819576108078183613b6b565b999099979038611848565b60409199506118349350612782906101803d8111610908576108e98183613b6b565b505050505050509693509b91509a945091506117e7565b63061eacdb60e41b8652600486fd5b6127c1915060203d6020116101b2576101a48183613b6b565b38611789565b631c113f1760e31b8752600487fd5b6127ef915060203d6020116101b2576101a48183613b6b565b3861175d565b915096506128139192506101803d8111610908576108e98183613b6b565b50505050505050949350915090929638611732565b63061eacdb60e41b8452600484fd5b612850915060203d6020116101b2576101a48183613b6b565b386116ea565b61286f915060203d6020116101b2576101a48183613b6b565b386116c0565b50346101c45760203660031901126101c4576004356024602060018060a01b03845416604051928380926337e26cd160e21b82523360048301525afa9081156101b95783916129fa575b50156129eb5780156129d9576101806001600160a01b036128de613f45565b169160246040518094819363133f757160e31b835260048301525afa801561079a5782610180939281828384859086928794889689988a9b61299b575b50604080516001600160601b03909d168d526001600160a01b0391821660208e0152918116918c01919091521660608a015262ffffff166080890152600290810b60a08901520b60c08701526001600160801b0390811660e087015261010086019190915261012085019190915290811661014084015216610160820152f35b995050505050505050505062ffffff92506129c39150833d8111610908576108e98183613b6b565b9a9b90999198929793969495949392919061291b565b60016249b3e160e01b03198252600482fd5b631c113f1760e31b8252600482fd5b612a13915060203d6020116101b2576101a48183613b6b565b386128bf565b50346101c4576101003660031901126101c457612a34613ab1565b90612a3d613a9b565b9162ffffff604435166044350361070757612a56613af3565b608435928360020b84036101c45760c4359360a43593906001600160a01b03861686036107035760e435948515158603610ef75783546040516337e26cd160e21b81523360048201526001600160a01b0390911690602081602481855afa9081156109485786916133da575b50156133cb57602060049160405192838092632fcf47c160e11b82525afa9081156108205785916133ac575b5061282857612afb614247565b88612b04613ea7565b97612b0d613fe7565b92612b16613f45565b94809261329c575b50612b60959493926040929091612b419082906001600160a01b0387169061408b565b8251633c90044160e01b81529687928392604435918b60048601613dac565b0381896001600160a01b0386165af19384156109485786908795613278575b506040516370a0823160e01b8152306004820152906020826024816001600160a01b038b165afa91821561090f578892613242575b50612bcd90306001600160a01b03858116908a1661404e565b6040516370a0823160e01b81523060048201526020816024816001600160a01b038b165afa90811561090f57889161320f575b50602491612c0d91613d0a565b9460208c604051938480926370a0823160e01b825230600483015260018060a01b03165afa91821561090f5788926131d9575b50612c5990306001600160a01b03858116908f1661404e565b602460208c604051928380926370a0823160e01b825230600483015260018060a01b03165afa90811561090f578997969594939289928e928491613192575b50918787612cab8b948399989796613d0a565b9d8e93846040519a60008051602061482a833981519152898d9aa363dc64389f60e01b8752612ce295604435919060048901613dda565b6001600160a01b03831691859103818b5a94602095f192831561090f57849291878a8f8b948298613142575b50612d37604096979887519a8b978896879563183e293d60e11b87526044359160048801613e22565b03926001600160a01b03165af19081156107445790888c97969594939289948a93613117575b506001600160a01b0390811698612d8f92918a9190612d8190899084908c1661408b565b6001600160a01b031661408b565b60405192612d9c84613b34565b60018060a01b038616845260208401968d60018060a01b03168852604085019362ffffff604435168552606086019160020b8252608086019060020b815260a086019087825260c08701928d845260e08801948552610100880195865262ffffff6101208901973089526101408a0199428b5260246040519e8f92634418b22b60e11b845260018060a01b03905116600484015260018060a01b03905116910152511660448c01525160020b60648b01525160020b60848a01525160a48901525160c48801525160e48701525161010486015260018060a01b03905116610124850152516101448401526080836101648188885af19889156108205785988694879b6130c4575b506001600160a01b03612eb46142ae565b16863b156130c057878b612edd92604051938492839263095ea7b360e01b845260048401613e6a565b0381838b5af1801561090f57908c916130aa575b508798612f2597985089948a968d89831180156130a1575b61306c575b50505050505050612f1f9192613d2d565b96613d2d565b926040516331a9108f60e11b8152856004820152602081602481865afa9081156102e8578491613032575b50306001600160a01b039091160361220457813b156107035760405163095ea7b360e01b81526000600482015260248101869052838160448183875af180156102e85790849161301d575b5050813b156107035784612fc992849283604051809681958294632142170760e11b84523060048501613e85565b03925af1801561079a57613008575b50506121cc908260008051602061484a83398151915260408051878152846020820152a260405193849384613add565b613013828092613b6b565b6101c45780612fd8565b8161302791613b6b565b610703578238612f9b565b90506020813d602011613064575b8161304d60209383613b6b565b81010312610ef75761305e90613bc1565b38612f50565b3d9150613040565b612f1f98506130959750604435968a9493926001600160a01b0380831693908216929190614315565b91388a8180808d612f0e565b50848411612f09565b976130b981612f25999a613b6b565b9796612ef1565b8780fd5b9950995092506080883d60801161310f575b816130e360809383613b6b565b81010312610981578751926130fa60208a01613be3565b50606060408a01519901519398939938612ea3565b3d91506130d6565b612d8f92955061313791935060403d604011610819576108078183613b6b565b949094929091612d5d565b9597505050509250506020813d60201161318a575b8161316460209383613b6b565b810103126130c05786849392878a8f612d37613181604097613be3565b98979650612d0e565b3d9150613157565b93505092939495969750506020813d6020116131d1575b816131b660209383613b6b565b810103126130c057518896959493929188918d919087612c98565b3d91506131a9565b9091506020813d602011613207575b816131f560209383613b6b565b810103126130c0575190612c59612c40565b3d91506131e8565b90506020813d60201161323a575b8161322a60209383613b6b565b810103126130c057516024612c00565b3d915061321d565b9091506020813d602011613270575b8161325e60209383613b6b565b810103126130c0575190612bcd612bb4565b3d9150613251565b905061329491945060403d604011610819576108078183613b6b565b939038612b7f565b6040516370a0823160e01b81523060048201529193509091506001600160a01b03831690602083602481855afa928315612338578993613377575b506024916132ea6020928d30908861404e565b6040516370a0823160e01b815230600482015292839182905afa90811561090f57908c939291899161333c575b5091612b4161332f612b609897969593604095613d0a565b9350509092939495612b1e565b91929350506020813d60201161336f575b8161335a60209383613b6b565b810103126130c057518b929190612b41613317565b3d915061334d565b9092506020813d6020116133a4575b8161339360209383613b6b565b810103126122b057519160246132d7565b3d9150613386565b6133c5915060203d6020116101b2576101a48183613b6b565b38612aee565b631c113f1760e31b8552600485fd5b6133f3915060203d6020116101b2576101a48183613b6b565b38612ac2565b9050346107075760c036600319011261070757613414613a9b565b9160a4359182151583036107075781546337e26cd160e21b82523360048301526001600160a01b031690602081602481855afa9081156101b9578391613a7c575b50156129eb57602060049160405192838092632fcf47c160e11b82525afa90811561079a578291613a5d575b50613a4e578091613490613ea7565b93613499613f45565b916134a2613fe7565b60405163133f757160e31b8152600480359082015296909190610180886024816001600160a01b0389165afa801561094857869798879687918893613a14575b5061353060409182516134f481613b03565b6004803582523060208301526001600160801b038583018190526060830152845163fc6f786560e01b81529d8e94859391928492908301613cb8565b03926001600160a01b03165af1998a15610744578799889b6139ed575b5087906044356138f1575b8b89928c6064356137d7575b6135789161357191613d2d565b9382613d2d565b966040518d81528260208201526000805160206147aa833981519152604060043592a21561377c575050816135c06135b260843584613d3a565b6135ba6141ba565b90613d4d565b956135d06135b260843583613d3a565b986135db8885613d0a565b918c6135e78c83613d0a565b958061375f575b505080613742575b508b868315801590613739575b6136c4575b50505050505083158015906136bb575b156136ab579161364687926020979695946040519a8b988997889663331dbfbb60e11b885260048801613d6d565b03926001600160a01b03165af1908115610f03578091613674575b506121cc91505b60405193849384613add565b90506020823d6020116136a3575b8161368f60209383613b6b565b810103126101c457506121cc905138613661565b3d9150613682565b5050505050506121cc9150613668565b50851515613618565b6020946136e692604051978896879663331dbfbb60e11b885260048801613d6d565b03818b6001600160a01b038b165af1801561090f5761370a575b8181808b86613608565b61372b9060203d602011613732575b6137238183613b6b565b810190613cfb565b5038613700565b503d613719565b50851515613603565b613759906001600160a01b038b811690861661408b565b386135f6565b613775916001600160a01b038d8116911661408b565b8c386135ee565b965097505094505090506121cc948682816137bd575b505050816137a3575b505050613668565b6137b5926001600160a01b031661408b565b38848161379b565b6137cf926001600160a01b031661408b565b388682613792565b506040516370a0823160e01b81523060048201529293509190506020816024816001600160a01b0388165afa9081156122b4578a916138bf575b5061382960643530886001600160a01b03881661404e565b6040516370a0823160e01b81523060048201526020816024816001600160a01b0389165afa908115610e6557918d9493918f938d9161387f575b50916138756135719261357894613d0a565b9591509150613564565b929495505091506020813d6020116138b7575b8161389f60209383613b6b565b81010312610e5957518c93928e929091613875613863565b3d9150613892565b90506020813d6020116138e9575b816138da60209383613b6b565b810103126122bf575138613811565b3d91506138cd565b6040516370a0823160e01b81523060048201529091506020816024816001600160a01b038e165afa80156123385789906139ba575b6024915061394160443530886001600160a01b038f1661404e565b6040516370a0823160e01b8152306004820152916020908390816001600160a01b038f165afa80156122b4578a90613984575b61397e9250613d0a565b90613558565b50906020813d6020116139b2575b8161399f60209383613b6b565b810103126122bf579061397e9151613974565b3d9150613992565b506020813d6020116139e5575b816139d460209383613b6b565b810103126122b05760249051613926565b3d91506139c7565b909a50613a0a91995060403d604011610819576108078183613b6b565b989098993861354d565b6135309950613a37919350604092506101803d8111610908576108e98183613b6b565b505050505050509493509a915099929391506134e2565b63061eacdb60e41b8152600490fd5b613a76915060203d6020116101b2576101a48183613b6b565b38613481565b613a95915060203d6020116101b2576101a48183613b6b565b38613455565b602435906001600160a01b038216820361073757565b600435906001600160a01b038216820361073757565b604435906001600160a01b038216820361073757565b6040919493926060820195825260208201520152565b606435908160020b820361073757565b608081019081106001600160401b03821117613b1e57604052565b634e487b7160e01b600052604160045260246000fd5b61016081019081106001600160401b03821117613b1e57604052565b60a081019081106001600160401b03821117613b1e57604052565b601f909101601f19168101906001600160401b03821190821017613b1e57604052565b6001600160401b038111613b1e57601f01601f191660200190565b90816020910312610737575180151581036107375790565b51906001600160a01b038216820361073757565b51908160020b820361073757565b51906001600160801b038216820361073757565b9190826101809103126107375781516001600160601b03811681036107375791613c2360208201613bc1565b91613c3060408301613bc1565b91613c3d60608201613bc1565b91608082015162ffffff811681036107375791613c5c60a08201613bd5565b91613c6960c08301613bd5565b91613c7660e08201613be3565b916101008201519161012081015191613c9f610160613c986101408501613be3565b9301613be3565b90565b9190826040910312610737576020825192015190565b815181526020808301516001600160a01b0316908201526040808301516001600160801b0390811691830191909152606092830151169181019190915260800190565b90816020910312610737575190565b91908203918211613d1757565b634e487b7160e01b600052601160045260246000fd5b91908201809211613d1757565b81810292918115918404141715613d1757565b8115613d57570490565b634e487b7160e01b600052601260045260246000fd5b6001600160a01b039182168152602081019290925260408201929092529181166060830152909116608082015262ffffff90911660a082015260c00190565b6001600160a01b03918216815291166020820152604081019190915262ffffff909116606082015260800190565b6001600160a01b0391821681529116602082015262ffffff9091166040820152600291820b606082015291900b608082015260a081019190915260c081019190915260e00190565b6001600160a01b0391821681529116602082015262ffffff9091166040820152600291820b606082015291900b60808201526001600160801b0390911660a082015260c00190565b6001600160a01b039091168152602081019190915260400190565b6001600160a01b03918216815291166020820152604081019190915260600190565b6001546040516321f8a72160e01b81527f1c3c837d0d569c9294cc8d723cb4a38c66ab16b8162a719a4019c00a964f470f600482015290602090829060249082906001600160a01b03165afa908115613f3957600091613f05575090565b90506020813d602011613f31575b81613f2060209383613b6b565b8101031261073757613c9f90613bc1565b3d9150613f13565b6040513d6000823e3d90fd5b6001546040516321f8a72160e01b81527f9cb5ba573d7c87ffdb350369937be05e651c5afc72aefbf0322ef0a3688c0076600482015290602090829060249082906001600160a01b03165afa908115613f3957600091613fad575b506001600160a01b031690565b90506020813d602011613fdf575b81613fc860209383613b6b565b8101031261073757613fd990613bc1565b38613fa0565b3d9150613fbb565b6001546040516321f8a72160e01b81527f54c9e092fe02501be63b6765c71249c1d344895ad5127741d78f5176a1c76efd600482015290602090829060249082906001600160a01b03165afa908115613f3957600091613fad57506001600160a01b031690565b9061408490614076614089956040519586936323b872dd60e01b602086015260248501613e85565b03601f198101845283613b6b565b6146ed565b565b604051636eb1769f60e11b81523060048201526001600160a01b03838116602483018190529490831691602081604481865afa908115613f3957600091614186575b506141009461410e6140e3602094600094613d2d565b6040519788918683019463095ea7b360e01b865260248401613e6a565b03601f198101885287613b6b565b85519082865af1903d6000519083614167575b5050501561412e57505050565b614084614089936040519063095ea7b360e01b602083015260248201526000604482015260448152614161606482613b6b565b826146ed565b9192509061417c57503b15155b388080614121565b6001915014614174565b90506020813d6020116141b2575b816141a160209383613b6b565b8101031261073757516141006140cd565b3d9150614194565b60015460405163bd02d0f560e01b81527f6f8c752f16a50d13ae873620fdefd90c2c58e0d13a068366e5a1b685076b71bb600482015290602090829060249082906001600160a01b03165afa908115613f3957600091614218575090565b90506020813d60201161423f575b8161423360209383613b6b565b81010312610737575190565b3d9150614226565b6001546040516321f8a72160e01b81527f9d0862347ec5034f12a729a07315fc37fb0ad232fb16b27a10fce56899181a56600482015290602090829060249082906001600160a01b03165afa908115613f3957600091613fad57506001600160a01b031690565b6001546040516321f8a72160e01b81527f594c830768a1d598dec09c8944f2a44da4a50a9ed27dae179ec0d9a4889e7e8e600482015290602090829060249082906001600160a01b03165afa908115613f3957600091613fad57506001600160a01b031690565b9395839b9a93959992979998919861432d8b82613d0a565b9a6143388484613d0a565b918c614342613fe7565b9961434b6142ae565b91806146d2575b5050836146b9575b60018060a01b03169c60405198633d3b378160e21b8a5260048a0152602489015260448801526064870152608486015260a485015260c484015260808360e48160008c5af1948515613f3957600098899b8a958b98614669575b5060009580614562575b505060009680614457575b505050821580159061444e575b6143e6575b505050505050509190565b61440c600092602097604051998a988997889663331dbfbb60e11b885260048801613d6d565b03926001600160a01b03165af18015613f395761442f575b8080808080806143db565b6144479060203d602011613732576137238183613b6b565b5038614424565b508415156143d6565b6040516370a0823160e01b81523060048201529297916001600160a01b0389169190602085602481865afa9485156102e857849561452c575b50916144a360209260249430908d61404e565b6040516370a0823160e01b815230600482015292839182905afa918215610f035780926144f5575b50506144ed916144da91613d0a565b9586906001600160a01b0387169061408b565b3880806143c9565b9091506020823d602011614524575b8161451160209383613b6b565b810103126101c4575051816144da6144cb565b3d9150614504565b9094506020813d60201161455a575b8161454860209383613b6b565b81010312610ef75751936144a3614490565b3d915061453b565b6040516370a0823160e01b81523060048201529196906001600160a01b03881690602084602481855afa9384156101b9578394614634575b506024916145ac60209230888d61404e565b6040516370a0823160e01b815230600482015292839182905afa918215610f035780926145fd575b50506145f6916145e391613d0a565b9586906001600160a01b0389169061408b565b38806143be565b9091506020823d60201161462c575b8161461960209383613b6b565b810103126101c4575051816145e36145d4565b3d915061460c565b9093506020813d602011614661575b8161465060209383613b6b565b81010312610703575192602461459a565b3d9150614643565b9c5096509890935060808b3d6080116146b1575b8161468a60809383613b6b565b810103126101c4575089519260208b015198606060408d01519c015194999b9496386143b4565b3d915061467d565b6146cd846001600160a01b0383168d61408b565b61435a565b6146e6916001600160a01b0384169061408b565b8f8e614352565b906000602091828151910182855af115613f39576000513d61473f57506001600160a01b0381163b155b61471e5750565b635274afe760e01b60009081526001600160a01b0391909116600452602490fd5b60011415614717565b9061476e575080511561475d57805190602001fd5b63d6bda27560e01b60005260046000fd5b815115806147a0575b61477f575090565b639996b31560e01b60009081526001600160a01b0391909116600452602490fd5b50803b1561477756fea54e6c2fc0861aa9c991b26891d71059d517983b9e84b91020f42609c452eb9d360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc58c759e695d5c8ccd2239ef635544361b167d875c0960cc41adeae5cdd83b91a65d33d8ef62a81711748bbe2a7b67aef94d1a9af04a2690d3a4dfd13d9c1d22bdf70e605f7f8a3f9f8af4ad6df829c164fa3873bc52c3f13b092cb7d3e3c027772e7c7dee9f1208e1f0e96af43dfde9f240b7f3a9a762da8ea1e8ed767a66ab7f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a26469706673582212206cf3036cc86e78fa11fc646213c480b97925397d11f29f4131509db1e3aeecad64736f6c634300081e0033