4 txs
48 calls
constructor
constructor(address _feeProcessor, address _pm, address _posManagerAdapter, address _hook, address _bmx, address _incentiveGauge)
functions
BMX
viewfunction BMX() view returns (address)
dayBuckets
viewfunction dayBuckets(bytes32, uint32) view returns (uint256)
feeProcessor
viewfunction feeProcessor() view returns (address)
getPoolData
viewfunction getPoolData(bytes32 pid) view returns (uint256 currentStreamRate, uint256 rewardsPerLiquidityX128, uint128 activeLiquidity)
getPoolDataBatch
viewfunction getPoolDataBatch(bytes32[] pids) view returns (uint256[] currentStreamRates, uint256[] rewardsPerLiquidityX128s, uint128[] activeLiquidities)
incentiveGauge
viewfunction incentiveGauge() view returns (address)
isHook
viewfunction isHook(address) view returns (bool)
nextEpochEndsIn
viewfunction nextEpochEndsIn(bytes32) view returns (uint256 secondsLeft)
owner
viewfunction owner() view returns (address)
pendingOwner
viewfunction pendingOwner() view returns (address)
pendingRewardsByTokenId
viewfunction pendingRewardsByTokenId(uint256 tokenId) view returns (uint256 amount)
pendingRewardsOwner
viewfunction pendingRewardsOwner(bytes32 pid, address owner) view returns (uint256 amount)
pendingRewardsOwnerBatch
viewfunction pendingRewardsOwnerBatch(bytes32[] pids, address owner) view returns (uint256[] amounts)
POOL_MANAGER
viewfunction POOL_MANAGER() view returns (address)
poolRewards
viewfunction poolRewards(bytes32) view returns (uint128 liquidity, int24 tick, uint64 lastUpdated)
positionManagerAdapter
viewfunction positionManagerAdapter() view returns (address)
positionRewards
viewfunction positionRewards(bytes32) view returns (uint256 rewardsPerLiquidityLastX128, uint256 rewardsAccrued)
streamRate
viewfunction streamRate(bytes32 pid) view returns (uint256)
acceptOwnership
nonpayablefunction acceptOwnership()
addRewards
nonpayablefunction addRewards(bytes32 poolId, uint256 amount)
claim
nonpayablefunction claim(uint256 tokenId, address to) returns (uint256 amount)
claimAllForOwner
nonpayablefunction claimAllForOwner(bytes32[] pids, address owner) returns (uint256 totalBmx)
initPool
nonpayablefunction initPool(tuple key, int24 initialTick)
notifyBurnWithContext
nonpayablefunction notifyBurnWithContext(uint256, bytes32 posKey, bytes32 poolIdRaw, address ownerAddr, int24 currentTick, int24 tickLower, int24 tickUpper, uint128 liquidity)
notifyModifyLiquidityWithContext
nonpayablefunction notifyModifyLiquidityWithContext(uint256, bytes32 posKey, bytes32 poolIdRaw, int24 currentTick, int24 tickLower, int24 tickUpper, int256 liquidityChange, uint128 liquidityAfter)
notifySubscribeWithContext
nonpayablefunction notifySubscribeWithContext(uint256 tokenId, bytes32 posKey, bytes32 poolIdRaw, int24 currentTick, int24 tickLower, int24 tickUpper, uint128 liquidity, address owner)
notifyUnsubscribeWithContext
nonpayablefunction notifyUnsubscribeWithContext(uint256, bytes32 posKey, bytes32 poolIdRaw, int24 tickLower, int24 tickUpper, uint128 liquidity)
pokePool
nonpayablefunction pokePool(tuple key)
renounceOwnership
nonpayablefunction renounceOwnership()
setFeeProcessor
nonpayablefunction setFeeProcessor(address _fp)
setHook
nonpayablefunction setHook(address hook, bool enabled)
setPositionManagerAdapter
nonpayablefunction setPositionManagerAdapter(address _adapter)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
events
Claimed
event Claimed(address indexed user, uint256 amount)
EpochRolled
event EpochRolled(bytes32 indexed poolId, uint256 streamRate, uint256 timestamp)
FeeProcessorUpdated
event FeeProcessorUpdated(address newFeeProcessor)
HookAuthorised
event HookAuthorised(address hook, bool enabled)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
OwnershipTransferStarted
event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner)
PositionManagerAdapterUpdated
event PositionManagerAdapterUpdated(address newAdapter)
RewardsAdded
event RewardsAdded(bytes32 indexed poolId, uint256 amount)
errors
NotAuthorized
error NotAuthorized()
NotFeeProcessor
error NotFeeProcessor()
NotHook
error NotHook()
NotSubscriber
error NotSubscriber()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
ZeroAddress
error ZeroAddress()
creation bytecode
0x60c060405234801561000f575f80fd5b506040516146cb3803806146cb83398101604081905261002e91610183565b338061005357604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b61005c81610104565b50600380546001600160a01b03199081166001600160a01b038981169190911790925586821660805260028054821687841617905583821660a0526004805490911683831617905583165f818152600a6020908152604091829020805460ff191660019081179091558251938452908301527f969bb7542263e82515f30263de146111e882f6d42fc244c9624a924b2d197790910160405180910390a1505050505050610206565b600180546001600160a01b031916905561011d81610120565b50565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116811461011d575f80fd5b5f805f805f8060c08789031215610198575f80fd5b86516101a38161016f565b60208801519096506101b48161016f565b60408801519095506101c58161016f565b60608801519094506101d68161016f565b60808801519093506101e78161016f565b60a08801519092506101f88161016f565b809150509295509295509295565b60805160a05161442d61029e5f395f818161020a0152818161095e01528181610c0501528181610e0201528181610e2f01528181610ef901528181611264015281816112ca0152818161157b015281816116a30152818161192a01528181611a5801528181611c6701528181611ef101528181612354015281816127d4015261293001525f81816102df0152611d6a015261442d5ff3fe608060405234801561000f575f80fd5b5060043610610201575f3560e01c80638da5cb5b11610123578063c0e8d384116100b8578063e30c397811610088578063f2fde38b1161006e578063f2fde38b14610568578063f7590c351461057b578063ff0747b81461058e575f80fd5b8063e30c397814610544578063e32cc1c714610555575f80fd5b8063c0e8d3841461044d578063c657d6c6146104c8578063d2676529146104ff578063ddd5e1b214610531575f80fd5b8063a88848d4116100f3578063a88848d4146103f4578063aa17cc6c14610414578063aff8546814610427578063bccf175e1461043a575f80fd5b80638da5cb5b1461038357806393327e071461039357806394f0d0bf146103ce57806396657955146103e1575f80fd5b806367b2b5351161019957806379ba50971161016957806379ba509714610342578063833e8db11461034a57806385e84a101461035d578063885e463e14610370575f80fd5b806367b2b535146103015780636cef460b14610314578063713f6a0a14610327578063715018a61461033a575f80fd5b806348f60dfd116101d457806348f60dfd1461029257806354c366a4146102a55780635b92a5f0146102c757806362308e85146102da575f80fd5b80631a669779146102055780631f19ab50146102495780632048e3841461025c5780633756bca614610271575b5f80fd5b61022c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b60045461022c906001600160a01b031681565b61026f61026a366004613af5565b6105b8565b005b61028461027f366004613b6a565b61061f565b604051908152602001610240565b61026f6102a0366004613bbd565b610a15565b6102b86102b3366004613bdd565b610ae3565b60405161024093929190613c56565b61026f6102d5366004613cc8565b610cf3565b61022c7f000000000000000000000000000000000000000000000000000000000000000081565b61026f61030f366004613d07565b610d77565b60025461022c906001600160a01b031681565b61026f610335366004613cc8565b610f93565b61026f611010565b61026f611023565b61026f610358366004613d73565b61106c565b61026f61036b366004613e7c565b6110fd565b61026f61037e366004613ea7565b6111c3565b5f546001600160a01b031661022c565b6103b96103a1366004613f23565b60076020525f90815260409020805460019091015482565b60408051928352602083019190915201610240565b60035461022c906001600160a01b031681565b6102846103ef366004613f3a565b611415565b610407610402366004613b6a565b611427565b6040516102409190613f5d565b610284610422366004613f23565b6114c9565b61026f610435366004613f6f565b611517565b610284610448366004613f23565b61165d565b61049661045b366004613f23565b60066020525f90815260409020600101546001600160801b03811690600160801b810460020b90600160981b900467ffffffffffffffff1683565b604080516001600160801b03909416845260029290920b602084015267ffffffffffffffff1690820152606001610240565b6104db6104d6366004613f23565b611681565b6040805193845260208401929092526001600160801b031690820152606001610240565b61052161050d366004613cc8565b600a6020525f908152604090205460ff1681565b6040519015158152602001610240565b61028461053f366004613f3a565b6116ec565b6001546001600160a01b031661022c565b61026f610563366004613fe5565b6118bc565b61026f610576366004613cc8565b611aa2565b610284610589366004613f23565b611b12565b61028461059c36600461406c565b600560209081525f928352604080842090915290825290205481565b335f908152600a602052604090205460ff166105e7576040516318e59f8760e31b815260040160405180910390fd5b5f6106016105fa36849003840184614097565b60a0902090565b905061061b61061536849003840184614097565b82611d64565b5050565b5f82815b818110156108a6575f86868381811061063e5761063e6140b1565b602090810292909201355f8181526008845260408082206001600160a01b038b16835290945292832080549194509203905061067b57505061089e565b6002546040517f29b482fe000000000000000000000000000000000000000000000000000000008152600481018490525f916001600160a01b0316906329b482fe9060240160a060405180830381865afa1580156106db573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106ff9190614133565b90505f5b8254811015610899575f83828154811061071f5761071f6140b1565b5f918252602080832090910154808352600c90915260408220549092509081900361074e575050600101610703565b6002546040516331a9108f60e11b8152600481018390526001600160a01b0390911690636352211e90602401602060405180830381865afa9250505080156107b3575060408051601f3d908101601f191682019092526107b09181019061414d565b60015b6107c1575050600101610703565b8a6001600160a01b0316816001600160a01b0316146107e857836001019350505050610703565b506107f38683611db5565b6107fe848784611ea8565b5f8281526007602052604081206001018054919055801561082657610823818b61417c565b99505b5f838152600960205260409020546001600160801b031615801561085e57505f838152600f60205260409020546001600160801b0316155b801561087557505f83815260106020526040902054155b1561088a57610885878c85611f41565b610891565b8360010193505b505050610703565b505050505b600101610623565b506004546001600160a01b03161561093257600480546040517f3756bca60000000000000000000000000000000000000000000000000000000081526001600160a01b0390911691633756bca691610904918991899189910161418f565b5f604051808303815f87803b15801561091b575f80fd5b505af115801561092d573d5f803e3d5ffd5b505050505b8115610a0d5760405163a9059cbb60e01b81526001600160a01b038481166004830152602482018490527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303815f875af11580156109a4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109c891906141dc565b50826001600160a01b03167fd8138f8a3f377c5259ca548e70e4c2de94f129f5a11036a15b69513cba2b426a83604051610a0491815260200190565b60405180910390a25b509392505050565b6003546001600160a01b03163314610a59576040517fa806153400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f610a62611f89565b90505f610a708260026141f7565b5f85815260056020908152604080832063ffffffff85168452909152812080549293508592909190610aa390849061417c565b909155505060405183815284907ffacfe21a3f9bcedcbf7b0629b67bd4f0ecac1a3367e1386b261ccaa24c3975329060200160405180910390a250505050565b60608080838067ffffffffffffffff811115610b0157610b01613daa565b604051908082528060200260200182016040528015610b2a578160200160208202803683370190505b5093508067ffffffffffffffff811115610b4657610b46613daa565b604051908082528060200260200182016040528015610b6f578160200160208202803683370190505b5092508067ffffffffffffffff811115610b8b57610b8b613daa565b604051908082528060200260200182016040528015610bb4578160200160208202803683370190505b5091505f5b81811015610cea57610be2878783818110610bd657610bd66140b1565b905060200201356114c9565b858281518110610bf457610bf46140b1565b602002602001018181525050610c5b7f000000000000000000000000000000000000000000000000000000000000000060065f8a8a86818110610c3957610c396140b1565b9050602002013581526020019081526020015f20611f9c90919063ffffffff16565b848281518110610c6d57610c6d6140b1565b60200260200101818152505060065f888884818110610c8e57610c8e6140b1565b9050602002013581526020019081526020015f206001015f9054906101000a90046001600160801b0316838281518110610cca57610cca6140b1565b6001600160801b0390921660209283029190910190910152600101610bb9565b50509250925092565b610cfb611fbb565b6001600160a01b038116610d225760405163d92e233d60e01b815260040160405180910390fd5b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527f582ec7d55fe2da1a8f783baf37c5a38008a41c8cf5eaf7b8a448ee7ed9770cbf906020015b60405180910390a150565b6002546001600160a01b03163314610da25760405163251cb70160e11b815260040160405180910390fd5b5f8481526006602052604090206001810154859190600160981b900467ffffffffffffffff1642610dd281611fe7565b610ddb83611fe7565b03610e8a5781811115610e29575f610df4858484611fff565b90508015610e2757610e27847f0000000000000000000000000000000000000000000000000000000000000000836121f9565b505b610e53837f0000000000000000000000000000000000000000000000000000000000000000611f9c565b5f8a8152600e6020908152604080832093909355600f90522080546001600160801b0319166001600160801b038716179055610f51565b60018301545f8a81526010602052604090206001600160801b03909116608083901b77ffffffffffffffff000000000000000000000000000000001660c085901b7fffffffffffffffff00000000000000000000000000000000000000000000000016171790819055610f1d847f0000000000000000000000000000000000000000000000000000000000000000611f9c565b5f8b815260116020908152604080832093909355600f90522080546001600160801b0319166001600160801b038816179055505b6001600160801b03851615610f6c57610f6c8388888861222c565b5050505f958652505060096020525050604090912080546001600160801b03191690555050565b610f9b611fbb565b6001600160a01b038116610fc25760405163d92e233d60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0383169081179091556040519081527ff1361b3dae4eebc0313ce3e5a9298704f8b58f9108bc0a094a41fc06f2908dd490602001610d6c565b611018611fbb565b6110215f6122f1565b565b60015433906001600160a01b031681146110605760405163118cdaa760e01b81526001600160a01b03821660048201526024015b60405180910390fd5b611069816122f1565b50565b611074611fbb565b6001600160a01b03821661109b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0382165f818152600a6020908152604091829020805460ff19168515159081179091558251938452908301527f969bb7542263e82515f30263de146111e882f6d42fc244c9624a924b2d197790910160405180910390a15050565b335f908152600a602052604090205460ff1661112c576040516318e59f8760e31b815260040160405180910390fd5b60a082205f8181526006602052604090206001810180547fffffffffff0000000000000000000000ffffffffffffffffffffffffffffffff16600160801b62ffffff86160267ffffffffffffffff60981b191617600160981b4267ffffffffffffffff160217905550606092909201515f928352600d6020526040909220805462ffffff191662ffffff9093169290921790915550565b6002546001600160a01b031633146111ee5760405163251cb70160e11b815260040160405180910390fd5b5f868152600d6020526040902054869061120e908290889060020b61230a565b5f61121884612424565b90505f8082600f0b121561123e5761122f82614213565b6112399085614240565b611248565b611248828561425f565b5f84815260066020526040902090915061129e90829061128a907f00000000000000000000000000000000000000000000000000000000000000008b8b612440565b5f8d8152600760205260409020919061257b565b505f851315611379576040805160018082528183019092525f91602080830190803683370190505090507f0000000000000000000000000000000000000000000000000000000000000000815f815181106112fb576112fb6140b1565b60200260200101906001600160a01b031690816001600160a01b03168152505061137360405180608001604052808a60020b81526020018960020b815260200161134489612424565b600f0b81525f878152600d602090815260408083205460020b93820193909352888252600690522090836125ae565b506113de565b6113de60405180608001604052808960020b81526020018860020b81526020016113a288612424565b600f0b81525f868152600d602090815260408083205460020b9382019390935282518281528082018452888352600690915291902091906125ae565b5050505f9687526009602052604090962080546001600160801b0319166001600160801b0390971696909617909555505050505050565b5f611420838361275d565b9392505050565b6060828067ffffffffffffffff81111561144357611443613daa565b60405190808252806020026020018201604052801561146c578160200160208202803683370190505b5091505f5b818110156114c05761149b86868381811061148e5761148e6140b1565b905060200201358561275d565b8382815181106114ad576114ad6140b1565b6020908102919091010152600101611471565b50509392505050565b5f806114d3611f89565b5f84815260056020908152604080832063ffffffff85168452909152902054909150801561150d576115086201518082614292565b61150f565b5f5b949350505050565b6002546001600160a01b031633146115425760405163251cb70160e11b815260040160405180910390fd5b5f868152600d60205260409020548690611562908290879060020b61230a565b5f8181526006602052604090206115b59083906115a1907f00000000000000000000000000000000000000000000000000000000000000008888612440565b5f8b8152600760205260409020919061257b565b506001600160801b0382161561163c5761163c60405180608001604052808660020b81526020018560020b81526020016115f7856001600160801b03166128c3565b61160090614213565b600f0b81525f848152600d602090815260408083205460020b9382019390935282518281528082018452868352600690915291902091906125ae565b61164688876128ef565b5061165281878a611f41565b505050505050505050565b5f80611668426129e4565b9050428111611677575f611420565b61142042826142a5565b5f805f61168d846114c9565b5f8581526006602052604090209093506116c7907f0000000000000000000000000000000000000000000000000000000000000000611f9c565b5f948552600660205260409094206001015492946001600160801b0390931692915050565b6002546040516331a9108f60e11b8152600481018490525f9182916001600160a01b0390911690636352211e90602401602060405180830381865afa158015611737573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061175b919061414d565b9050336001600160a01b0382161461179f576040517fea8e4eb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600254604051637ba03aad60e01b8152600481018690525f916001600160a01b031690637ba03aad9060240160c060405180830381865afa1580156117e6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061180a91906142b8565b5090505f6118198260a0902090565b90505f61182f87835f9182526020526040902090565b905061183b8282611db5565b611846838383611ea8565b61185081876128ef565b5f828152600960205260409020549095506001600160801b031615801561188b57505f818152600f60205260409020546001600160801b0316155b80156118a257505f81815260106020526040902054155b156118b2576118b2828583611f41565b5050505092915050565b6002546001600160a01b031633146118e75760405163251cb70160e11b815260040160405180910390fd5b5f868152600d60205260409020548690611907908290889060020b61230a565b6040805160018082528183019092525f91602080830190803683370190505090507f0000000000000000000000000000000000000000000000000000000000000000815f8151811061195b5761195b6140b1565b60200260200101906001600160a01b031690816001600160a01b0316815250506119dc60405180608001604052808860020b81526020018760020b81526020016119ad876001600160801b03166128c3565b600f0b81525f858152600d602090815260408083205460020b93820193909352868252600690522090836125ae565b6119ec6008600984868d89612a07565b5f898152600c602090815260408083208d90558051808201825260028a810b825289900b8184019081528d8552600b845282852091518254915162ffffff90811663010000000265ffffffffffff1990931691161717905584835260069091529020611a9690611a7e907f00000000000000000000000000000000000000000000000000000000000000008989612440565b5f8b8152600760205260408120918255600190910155565b50505050505050505050565b611aaa611fbb565b600180546001600160a01b0383166001600160a01b03199091168117909155611ada5f546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6002546040516331a9108f60e11b8152600481018390525f916001600160a01b031690636352211e90602401602060405180830381865afa925050508015611b77575060408051601f3d908101601f19168201909252611b749181019061414d565b60015b611b8257505f919050565b600254604051637ba03aad60e01b8152600481018590525f916001600160a01b031690637ba03aad9060240160c060405180830381865afa158015611bc9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bed91906142b8565b5090505f611bfc8260a0902090565b90505f611c1286835f9182526020526040902090565b5f818152600760209081526040808320600990925290912054919250906001600160801b03168015611ce1575f838152600b60209081526040808320855481548986526006909452918420909392611c9b91907f000000000000000000000000000000000000000000000000000000000000000090600281810b9163010000009004900b612440565b611ca591906142a5565b9050600160801b611cbf6001600160801b038516836142e3565b611cc99190614292565b8460010154611cd8919061417c565b98505050611d58565b5f838152600e60205260409020548015611d4e5782545f90611d0390836142a5565b5f868152600f6020526040902054909150600160801b90611d2d906001600160801b0316836142e3565b611d379190614292565b8460010154611d46919061417c565b985050611d56565b826001015497505b505b5050505050505b919050565b5f611d8f7f000000000000000000000000000000000000000000000000000000000000000083612a85565b50505090505f611d9e82612b50565b9050611daf8382866060015161230a565b50505050565b5f8181526010602052604081205490819003611dda57611dd58383612e15565b505050565b5f8281526011602052604090205460c082901c90608083901c9083908067ffffffffffffffff841685108015611e1857506001600160801b03831615155b15611e6f575f611e3d898767ffffffffffffffff168767ffffffffffffffff16611fff565b90508015611e6d575f611e5d6001600160801b038616608084901b614292565b9050611e69818461417c565b9250505b505b5f878152600e60209081526040808320849055601082528083208390556011909152812055611e9e8888612e15565b5050505050505050565b611eb28383611d64565b5f818152600b60209081526040808320600983528184205481548786526006909452919093206001600160801b0390911691611f39918391611f2591907f000000000000000000000000000000000000000000000000000000000000000090600281810b9163010000009004900b612440565b5f868152600760205260409020919061257b565b505050505050565b611f5060086009858585612ec9565b5f908152600b60209081526040808320805465ffffffffffff1916905560078252808320838155600101839055600c9091528120555050565b5f611f976201518042614292565b905090565b6001600160a01b0381165f908152602083905260409020545b92915050565b5f546001600160a01b031633146110215760405163118cdaa760e01b8152336004820152602401611057565b5f611ff562015180836142fa565b611fb590836142a5565b5f82821161200e57505f611420565b5f61201884611fe7565b90505f61202484611fe7565b9050808203612095575f8681526005602052604081208161204485612fa0565b63ffffffff16815260208101919091526040015f205490508015612089576201518061207087876142a5565b61207a90836142e3565b6120849190614292565b61208b565b5f5b9350505050611420565b5f61209f83612fa0565b90505f6120ab83612fa0565b90505f84881115612120575f89815260056020908152604080832063ffffffff8716845290915290205480156121155762015180896120ea828961417c565b6120f491906142a5565b6120fe90836142e3565b6121089190614292565b612112908861417c565b96505b505060018201612123565b50815b5f61212f60018461430d565b90508063ffffffff168263ffffffff161161218e57815b8163ffffffff168163ffffffff161161218c575f8b815260056020908152604080832063ffffffff85168452909152902054612182908961417c565b9750600101612146565b505b848811156121ec575f8a815260056020908152604080832063ffffffff8716845290915290205480156121ea57620151806121c9878b6142a5565b6121d390836142e3565b6121dd9190614292565b6121e7908961417c565b97505b505b5050505050509392505050565b60018301805467ffffffffffffffff60981b1916600160981b4267ffffffffffffffff1602179055611dd5838383612fae565b6001600160801b03811615611daf575f61224e826001600160801b03166128c3565b61225790614213565b90506122658585835f61301c565b5050612274858483600161301c565b50506001850154600160801b9004600290810b9085900b138015906122aa57506001850154600284810b600160801b909204900b125b156122ea5760018501546122c7906001600160801b0316826130a8565b6001860180546001600160801b0319166001600160801b03929092169190911790555b5050505050565b600180546001600160a01b0319169055611069816130cf565b5f83815260066020908152604080832060018082015483518281528085019094529194600160981b90920467ffffffffffffffff16934293919082810190803683370190505090507f0000000000000000000000000000000000000000000000000000000000000000815f81518110612385576123856140b1565b6001600160a01b0392909216602092830291909101909101526040805160018082528183019092525f91816020016020820280368337019050509050838311156123f7576123d4888585611fff565b815f815181106123e6576123e66140b1565b602002602001018181525050612417565b5f815f8151811061240a5761240a6140b1565b6020026020010181815250505b611e9e858383898b61311e565b80600f81900b8114611d5f57611d5f6393dafdf160e01b61324d565b5f8160020b8360020b1261245557505f61150f565b6001850154600284810b600160801b909204900b12156124bc5750600281810b5f908152818601602081815260408084206001600160a01b03891680865260019182018452828620549689900b86529383528185209385529290920190529020540361150f565b6001850154600283810b600160801b909204900b126125225750600282810b5f908152818601602081815260408084206001600160a01b03891680865260019182018452828620549688900b86529383528185209385529290920190529020540361150f565b50600282810b5f908152818601602081815260408084206001600160a01b03891680865260019182018452828620549688900b865293835281852093855292909201815281832054908890529120540303949350505050565b82545f908203612599816001600160801b038616600160801b613255565b60018601805482019055929094555092915050565b604080830151835160208086015184516080810186525f8082529281018390529485018290526060850191909152919290919083600f0b5f14612692576125f78784865f61301c565b6001600160801b0316602083015215158152612616878386600161301c565b6001600160801b031660608301521515604082015280511561265d57606086015161264790600389019085906132f1565b5f84600f0b131561265d5761265d878487613343565b80604001511561269257606086015161267c90600389019084906132f1565b5f84600f0b131561269257612692878387613343565b5f84600f0b12156126d8578051156126b957600283810b5f90815290880160205260408120555b8060400151156126d857600282810b5f90815290880160205260408120555b60018701548651600160801b909104600290810b91900b13801590612714575060208601516001880154600291820b600160801b90910490910b125b15612754576001870154612731906001600160801b0316856130a8565b6001880180546001600160801b0319166001600160801b03929092169190911790555b50505050505050565b5f828152600660209081526040808320600883528184206001600160a01b038616855290925282208054835b818110156118b2575f8382815481106127a4576127a46140b1565b5f918252602080832090910154808352600b825260408084206007909352832082549194509192906128089089907f000000000000000000000000000000000000000000000000000000000000000090600281810b9163010000009004900b612440565b82545f868152600960205260409020549192508203906001600160801b03166128368282600160801b613255565b8460010154612845919061417c565b61284f908c61417c565b9a50806001600160801b03165f036128b2575f868152600e602052604090205480156128b05784545f888152600f6020526040902054908203906128a29082906001600160801b0316600160801b613255565b6128ac908e61417c565b9c50505b505b505050505050806001019050612789565b5f6f8000000000000000000000000000000082106128eb576128eb6393dafdf160e01b61324d565b5090565b5f82815260076020526040812060010180549190558015611fb55760405163a9059cbb60e01b81526001600160a01b038381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303815f875af1158015612976573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061299a91906141dc565b50816001600160a01b03167fd8138f8a3f377c5259ca548e70e4c2de94f129f5a11036a15b69513cba2b426a826040516129d691815260200190565b60405180910390a292915050565b5f620151806129f381846142fa565b6129fd90846142a5565b611fb5919061417c565b5f828152602086905260408120546001600160801b03169003612a54575f848152602087815260408083206001600160a01b03871684528252822080546001810182559083529120018290555b5f9182526020949094526040902080546001600160801b0319166001600160801b0390941693909317909255505050565b5f805f805f612a93866133c6565b6040517f1e2eaeaf000000000000000000000000000000000000000000000000000000008152600481018290529091505f906001600160a01b03891690631e2eaeaf90602401602060405180830381865afa158015612af4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b189190614329565b90506001600160a01b03811695508060a01c60020b945062ffffff8160b81c16935062ffffff8160d01c169250505092959194509250565b5f73fffd8963efd1fc6a506488495d951d51639616826401000276a21983016001600160a01b03161115612ba857612ba87f614875240000000000000000000000000000000000000000000000000000000083613402565b77ffffffffffffffffffffffffffffffffffffffff00000000602083901b16805f612bd282613417565b60ff16905060808110612bed57607f810383901c9150612bf7565b80607f0383901b91505b908002607f81811c60ff83811c9190911c800280831c81831c1c800280841c81841c1c800280851c81851c1c800280861c81861c1c800280871c81871c1c800280881c81881c1c800280891c81891c1c8002808a1c818a1c1c8002808b1c818b1c1c8002808c1c818c1c1c8002808d1c818d1c1c8002808e1c9c81901c9c909c1c80029c8d901c9e9d607f198f0160401b60c09190911c678000000000000000161760c19b909b1c674000000000000000169a909a1760c29990991c672000000000000000169890981760c39790971c671000000000000000169690961760c49590951c670800000000000000169490941760c59390931c670400000000000000169290921760c69190911c670200000000000000161760c79190911c670100000000000000161760c89190911c6680000000000000161760c99190911c6640000000000000161760ca9190911c6620000000000000161760cb9190911c6610000000000000161760cc9190911c6608000000000000161760cd9190911c66040000000000001617693627a301d71055774c8581027ffffffffffffffffffffffffffffffffffd709b7e5480fba5a50fed5e62ffc5568101608090811d906fdb2df09e81959a81455e260799a0632f8301901d600281810b9083900b14612e0657886001600160a01b0316612deb826134a2565b6001600160a01b03161115612e005781612e08565b80612e08565b815b9998505050505050505050565b5f818152600f60205260408120546001600160801b031690819003612e3957505050565b5f828152600e602090815260408083205460079092528220805491929091612e6190846142a5565b90508015612e9c57612e8181856001600160801b0316600160801b613255565b826001015f828254612e93919061417c565b90915550508282555b5050505f91825250600f6020908152604080832080546001600160801b0319169055600e90915281205550565b5f8181526020858152604080832080546001600160801b03191690558583528782528083206001600160a01b03861684529091528120805490915b81811015611e9e5783838281548110612f1f57612f1f6140b1565b905f5260205f20015403612f985782612f396001846142a5565b81548110612f4957612f496140b1565b905f5260205f200154838281548110612f6457612f646140b1565b905f5260205f20018190555082805480612f8057612f80614340565b600190038181905f5260205f20015f90559055611e9e565b600101612f04565b5f611fb56201518083614292565b805f03612fba57505050565b60018301546001600160801b03165f03612fd357505050565b60018301546001600160801b0316608082901b81612ff357612ff361427e565b6001600160a01b039093165f908152602094909452604090932080549390920492909201905550565b600283810b5f9081529085016020526040812080548291906001600160801b03811690600160801b9004600f0b61305382886130a8565b6001600160801b0380821615908416151415955093505f8661307e576130798883614354565b613088565b6130888883614393565b90508060801b6001600160801b0386161784555050505094509492505050565b6001600160801b038216600f82900b01608081901c15611fb5576393dafdf15f526004601cfd5b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001850154600160981b900467ffffffffffffffff165f03613196576001850180547fffffffffff0000000000000000000000ffffffffffffffffffffffffffffffff16600160801b62ffffff84160267ffffffffffffffff60981b191617600160981b4267ffffffffffffffff16021790556122ea565b60018501805467ffffffffffffffff4216600160981b0267ffffffffffffffff60981b19821681179092556001600160801b03918216911617156132285783515f5b818110156132255761321d878783815181106131f6576131f66140b1565b6020026020010151878481518110613210576132106140b1565b6020026020010151612fae565b6001016131d8565b50505b6001850154600282810b600160801b909204900b146122ea576122ea85838387613773565b805f5260045ffd5b5f838302815f1985870982811083820303915050808411613274575f80fd5b805f0361328657508290049050611420565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b600291820b910b8082071561331e5760405163d4d8f3e681528260208201528160408201526044601c8201fd5b80820591508160081d5f528260205260405f20600160ff84161b815418815550505050565b6001830154600160801b9004600290810b9083900b13611dd557600282810b5f90815290840160205260408120905b82518110156122ea575f83828151811061338e5761338e6140b1565b6020908102919091018101516001600160a01b03165f9081528782526040808220546001808801909452912055919091019050613372565b6040515f906133e5908390600690602001918252602082015260400190565b604051602081830303815290604052805190602001209050919050565b815f526001600160a01b03811660045260245ffd5b5f808211613423575f80fd5b507f0706060506020500060203020504000106050205030304010505030400000000601f6f8421084210842108cc6318c6db6d54be6001600160801b03841160071b84811c67ffffffffffffffff1060061b1784811c63ffffffff1060051b1784811c61ffff1060041b1784811c60ff1060031b1793841c1c161a1790565b60020b5f60ff82901d80830118620d89e88111156134e4576134e47f8b86327a00000000000000000000000000000000000000000000000000000000846138bb565b7001fffcb933bd6fad37aa2d162d1a5940016001821602600160801b186002821615613520576ffff97272373d413259a46990580e213a0260801c5b600482161561353f576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b600882161561355e576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b601082161561357d576fffcb9843d60f6159c9db58835c9266440260801c5b602082161561359c576fff973b41fa98c081472e6896dfb254c00260801c5b60408216156135bb576fff2ea16466c96a3843ec78b326b528610260801c5b60808216156135da576ffe5dee046a99a2a811c461f1969c30530260801c5b6101008216156135fa576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b61020082161561361a576ff987a7253ac413176f2b074cf7815e540260801c5b61040082161561363a576ff3392b0822b70005940c7a398e4b70f30260801c5b61080082161561365a576fe7159475a2c29b7443b29c7fa6e889d90260801c5b61100082161561367a576fd097f3bdfd2022b8845ad8f792aa58250260801c5b61200082161561369a576fa9f746462d870fdf8a65dc1f90e061e50260801c5b6140008216156136ba576f70d869a156d2a1b890bb3df62baf32f70260801c5b6180008216156136da576f31be135f97d08fd981231505542fcfa60260801c5b620100008216156136fb576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b6202000082161561371b576e5d6af8dedb81196699c329225ee6040260801c5b6204000082161561373a576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615613757576b048a170391f7dc42444e8fa20260801c5b5f841315613763575f19045b63ffffffff0160201c9392505050565b6001840154600160801b9004600290810b905f9084900b8212801590613807575b8260020b8560020b1215613802575f806137b460038a01868a60016138ca565b915091508660020b8260020b136137cc575050613869565b80156137ee575f6137de8a84896139b7565b90506137ea8186614393565b9450505b6137f96001836143d2565b94505050613794565b613869565b8460020b8360020b1215613869575f8061382660038a01868a846138ca565b915091508660020b8260020b131561383f575050613869565b8015613861575f6138518a84896139b7565b905061385d8186614354565b9450505b509250613807565b60018701805462ffffff8716600160801b027fffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffff82168117909255612731916001600160801b03908116911617836130a8565b815f528060020b60045260245ffd5b5f80600284810b9086900b818107831391900503831561394957600281900b60081d600181900b5f908152602089905260409020545f1960ff808516908190039190911c91821680151595509091908561392b57888360ff1686030261393e565b8861393582613417565b840360ff168603025b9650505050506139ad565b6001908101600281900b60081d80830b5f90815260208a905260409020545f1960ff841694851b01199081168015159550929391928561399357888360ff0360ff168601026139a6565b888361399e83613a5b565b0360ff168601025b9650505050505b5094509492505050565b600282810b5f9081529084016020526040812080546001600160801b031682036139e4575f915050611420565b5f5b8351811015613a47575f848281518110613a0257613a026140b1565b6020908102919091018101516001600160a01b03165f9081526001808601808452604080842080548d87529190942054919094529290920390559190910190506139e6565b5054600160801b9004600f0b949350505050565b5f808211613a67575f80fd5b507e1f0d1e100c1d070f090b19131c1706010e11080a1a141802121b15031604055f8290039091166101e07f804040554300526644320000502061067405302602000010750620017611707760fc7fb6db6db6ddddddddd34d34d349249249210842108c6318c639ce739cffffffff840260f81c161b60f71c1690811c63d76453e004601f169190911a1790565b5f60a0828403128015613b06575f80fd5b509092915050565b5f8083601f840112613b1e575f80fd5b50813567ffffffffffffffff811115613b35575f80fd5b6020830191508360208260051b8501011115613b4f575f80fd5b9250929050565b6001600160a01b0381168114611069575f80fd5b5f805f60408486031215613b7c575f80fd5b833567ffffffffffffffff811115613b92575f80fd5b613b9e86828701613b0e565b9094509250506020840135613bb281613b56565b809150509250925092565b5f8060408385031215613bce575f80fd5b50508035926020909101359150565b5f8060208385031215613bee575f80fd5b823567ffffffffffffffff811115613c04575f80fd5b613c1085828601613b0e565b90969095509350505050565b5f8151808452602084019350602083015f5b82811015613c4c578151865260209586019590910190600101613c2e565b5093949350505050565b606081525f613c686060830186613c1c565b8281036020840152613c7a8186613c1c565b8381036040850152845180825260208087019350909101905f5b81811015613cbb5783516001600160801b0316835260209384019390920191600101613c94565b5090979650505050505050565b5f60208284031215613cd8575f80fd5b813561142081613b56565b8060020b8114611069575f80fd5b80356001600160801b0381168114611d5f575f80fd5b5f805f805f8060c08789031215613d1c575f80fd5b8635955060208701359450604087013593506060870135613d3c81613ce3565b92506080870135613d4c81613ce3565b9150613d5a60a08801613cf1565b90509295509295509295565b8015158114611069575f80fd5b5f8060408385031215613d84575f80fd5b8235613d8f81613b56565b91506020830135613d9f81613d66565b809150509250929050565b634e487b7160e01b5f52604160045260245ffd5b60405160a0810167ffffffffffffffff81118282101715613ded57634e487b7160e01b5f52604160045260245ffd5b60405290565b62ffffff81168114611069575f80fd5b5f60a08284031215613e13575f80fd5b613e1b613dbe565b90508135613e2881613b56565b81526020820135613e3881613b56565b60208201526040820135613e4b81613df3565b60408201526060820135613e5e81613ce3565b60608201526080820135613e7181613b56565b608082015292915050565b5f8060c08385031215613e8d575f80fd5b613e978484613e03565b915060a0830135613d9f81613ce3565b5f805f805f805f80610100898b031215613ebf575f80fd5b8835975060208901359650604089013595506060890135613edf81613ce3565b94506080890135613eef81613ce3565b935060a0890135613eff81613ce3565b925060c08901359150613f1460e08a01613cf1565b90509295985092959890939650565b5f60208284031215613f33575f80fd5b5035919050565b5f8060408385031215613f4b575f80fd5b823591506020830135613d9f81613b56565b602081525f6114206020830184613c1c565b5f805f805f805f80610100898b031215613f87575f80fd5b8835975060208901359650604089013595506060890135613fa781613b56565b94506080890135613fb781613ce3565b935060a0890135613fc781613ce3565b925060c0890135613fd781613ce3565b9150613f1460e08a01613cf1565b5f805f805f805f80610100898b031215613ffd575f80fd5b883597506020890135965060408901359550606089013561401d81613ce3565b9450608089013561402d81613ce3565b935060a089013561403d81613ce3565b925061404b60c08a01613cf1565b915060e089013561405b81613b56565b809150509295985092959890939650565b5f806040838503121561407d575f80fd5b82359150602083013563ffffffff81168114613d9f575f80fd5b5f60a082840312156140a7575f80fd5b6114208383613e03565b634e487b7160e01b5f52603260045260245ffd5b5f60a082840312156140d5575f80fd5b6140dd613dbe565b905081516140ea81613b56565b815260208201516140fa81613b56565b6020820152604082015161410d81613df3565b6040820152606082015161412081613ce3565b60608201526080820151613e7181613b56565b5f60a08284031215614143575f80fd5b61142083836140c5565b5f6020828403121561415d575f80fd5b815161142081613b56565b634e487b7160e01b5f52601160045260245ffd5b80820180821115611fb557611fb5614168565b604080825281018390525f8460608301825b868110156141bf5782358252602092830192909101906001016141a1565b5080925050506001600160a01b0383166020830152949350505050565b5f602082840312156141ec575f80fd5b815161142081613d66565b63ffffffff8181168382160190811115611fb557611fb5614168565b5f81600f0b6f7fffffffffffffffffffffffffffffff19810361423857614238614168565b5f0392915050565b6001600160801b038181168382160190811115611fb557611fb5614168565b6001600160801b038281168282160390811115611fb557611fb5614168565b634e487b7160e01b5f52601260045260245ffd5b5f826142a0576142a061427e565b500490565b81810381811115611fb557611fb5614168565b5f8060c083850312156142c9575f80fd5b6142d384846140c5565b915060a083015190509250929050565b8082028115828204841417611fb557611fb5614168565b5f826143085761430861427e565b500690565b63ffffffff8281168282160390811115611fb557611fb5614168565b5f60208284031215614339575f80fd5b5051919050565b634e487b7160e01b5f52603160045260245ffd5b600f81810b9083900b016f7fffffffffffffffffffffffffffffff81136f7fffffffffffffffffffffffffffffff1982121715611fb557611fb5614168565b600f82810b9082900b036f7fffffffffffffffffffffffffffffff1981126f7fffffffffffffffffffffffffffffff82131715611fb557611fb5614168565b600282810b9082900b03627fffff198112627fffff82131715611fb557611fb561416856fea26469706673582212200d1db752e04412572d4e4bc302e2a7516f8117706afca397722c055bc1bd92c964736f6c634300081a00330000000000000000000000000000000000000000000000000000000000000000000000000000000000000000498581ff718922c3f8e6a244956af099b2652b2b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000feffc73269e2b2b2b0e1f00badc594797aaa30cc000000000000000000000000548f93779fbc992010c07467cbaf329dd5f059b70000000000000000000000005848646d84a2ff6bb63f8508e5fed1b46daca32a