6 txs
51 calls
constructor
constructor(address _pm, address _posManagerAdapter, address _hook)
functions
incentiveData
viewfunction incentiveData(bytes32 pid, address token) view returns (uint256 rewardRate, uint256 periodFinish, uint256 remaining)
incentiveDataBatch
viewfunction incentiveDataBatch(bytes32 pid, address[] tokens) view returns (uint256[] rewardRates, uint256[] finishes, uint256[] remainings)
incentives
viewfunction incentives(bytes32, address) view returns (uint128 rewardRate, uint64 periodFinish, uint64 lastUpdate, uint128 remaining)
isHook
viewfunction isHook(address) view returns (bool)
owner
viewfunction owner() view returns (address)
pendingOwner
viewfunction pendingOwner() view returns (address)
pendingRewards
viewfunction pendingRewards(bytes32 posKey, address token, uint128 currentLiquidity, bytes32 pid) view returns (uint256 amount)
pendingRewardsBatch
viewfunction pendingRewardsBatch(bytes32 posKey, address[] tokens, uint128 currentLiquidity, bytes32 pid) view returns (uint256[] amounts)
pendingRewardsOwner
viewfunction pendingRewardsOwner(bytes32 pid, address owner) view returns (tuple[] list)
pendingRewardsOwnerBatch
viewfunction pendingRewardsOwnerBatch(bytes32[] pids, address owner) view returns (tuple[][] lists)
POOL_MANAGER
viewfunction POOL_MANAGER() view returns (address)
poolRewards
viewfunction poolRewards(bytes32, address) view returns (uint256 rewardsPerLiquidityCumulativeX128, uint128 liquidity, int24 tick, uint64 lastUpdated)
poolTokensOf
viewfunction poolTokensOf(bytes32 pid) view returns (address[] list)
positionManagerAdapter
viewfunction positionManagerAdapter() view returns (address)
positionRewards
viewfunction positionRewards(bytes32, address) view returns (uint256 rewardsPerLiquidityLastX128, uint256 rewardsAccrued)
whitelist
viewfunction whitelist(address) view returns (bool)
acceptOwnership
nonpayablefunction acceptOwnership()
claim
nonpayablefunction claim(address token, bytes32 positionKey, address to) returns (uint256 amount)
claimAllForOwner
nonpayablefunction claimAllForOwner(bytes32[] pids, address owner)
createIncentive
nonpayablefunction createIncentive(tuple key, address rewardToken, uint256 amount)
notifyBurn
nonpayablefunction notifyBurn(uint256 tokenId, address ownerAddr, uint256 info, uint256 liquidity, int256)
notifyModifyLiquidity
nonpayablefunction notifyModifyLiquidity(uint256 tokenId, int256 liquidityChange, int256)
notifySubscribe
nonpayablefunction notifySubscribe(uint256 tokenId, bytes)
notifyUnsubscribe
nonpayablefunction notifyUnsubscribe(uint256 tokenId)
pokePool
nonpayablefunction pokePool(tuple key)
renounceOwnership
nonpayablefunction renounceOwnership()
setHook
nonpayablefunction setHook(address hook, bool enabled)
setPositionManagerAdapter
nonpayablefunction setPositionManagerAdapter(address _adapter)
setWhitelist
nonpayablefunction setWhitelist(address token, bool ok)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
events
Claimed
event Claimed(address indexed user, address indexed token, uint256 amount)
HookAuthorised
event HookAuthorised(address hook, bool enabled)
IncentiveCreated
event IncentiveCreated(bytes32 indexed pid, address indexed token, uint256 amount, uint256 rate)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
OwnershipTransferStarted
event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner)
PositionManagerAdapterUpdated
event PositionManagerAdapterUpdated(address newAdapter)
WhitelistSet
event WhitelistSet(address indexed token, bool allowed)
errors
AddressEmptyCode
error AddressEmptyCode(address target)
AddressInsufficientBalance
error AddressInsufficientBalance(address account)
FailedInnerCall
error FailedInnerCall()
NotAllowed
error NotAllowed()
NotHook
error NotHook()
NotSubscriber
error NotSubscriber()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
ZeroAddress
error ZeroAddress()
ZeroAmount
error ZeroAmount()
creation bytecode
0x60a060405234801561000f575f80fd5b5060405161475138038061475183398101604081905261002e9161015b565b338061005357604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b61005c816100dc565b506001600160a01b03838116608052600280546001600160a01b03191684831617905581165f81815260036020908152604091829020805460ff191660019081179091558251938452908301527f969bb7542263e82515f30263de146111e882f6d42fc244c9624a924b2d197790910160405180910390a15050506101a5565b600180546001600160a01b03191690556100f5816100f8565b50565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146100f5575f80fd5b5f805f6060848603121561016d575f80fd5b835161017881610147565b602085015190935061018981610147565b604085015190925061019a81610147565b809150509250925092565b6080516145636101ee5f395f81816102a7015281816106cf01528181610a0b01528181610a64015281816113bd01528181611b3001528181611df801526121f901526145635ff3fe608060405234801561000f575f80fd5b50600436106101d1575f3560e01c80638d57f6b2116100fe578063adcdf9891161009e578063d26765291161006e578063d2676529146105ed578063d8865c271461060f578063e30c397814610622578063f2fde38b14610633575f80fd5b8063adcdf989146104b5578063af45dd141461054f578063b1a9116f14610562578063c981328e14610575575f80fd5b806396657955116100d957806396657955146104305780639b19251a14610450578063a5eb206e14610482578063a88848d414610495575f80fd5b80638d57f6b2146103eb5780638da5cb5b146103fe5780639048cfea1461040e575f80fd5b806362308e851161017457806379ba50971161014457806379ba50971461031c578063833e8db1146103245780638aa975e5146103375780638c7dea82146103cb575f80fd5b806362308e85146102a25780636cef460b146102e1578063715018a6146102f457806373af1f4b146102fc575f80fd5b80633756bca6116101af5780633756bca61461024857806353d6fd591461025b57806356968aa21461026e5780635b92a5f01461028f575f80fd5b80632048e384146101d55780632ab72215146101ea5780633130c24a14610235575b5f80fd5b6101e86101e3366004613bfa565b610646565b005b61021b6101f8366004613c28565b600660209081525f92835260408084209091529082529020805460019091015482565b604080519283526020830191909152015b60405180910390f35b6101e8610243366004613c56565b610753565b6101e8610256366004613cdb565b610ac4565b6101e8610269366004613d3b565b610c9e565b61028161027c366004613d7b565b610d04565b60405190815260200161022c565b6101e861029d366004613dc0565b610db2565b6102c97f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161022c565b6002546102c9906001600160a01b031681565b6101e8610e35565b61030f61030a366004613ddb565b610e48565b60405161022c9190613df2565b6101e8610eb1565b6101e8610332366004613d3b565b610ef7565b61038f610345366004613c28565b600560209081525f9283526040808420909152908252902080546001909101546001600160801b03811690600160801b810460020b90600160981b900467ffffffffffffffff1684565b60405161022c94939291909384526001600160801b0392909216602084015260020b604083015267ffffffffffffffff16606082015260800190565b6103de6103d9366004613e3d565b610f88565b60405161022c9190613ed9565b6101e86103f9366004613f59565b611121565b5f546001600160a01b03166102c9565b61042161041c366004613ff7565b6115c4565b60405161022c9392919061403f565b61044361043e366004613c28565b611795565b60405161022c91906140bc565b61047261045e366004613dc0565b600b6020525f908152604090205460ff1681565b604051901515815260200161022c565b6102816104903660046140ce565b6117a8565b6104a86104a3366004613cdb565b61183f565b60405161022c9190614102565b6105106104c3366004613c28565b600460209081525f9283526040808420909152908252902080546001909101546001600160801b038083169267ffffffffffffffff600160801b8204811693600160c01b90920416911684565b60405161022c94939291906001600160801b03948516815267ffffffffffffffff93841660208201529190921660408201529116606082015260800190565b6101e861055d366004613ddb565b6118eb565b6101e8610570366004614165565b611ca5565b6105d2610583366004613c28565b5f9182526004602090815260408084206001600160a01b03939093168452919052902080546001909101546001600160801b0380831693600160801b90930467ffffffffffffffff1692911690565b6040805193845260208401929092529082015260600161022c565b6104726105fb366004613dc0565b60036020525f908152604090205460ff1681565b6101e861061d3660046141a9565b611f67565b6001546001600160a01b03166102c9565b6101e8610641366004613dc0565b6123b0565b335f9081526003602052604090205460ff1661068e576040517fc72cfc3800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6106a86106a1368490038401846141f0565b60a0902090565b5f818152600a60205260408120805492935091908190036106c95750505050565b5f6106f47f000000000000000000000000000000000000000000000000000000000000000085612420565b50509150505f5b8281101561074a57610742610715368890038801886141f0565b868684815481106107285761072861426a565b5f918252602090912001546001600160a01b0316856124d2565b6001016106fb565b50505050505b50565b6001600160a01b0382165f908152600b602052604090205460ff168061079657506107816020840184613dc0565b6001600160a01b0316826001600160a01b0316145b806107c157506107ac6040840160208501613dc0565b6001600160a01b0316826001600160a01b0316145b6107f7576040517f3d693ada00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805f03610830576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6108436106a1368690038601866141f0565b5f8181526004602090815260408083206001600160a01b03881680855292529091209192506108749033308661264a565b80545f90600160801b900467ffffffffffffffff164210156108cc5781545f906108b0904290600160801b900467ffffffffffffffff16614292565b83549091506108c8906001600160801b0316826142a5565b9150505b5f6108d782866142bc565b90506108e662093a80826142cf565b83546001600160801b0319166001600160801b039190911617835561090e62093a80426142bc565b83546001600160801b03908116600160801b67ffffffffffffffff9384160277ffffffffffffffffffffffffffffffffffffffffffffffff1617600160c01b429390931692909202919091178085556001850180546001600160801b031916848416179055604080518881529190921660208201526001600160a01b0388169186917f9e9222c2727f74919fd8e16cfa1caf3dd8fe6c9aea8abdd2614aacd3a16dec8e910160405180910390a36109c584876126c6565b5f8481526005602090815260408083206001600160a01b038a168452909152812060018101549091600160981b90910467ffffffffffffffff169003610a4a575f610a307f000000000000000000000000000000000000000000000000000000000000000087612420565b5050915050610a48818361275590919063ffffffff16565b505b60018101546001600160801b03165f03610aba575f610a897f0000000000000000000000000000000000000000000000000000000000000000876127b7565b90506001600160801b03811615610ab8576001820180546001600160801b0319166001600160801b0383161790555b505b5050505050505050565b815f5b81811015610c97575f858583818110610ae257610ae261426a565b602090810292909201355f818152600a90935260408320805491945092039050610b0d575050610c8f565b5f8281526007602090815260408083206001600160a01b03891684529091528120905b8154811015610c8a575f828281548110610b4c57610b4c61426a565b905f5260205f20015490505f5b8454811015610c80575f858281548110610b7557610b7561426a565b5f9182526020808320909101548583526006825260408084206001600160a01b0390921680855291835280842087855260098452818520600885528286205481548e885260058752848820868952909652929095209295509392610bff926001600160801b0390921691610bf791600281810b9163010000009004900b612843565b849190612911565b506001820180545f9091558015610c2457610c246001600160a01b0385168e83612944565b836001600160a01b03168d6001600160a01b03167ff7a40077ff7a04c7e61f6f26fb13774259ddf1b6bce9ecf26a8276cdd399268383604051610c6991815260200190565b60405180910390a350505050806001019050610b59565b5050600101610b30565b505050505b600101610ac7565b5050505050565b610ca6612975565b6001600160a01b0382165f818152600b6020908152604091829020805460ff191685151590811790915591519182527f0aa5ec5ffdc7f6f9c4d0dded489d7450297155cb2f71cb771e02427f7dff4f51910160405180910390a25050565b5f848152600960209081526040808320600683528184206001600160a01b038816808652908452828520825487875260058652848720928752919094529184209092918491610d6191600281810b9163010000009004900b612843565b82549091505f90610d729083614292565b9050600160801b610d8c6001600160801b038916836142a5565b610d9691906142cf565b8360010154610da591906142bc565b9998505050505050505050565b610dba612975565b6001600160a01b038116610de15760405163d92e233d60e01b815260040160405180910390fd5b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527f582ec7d55fe2da1a8f783baf37c5a38008a41c8cf5eaf7b8a448ee7ed9770cbf9060200160405180910390a150565b610e3d612975565b610e465f6129a1565b565b5f818152600a6020908152604091829020805483518184028101840190945280845260609392830182828015610ea557602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311610e87575b50505050509050919050565b60015433906001600160a01b03168114610eee5760405163118cdaa760e01b81526001600160a01b03821660048201526024015b60405180910390fd5b610750816129a1565b610eff612975565b6001600160a01b038216610f265760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0382165f81815260036020908152604091829020805460ff19168515159081179091558251938452908301527f969bb7542263e82515f30263de146111e882f6d42fc244c9624a924b2d197790910160405180910390a15050565b6060838067ffffffffffffffff811115610fa457610fa4613eeb565b604051908082528060200260200182016040528015610fcd578160200160208202803683370190505b5091505f5b81811015611116575f88815260096020908152604080832060069092528220909190818a8a868181106110075761100761426a565b905060200201602081019061101c9190613dc0565b6001600160a01b0316815260208082019290925260409081015f90812085548a83526005909452918120919350916110a591600282810b9263010000009004900b90848e8e8a8181106110715761107161426a565b90506020020160208101906110869190613dc0565b6001600160a01b0316815260208101919091526040015f209190612843565b82549091505f906110b69083614292565b9050600160801b6110d06001600160801b038b16836142a5565b6110da91906142cf565b83600101546110e991906142bc565b8786815181106110fb576110fb61426a565b60200260200101818152505050505050806001019050610fd2565b505095945050505050565b6002546001600160a01b0316331461114c5760405163251cb70160e11b815260040160405180910390fd5b600254604051637ba03aad60e01b8152600481018490525f9182916001600160a01b0390911690637ba03aad9060240160c060405180830381865afa158015611197573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111bb9190614367565b600254604051631efeed3360e01b8152600481018890529294509092505f916001600160a01b0390911690631efeed3390602401602060405180830381865afa15801561120a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061122e9190614392565b6002546040516331a9108f60e11b8152600481018890529192505f916001600160a01b0390911690636352211e90602401602060405180830381865afa15801561127a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061129e91906143ad565b90505f6112ac8560a0902090565b5f818152600a60205260408120919250836112ca8760081c60020b90565b6112d78860201c60020b90565b604080516001600160a01b039094166020850152600292830b90840152900b6060820152608081018a905260a0810184905260c00160405160208183030381529060405280519060200120905081805490505f036113b75761133f600760088587858a6129ba565b60405180604001604052806113578860081c60020b90565b60020b815260200161136c8860201c60020b90565b60020b90525f91825260096020908152604090922081518154929093015162ffffff90811663010000000265ffffffffffff19909316931692909217179055506115c0945050505050565b5f6113e27f000000000000000000000000000000000000000000000000000000000000000085612420565b50509150506113f7600760088688868b6129ba565b604051806040016040528061140f8960081c60020b90565b60020b81526020016114248960201c60020b90565b60020b90525f838152600960209081526040822083518154949092015162ffffff90811663010000000265ffffffffffff19909516921691909117929092179091556114738860081c60020b90565b90505f6114838960201c60020b90565b90505f611498896001600160801b0316612a38565b90505f5b86548110156115b3575f8782815481106114b8576114b861426a565b5f918252602090912001546001600160a01b031690506114da8d8a83896124d2565b5f8981526005602090815260408083206001600160a01b038516845290915290206115369061150a908787612843565b5f8981526006602090815260408083206001600160a01b03871684529091528120918255600190910155565b6115aa60405180608001604052808760020b81526020018660020b815260200185600f0b81526020018f6060015160020b81525060055f8c81526020019081526020015f205f846001600160a01b03166001600160a01b031681526020019081526020015f20612a6490919063ffffffff16565b5060010161149c565b5050505050505050505050505b5050565b60608080838067ffffffffffffffff8111156115e2576115e2613eeb565b60405190808252806020026020018201604052801561160b578160200160208202803683370190505b5093508067ffffffffffffffff81111561162757611627613eeb565b604051908082528060200260200182016040528015611650578160200160208202803683370190505b5092508067ffffffffffffffff81111561166c5761166c613eeb565b604051908082528060200260200182016040528015611695578160200160208202803683370190505b5091505f5b8181101561178a575f888152600460205260408120818989858181106116c2576116c261426a565b90506020020160208101906116d79190613dc0565b6001600160a01b0316815260208101919091526040015f20805487519192506001600160801b0316908790849081106117125761171261426a565b602090810291909101015280548551600160801b90910467ffffffffffffffff16908690849081106117465761174661426a565b6020908102919091010152600181015484516001600160801b03909116908590849081106117765761177661426a565b60209081029190910101525060010161169a565b505093509350939050565b60606117a18383612bf3565b9392505050565b5f8281526006602090815260408083206001600160a01b03871684529091528120600101805491905580156117eb576117eb6001600160a01b0385168383612944565b836001600160a01b0316826001600160a01b03167ff7a40077ff7a04c7e61f6f26fb13774259ddf1b6bce9ecf26a8276cdd39926838360405161183091815260200190565b60405180910390a39392505050565b6060828067ffffffffffffffff81111561185b5761185b613eeb565b60405190808252806020026020018201604052801561188e57816020015b60608152602001906001900390816118795790505b5091505f5b818110156118e2576118bd8686838181106118b0576118b061426a565b9050602002013585612bf3565b8382815181106118cf576118cf61426a565b6020908102919091010152600101611893565b50509392505050565b6002546001600160a01b031633146119165760405163251cb70160e11b815260040160405180910390fd5b600254604051637ba03aad60e01b8152600481018390525f9182916001600160a01b0390911690637ba03aad9060240160c060405180830381865afa158015611961573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119859190614367565b600254604051631efeed3360e01b8152600481018790529294509092505f916001600160a01b0390911690631efeed3390602401602060405180830381865afa1580156119d4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119f89190614392565b6002546040516331a9108f60e11b8152600481018790529192505f916001600160a01b0390911690636352211e90602401602060405180830381865afa158015611a44573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a6891906143ad565b90505f611a768560a0902090565b5f818152600a6020526040812080549293509190819003611a9b575050505050505050565b5f84611aaa8860081c60020b90565b611ab78960201c60020b90565b604080516001600160a01b039094166020850152600292830b90840152900b6060820152608081018a905260a0810185905260c0016040516020818303038152906040528051906020012090505f611b128860081c60020b90565b90505f611b228960201c60020b90565b60608b01519091505f611b557f000000000000000000000000000000000000000000000000000000000000000089612420565b50509150505f5b86811015611c6d575f888281548110611b7757611b7761426a565b5f9182526020808320909101548983526006825260408084206001600160a01b03909216808552919092529120805491925090158015611bb957506001810154155b15611bc5575050611c65565b611bd18f8c84876124d2565b611c396040518061010001604052808d8152602001846001600160a01b031681526020018a81526020018960020b81526020018860020b81526020018760020b81526020018f6001600160801b031681526020018f611c2f906143c8565b600f0b9052612d51565b505f8781526006602090815260408083206001600160a01b039094168352929052908120818155600101555b600101611b5c565b50611c7d600760088a8c89612e11565b5050505f91825250600960205260409020805465ffffffffffff191690555050505050505050565b6002546001600160a01b03163314611cd05760405163251cb70160e11b815260040160405180910390fd5b6002546040517f534674a6000000000000000000000000000000000000000000000000000000008152600481018590525f916001600160a01b03169063534674a69060240160a060405180830381865afa158015611d30573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d5491906143f5565b90505f611d628260a0902090565b5f818152600a602052604081208054929350919003611d8357505050610c97565b5f611d918760081c60020b90565b90505f611da18860201c60020b90565b604080516001600160a01b038c16602080830191909152600286810b8385015284900b6060830152608082018e905260a08083018990528351808403909101815260c090920190925280519101209091505f611e1d7f000000000000000000000000000000000000000000000000000000000000000087612420565b50509150505f5b8554811015611f30575f868281548110611e4057611e4061426a565b5f9182526020808320909101548683526006825260408084206001600160a01b03909216808552919092529120805491925090158015611e8257506001810154155b15611e8e575050611f28565b611e9a8a8a84876124d2565b611efc6040518061010001604052808b8152602001846001600160a01b031681526020018781526020018960020b81526020018860020b81526020018c6060015160020b81526020018e6001600160801b031681526020018e611c2f906143c8565b505f8481526006602090815260408083206001600160a01b039094168352929052908120818155600101555b600101611e24565b50611f4060076008888e86612e11565b505f908152600960205260409020805465ffffffffffff1916905550505050505050505050565b6002546001600160a01b03163314611f925760405163251cb70160e11b815260040160405180910390fd5b600254604051637ba03aad60e01b8152600481018590525f9182916001600160a01b0390911690637ba03aad9060240160c060405180830381865afa158015611fdd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120019190614367565b915091505f6120118360a0902090565b600254604051631efeed3360e01b8152600481018990529192505f916001600160a01b0390911690631efeed3390602401602060405180830381865afa15801561205d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120819190614392565b6002546040516331a9108f60e11b8152600481018a90529192505f916001600160a01b0390911690636352211e90602401602060405180830381865afa1580156120cd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120f191906143ad565b90505f6120fe888461440f565b5f858152600a602052604081209192508361211c8860081c60020b90565b6121298960201c60020b90565b604080516001600160a01b039094166020850152600292830b90840152900b6060820152608081018c905260a0810187905260c00160405160208183030381529060405280519060200120905081805490505f036121f357846001600160801b03165f036121bf576121a060076008888785612e11565b5f818152600960205260409020805465ffffffffffff191690556121e6565b5f81815260086020526040902080546001600160801b0319166001600160801b0387161790555b5050505050505050505050565b5f61221e7f000000000000000000000000000000000000000000000000000000000000000088612420565b50509150505f6122318960081c60020b90565b90505f6122418a60201c60020b90565b60608c01519091505f6122538f612ee8565b90505f5b8754811015612337575f8882815481106122735761227361426a565b5f918252602090912001546001600160a01b031690506122958f8e838a6124d2565b6122f56040518061010001604052808f8152602001836001600160a01b031681526020018a81526020018860020b81526020018760020b81526020018660020b81526020018c6001600160801b0316815260200185600f0b815250612f09565b8b6001600160801b03165f0361232e575f8881526006602090815260408083206001600160a01b03851684529091528120818155600101555b50600101612257565b50896001600160801b03165f0361237657612357600760088d8c8a612e11565b5f868152600960205260409020805465ffffffffffff1916905561239d565b5f86815260086020526040902080546001600160801b0319166001600160801b038c161790555b505050505050505050505050505b505050565b6123b8612975565b600180546001600160a01b0383166001600160a01b031990911681179091556123e85f546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b5f805f805f61242e8661315d565b604051631e2eaeaf60e01b8152600481018290529091505f906001600160a01b03891690631e2eaeaf90602401602060405180830381865afa158015612476573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061249a919061444e565b90506001600160a01b03811695508060a01c60020b945062ffffff8160b81c16935062ffffff8160d01c169250505092959194509250565b5f8381526004602090815260408083206001600160a01b03861684529091528120805490916001600160801b03909116900361250e5750612644565b805460608601515f8681526005602090815260408083206001600160a01b0389168452909152902061254e9290916001600160801b039091169085613199565b80545f9061256d90600160c01b900467ffffffffffffffff1642614292565b9050801561074a5781545f9061258c906001600160801b0316836142a5565b60018401549091506001600160801b03168111156125b4575060018201546001600160801b03165b6001830180548291905f906125d39084906001600160801b0316614465565b82546101009290920a6001600160801b03818102199093169183160217909155845477ffffffffffffffffffffffffffffffffffffffffffffffff16600160c01b4267ffffffffffffffff16021785556001850154165f0390506126405782546001600160801b03191683555b5050505b50505050565b6040516001600160a01b0384811660248301528381166044830152606482018390526126449186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061323f565b5f828152600a60205260408120905b815481101561272157826001600160a01b03168282815481106126fa576126fa61426a565b5f918252602090912001546001600160a01b0316036127195750505050565b6001016126d5565b5080546001810182555f91825260209091200180546001600160a01b0319166001600160a01b039290921691909117905550565b60019190910180547fffffffffff0000000000000000000000ffffffffffffffffffffffffffffffff16600160801b62ffffff9093169290920267ffffffffffffffff60981b191691909117600160981b4267ffffffffffffffff1602179055565b5f806127c28361315d565b90505f6127d06003836142bc565b604051631e2eaeaf60e01b8152600481018290529091506001600160a01b03861690631e2eaeaf90602401602060405180830381865afa158015612816573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061283a919061444e565b95945050505050565b5f8160020b8360020b1261285857505f6117a1565b6001840154600284810b600160801b909204900b121561289d5750600281810b5f90815281850160205260408082206001908101549386900b835291200154036117a1565b6001840154600283810b600160801b909204900b126128e15750600282810b5f90815281850160205260408082206001908101549385900b835291200154036117a1565b50600282810b5f90815281850160205260408082206001908101549385900b835291200154845403039392505050565b82545f90820361292f816001600160801b038616600160801b6132b9565b60018601805482019055929094555092915050565b6040516001600160a01b038381166024830152604482018390526123ab91859182169063a9059cbb9060640161267f565b5f546001600160a01b03163314610e465760405163118cdaa760e01b8152336004820152602401610ee5565b600180546001600160a01b031916905561075081613355565b5f828152602086905260408120546001600160801b03169003612a07575f848152602087815260408083206001600160a01b03871684528252822080546001810182559083529120018290555b5f9182526020949094526040902080546001600160801b0319166001600160801b0390941693909317909255505050565b5f6f800000000000000000000000000000008210612a6057612a606393dafdf160e01b6133a4565b5090565b604080820151825160208085015184516080810186525f8082529281018390529485018290526060850191909152919290919083600f0b5f14612b1c57612aad8684865f6133ac565b6001600160801b0316602083015215158152612acc86838660016133ac565b6001600160801b0316606083015215156040820152805115612afd576060850151612afd9060038801908590613465565b806040015115612b1c576060850151612b1c9060038801908490613465565b5f84600f0b1215612b6e57805115612b4957600283810b5f90815290870160205260408120818155600101555b806040015115612b6e57600282810b5f90815290870160205260408120818155600101555b60018601548551600160801b909104600290810b91900b13801590612baa575060208501516001870154600291820b600160801b90910490910b125b1561074a576001860154612bc7906001600160801b0316856134b7565b6001870180546001600160801b03929092166001600160801b0319909216919091179055505050505050565b5f828152600a602052604090208054606091908067ffffffffffffffff811115612c1f57612c1f613eeb565b604051908082528060200260200182016040528015612c6357816020015b604080518082019091525f8082526020820152815260200190600190039081612c3d5790505b505f8681526007602090815260408083206001600160a01b03891684529091528120805492955091905b83811015612d46575f858281548110612ca857612ca861426a565b5f9182526020822001546001600160a01b03169150805b84811015612d0057612cec868281548110612cdc57612cdc61426a565b905f5260205f200154848d6134e4565b612cf690836142bc565b9150600101612cbf565b506040518060400160405280836001600160a01b0316815260200182815250888481518110612d3157612d3161426a565b60209081029190910101525050600101612c8d565b505050505092915050565b80515f90815260056020908152604080832082850180516001600160a01b039081168652918452828520838701518652600685528386209151909216855290925282206060840151608085015192939192612dad918591612843565b60c0850151909150612dc190839083612911565b506126446040518060800160405280866060015160020b8152602001866080015160020b81526020018660e00151600f0b81526020018660a0015160020b81525084612a6490919063ffffffff16565b5f8181526020858152604080832080546001600160801b03191690558583528782528083206001600160a01b03861684529091528120805490915b81811015610aba5783838281548110612e6757612e6761426a565b905f5260205f20015403612ee05782612e81600184614292565b81548110612e9157612e9161426a565b905f5260205f200154838281548110612eac57612eac61426a565b905f5260205f20018190555082805480612ec857612ec8614484565b600190038181905f5260205f20015f90559055610aba565b600101612e4c565b80600f81900b8114612f0457612f046393dafdf160e01b6133a4565b919050565b80515f908152600560209081526040808320828501516001600160a01b031684529091529020606082015160a0830151612f449183916135ae565b612f578183608001518460a001516135ae565b6040808301515f90815260066020908152828220818601516001600160a01b03168352905290812060608401516080850151919291612f97918591612843565b60c0850151909150612fab90839083612911565b506060840151600290810b5f908152908401602052604090205460c08501516001600160801b039182169116811015613079575f613000828760c00151612ff29190614465565b6001600160801b0316612a38565b905061304d6040518060800160405280886060015160020b8152602001886080015160020b815260200183600f0b81526020018860a0015160020b81525086612a6490919063ffffffff16565b61307761306d87606001518860800151886128439092919063ffffffff16565b85555f6001860155565b505b6080850151600290810b5f908152908501602052604090205460c08601516001600160801b03918216911681101561310e575f6130bf828860c00151612ff29190614465565b905061310c6040518060800160405280896060015160020b8152602001896080015160020b815260200183600f0b81526020018960a0015160020b81525087612a6490919063ffffffff16565b505b61074a6040518060800160405280886060015160020b8152602001886080015160020b81526020018860e00151600f0b81526020018860a0015160020b81525086612a6490919063ffffffff16565b6040515f9061317c908390600690602001918252602082015260400190565b604051602081830303815290604052805190602001209050919050565b6001840154600160981b900467ffffffffffffffff165f03613211576001840180547fffffffffff0000000000000000000000ffffffffffffffffffffffffffffffff16600160801b62ffffff84160267ffffffffffffffff60981b191617600160981b4267ffffffffffffffff1602179055612644565b61321b84846135fe565b6001840154600282810b600160801b909204900b14612644576126448483836136c3565b5f6132536001600160a01b03841683613811565b905080515f141580156132775750808060200190518101906132759190614498565b155b156123ab576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401610ee5565b5f838302815f19858709828110838203039150508084116132d8575f80fd5b805f036132ea575082900490506117a1565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b805f5260045ffd5b600283810b5f9081529085016020526040812080548291906001600160801b03811690600160801b9004600f0b6133e382886134b7565b6001600160801b03808216159084168015919091141596509094505f03613426576001890154600160801b9004600290810b9089900b1361342657885460018401555b5f8661343b5761343688836144b3565b613445565b613445888361440f565b90508060801b6001600160801b0386161784555050505094509492505050565b600291820b910b808207156134925760405163d4d8f3e681528260208201528160408201526044601c8201fd5b80820591508160081d5f528260205260405f20600160ff84161b815418815550505050565b6001600160801b038216600f82900b01608081901c156134de576393dafdf15f526004601cfd5b92915050565b5f8381526009602090815260408083208054858552600584528285206001600160a01b03881686529093529083209091839161352e91600281810b9163010000009004900b612843565b5f8781526006602090815260408083206001600160a01b038a168452909152812080549293509161355f9084614292565b5f89815260086020526040902054909150600160801b90613589906001600160801b0316836142a5565b61359391906142cf565b82600101546135a291906142bc565b98975050505050505050565b600282810b5f90815290840160205260408120805490916001600160801b03909116900361264457835460018083019190915581546001600160801b031916178155612644600385018484613465565b805f03613609575050565b60018201545f9061362b90600160981b900467ffffffffffffffff1642614292565b9050805f0361363957505050565b60018301805467ffffffffffffffff4216600160981b0267ffffffffffffffff60981b19821681179092556001600160801b039182169116175f0361367d57505050565b5f61368882846142a5565b60018501549091506136a7906001600160801b0316608083901b6142cf565b845f015f8282546136b891906142bc565b909155505050505050565b6001830154600160801b9004600290810b905f9083900b821280159061375a575b8260020b8460020b1215613755575f80613704600389018689600161381e565b915091508560020b8260020b1361371c5750506137bf565b8015613741575f61373189848b5f015461390b565b905061373d818661440f565b9450505b61374c6001836144f2565b945050506136e4565b6137bf565b8360020b8360020b12156137bf575f806137796003890186898461381e565b915091508560020b8260020b13156137925750506137bf565b80156137b7575f6137a789848b5f015461390b565b90506137b381866144b3565b9450505b50925061375a565b60018601805462ffffff8616600160801b027fffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffff82168117909255612bc7916001600160801b03908116911617836134b7565b60606117a183835f613956565b5f80600284810b9086900b818107831391900503831561389d57600281900b60081d600181900b5f908152602089905260409020545f1960ff808516908190039190911c91821680151595509091908561387f57888360ff16860302613892565b8861388982613a08565b840360ff168603025b965050505050613901565b6001908101600281900b60081d80830b5f90815260208a905260409020545f1960ff841694851b0119908116801515955092939192856138e757888360ff0360ff168601026138fa565b88836138f283613a93565b0360ff168601025b9650505050505b5094509492505050565b600282810b5f9081529084016020526040812080546001600160801b03168203613938575f9150506117a1565b6001810180548403905554600160801b9004600f0b90509392505050565b606081471015613994576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610ee5565b5f80856001600160a01b031684866040516139af9190614517565b5f6040518083038185875af1925050503d805f81146139e9576040519150601f19603f3d011682016040523d82523d5f602084013e6139ee565b606091505b50915091506139fe868383613b2d565b9695505050505050565b5f808211613a14575f80fd5b507f0706060506020500060203020504000106050205030304010505030400000000601f6f8421084210842108cc6318c6db6d54be6001600160801b03841160071b84811c67ffffffffffffffff1060061b1784811c63ffffffff1060051b1784811c61ffff1060041b1784811c60ff1060031b1793841c1c161a1790565b5f808211613a9f575f80fd5b507e1f0d1e100c1d070f090b19131c1706010e11080a1a141802121b15031604055f8290039091166101e07f804040554300526644320000502061067405302602000010750620017611707760fc7fb6db6db6ddddddddd34d34d349249249210842108c6318c639ce739cffffffff840260f81c161b60f71c1690811c63d76453e004601f169190911a1790565b606082613b4257613b3d82613ba2565b6117a1565b8151158015613b5957506001600160a01b0384163b155b15613b9b576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401610ee5565b50806117a1565b805115613bb25780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60a08284031215613bf4575f80fd5b50919050565b5f60a08284031215613c0a575f80fd5b6117a18383613be4565b6001600160a01b0381168114610750575f80fd5b5f8060408385031215613c39575f80fd5b823591506020830135613c4b81613c14565b809150509250929050565b5f805f60e08486031215613c68575f80fd5b613c728585613be4565b925060a0840135613c8281613c14565b9295929450505060c0919091013590565b5f8083601f840112613ca3575f80fd5b50813567ffffffffffffffff811115613cba575f80fd5b6020830191508360208260051b8501011115613cd4575f80fd5b9250929050565b5f805f60408486031215613ced575f80fd5b833567ffffffffffffffff811115613d03575f80fd5b613d0f86828701613c93565b9094509250506020840135613d2381613c14565b809150509250925092565b8015158114610750575f80fd5b5f8060408385031215613d4c575f80fd5b8235613d5781613c14565b91506020830135613c4b81613d2e565b6001600160801b0381168114610750575f80fd5b5f805f8060808587031215613d8e575f80fd5b843593506020850135613da081613c14565b92506040850135613db081613d67565b9396929550929360600135925050565b5f60208284031215613dd0575f80fd5b81356117a181613c14565b5f60208284031215613deb575f80fd5b5035919050565b602080825282518282018190525f918401906040840190835b81811015613e325783516001600160a01b0316835260209384019390920191600101613e0b565b509095945050505050565b5f805f805f60808688031215613e51575f80fd5b85359450602086013567ffffffffffffffff811115613e6e575f80fd5b613e7a88828901613c93565b9095509350506040860135613e8e81613d67565b949793965091946060013592915050565b5f8151808452602084019350602083015f5b82811015613ecf578151865260209586019590910190600101613eb1565b5093949350505050565b602081525f6117a16020830184613e9f565b634e487b7160e01b5f52604160045260245ffd5b60405160a0810167ffffffffffffffff81118282101715613f2257613f22613eeb565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715613f5157613f51613eeb565b604052919050565b5f8060408385031215613f6a575f80fd5b82359150602083013567ffffffffffffffff811115613f87575f80fd5b8301601f81018513613f97575f80fd5b803567ffffffffffffffff811115613fb157613fb1613eeb565b613fc4601f8201601f1916602001613f28565b818152866020838501011115613fd8575f80fd5b816020840160208301375f602083830101528093505050509250929050565b5f805f60408486031215614009575f80fd5b83359250602084013567ffffffffffffffff811115614026575f80fd5b61403286828701613c93565b9497909650939450505050565b606081525f6140516060830186613e9f565b82810360208401526140638186613e9f565b905082810360408401526139fe8185613e9f565b5f8151808452602084019350602083015f5b82811015613ecf57815180516001600160a01b031687526020908101518188015260409096019590910190600101614089565b602081525f6117a16020830184614077565b5f805f606084860312156140e0575f80fd5b83356140eb81613c14565b9250602084013591506040840135613d2381613c14565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b8281101561415957603f19878603018452614144858351614077565b94506020938401939190910190600101614128565b50929695505050505050565b5f805f805f60a08688031215614179575f80fd5b85359450602086013561418b81613c14565b94979496505050506040830135926060810135926080909101359150565b5f805f606084860312156141bb575f80fd5b505081359360208301359350604090920135919050565b62ffffff81168114610750575f80fd5b8060020b8114610750575f80fd5b5f60a0828403128015614201575f80fd5b5061420a613eff565b823561421581613c14565b8152602083013561422581613c14565b60208201526040830135614238816141d2565b6040820152606083013561424b816141e2565b6060820152608083013561425e81613c14565b60808201529392505050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b818103818111156134de576134de61427e565b80820281158282048414176134de576134de61427e565b808201808211156134de576134de61427e565b5f826142e957634e487b7160e01b5f52601260045260245ffd5b500490565b5f60a082840312156142fe575f80fd5b614306613eff565b9050815161431381613c14565b8152602082015161432381613c14565b60208201526040820151614336816141d2565b60408201526060820151614349816141e2565b6060820152608082015161435c81613c14565b608082015292915050565b5f8060c08385031215614378575f80fd5b61438284846142ee565b915060a083015190509250929050565b5f602082840312156143a2575f80fd5b81516117a181613d67565b5f602082840312156143bd575f80fd5b81516117a181613c14565b5f81600f0b6f7fffffffffffffffffffffffffffffff1981036143ed576143ed61427e565b5f0392915050565b5f60a08284031215614405575f80fd5b6117a183836142ee565b600f82810b9082900b036f7fffffffffffffffffffffffffffffff1981126f7fffffffffffffffffffffffffffffff821317156134de576134de61427e565b5f6020828403121561445e575f80fd5b5051919050565b6001600160801b0382811682821603908111156134de576134de61427e565b634e487b7160e01b5f52603160045260245ffd5b5f602082840312156144a8575f80fd5b81516117a181613d2e565b600f81810b9083900b016f7fffffffffffffffffffffffffffffff81136f7fffffffffffffffffffffffffffffff19821217156134de576134de61427e565b600282810b9082900b03627fffff198112627fffff821317156134de576134de61427e565b5f82518060208501845e5f92019182525091905056fea26469706673582212208ae81883adb1e69eaf88847ca56a63dc80e12137f893cd870ec8b531fbd4938064736f6c634300081a0033000000000000000000000000498581ff718922c3f8e6a244956af099b2652b2b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000066989c71705debb446d6b83d76cbabdd502cb0cc