{"abi":[{"type":"constructor","inputs":[{"name":"_manager","type":"address","internalType":"contract IPoolManager"},{"name":"_wsteth","type":"address","internalType":"contract IWstETH"}],"stateMutability":"nonpayable"},{"type":"function","name":"afterAddLiquidity","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"key","type":"tuple","internalType":"struct PoolKey","components":[{"name":"currency0","type":"address","internalType":"Currency"},{"name":"currency1","type":"address","internalType":"Currency"},{"name":"fee","type":"uint24","internalType":"uint24"},{"name":"tickSpacing","type":"int24","internalType":"int24"},{"name":"hooks","type":"address","internalType":"contract IHooks"}]},{"name":"params","type":"tuple","internalType":"struct ModifyLiquidityParams","components":[{"name":"tickLower","type":"int24","internalType":"int24"},{"name":"tickUpper","type":"int24","internalType":"int24"},{"name":"liquidityDelta","type":"int256","internalType":"int256"},{"name":"salt","type":"bytes32","internalType":"bytes32"}]},{"name":"delta","type":"int256","internalType":"BalanceDelta"},{"name":"feesAccrued","type":"int256","internalType":"BalanceDelta"},{"name":"hookData","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"},{"name":"","type":"int256","internalType":"BalanceDelta"}],"stateMutability":"nonpayable"},{"type":"function","name":"afterDonate","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"key","type":"tuple","internalType":"struct PoolKey","components":[{"name":"currency0","type":"address","internalType":"Currency"},{"name":"currency1","type":"address","internalType":"Currency"},{"name":"fee","type":"uint24","internalType":"uint24"},{"name":"tickSpacing","type":"int24","internalType":"int24"},{"name":"hooks","type":"address","internalType":"contract IHooks"}]},{"name":"amount0","type":"uint256","internalType":"uint256"},{"name":"amount1","type":"uint256","internalType":"uint256"},{"name":"hookData","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"nonpayable"},{"type":"function","name":"afterInitialize","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"key","type":"tuple","internalType":"struct PoolKey","components":[{"name":"currency0","type":"address","internalType":"Currency"},{"name":"currency1","type":"address","internalType":"Currency"},{"name":"fee","type":"uint24","internalType":"uint24"},{"name":"tickSpacing","type":"int24","internalType":"int24"},{"name":"hooks","type":"address","internalType":"contract IHooks"}]},{"name":"sqrtPriceX96","type":"uint160","internalType":"uint160"},{"name":"tick","type":"int24","internalType":"int24"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"nonpayable"},{"type":"function","name":"afterRemoveLiquidity","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"key","type":"tuple","internalType":"struct PoolKey","components":[{"name":"currency0","type":"address","internalType":"Currency"},{"name":"currency1","type":"address","internalType":"Currency"},{"name":"fee","type":"uint24","internalType":"uint24"},{"name":"tickSpacing","type":"int24","internalType":"int24"},{"name":"hooks","type":"address","internalType":"contract IHooks"}]},{"name":"params","type":"tuple","internalType":"struct ModifyLiquidityParams","components":[{"name":"tickLower","type":"int24","internalType":"int24"},{"name":"tickUpper","type":"int24","internalType":"int24"},{"name":"liquidityDelta","type":"int256","internalType":"int256"},{"name":"salt","type":"bytes32","internalType":"bytes32"}]},{"name":"delta","type":"int256","internalType":"BalanceDelta"},{"name":"feesAccrued","type":"int256","internalType":"BalanceDelta"},{"name":"hookData","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"},{"name":"","type":"int256","internalType":"BalanceDelta"}],"stateMutability":"nonpayable"},{"type":"function","name":"afterSwap","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"key","type":"tuple","internalType":"struct PoolKey","components":[{"name":"currency0","type":"address","internalType":"Currency"},{"name":"currency1","type":"address","internalType":"Currency"},{"name":"fee","type":"uint24","internalType":"uint24"},{"name":"tickSpacing","type":"int24","internalType":"int24"},{"name":"hooks","type":"address","internalType":"contract IHooks"}]},{"name":"params","type":"tuple","internalType":"struct SwapParams","components":[{"name":"zeroForOne","type":"bool","internalType":"bool"},{"name":"amountSpecified","type":"int256","internalType":"int256"},{"name":"sqrtPriceLimitX96","type":"uint160","internalType":"uint160"}]},{"name":"delta","type":"int256","internalType":"BalanceDelta"},{"name":"hookData","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"},{"name":"","type":"int128","internalType":"int128"}],"stateMutability":"nonpayable"},{"type":"function","name":"beforeAddLiquidity","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"key","type":"tuple","internalType":"struct PoolKey","components":[{"name":"currency0","type":"address","internalType":"Currency"},{"name":"currency1","type":"address","internalType":"Currency"},{"name":"fee","type":"uint24","internalType":"uint24"},{"name":"tickSpacing","type":"int24","internalType":"int24"},{"name":"hooks","type":"address","internalType":"contract IHooks"}]},{"name":"params","type":"tuple","internalType":"struct ModifyLiquidityParams","components":[{"name":"tickLower","type":"int24","internalType":"int24"},{"name":"tickUpper","type":"int24","internalType":"int24"},{"name":"liquidityDelta","type":"int256","internalType":"int256"},{"name":"salt","type":"bytes32","internalType":"bytes32"}]},{"name":"hookData","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"nonpayable"},{"type":"function","name":"beforeDonate","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"key","type":"tuple","internalType":"struct PoolKey","components":[{"name":"currency0","type":"address","internalType":"Currency"},{"name":"currency1","type":"address","internalType":"Currency"},{"name":"fee","type":"uint24","internalType":"uint24"},{"name":"tickSpacing","type":"int24","internalType":"int24"},{"name":"hooks","type":"address","internalType":"contract IHooks"}]},{"name":"amount0","type":"uint256","internalType":"uint256"},{"name":"amount1","type":"uint256","internalType":"uint256"},{"name":"hookData","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"nonpayable"},{"type":"function","name":"beforeInitialize","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"key","type":"tuple","internalType":"struct PoolKey","components":[{"name":"currency0","type":"address","internalType":"Currency"},{"name":"currency1","type":"address","internalType":"Currency"},{"name":"fee","type":"uint24","internalType":"uint24"},{"name":"tickSpacing","type":"int24","internalType":"int24"},{"name":"hooks","type":"address","internalType":"contract IHooks"}]},{"name":"sqrtPriceX96","type":"uint160","internalType":"uint160"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"nonpayable"},{"type":"function","name":"beforeRemoveLiquidity","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"key","type":"tuple","internalType":"struct PoolKey","components":[{"name":"currency0","type":"address","internalType":"Currency"},{"name":"currency1","type":"address","internalType":"Currency"},{"name":"fee","type":"uint24","internalType":"uint24"},{"name":"tickSpacing","type":"int24","internalType":"int24"},{"name":"hooks","type":"address","internalType":"contract IHooks"}]},{"name":"params","type":"tuple","internalType":"struct ModifyLiquidityParams","components":[{"name":"tickLower","type":"int24","internalType":"int24"},{"name":"tickUpper","type":"int24","internalType":"int24"},{"name":"liquidityDelta","type":"int256","internalType":"int256"},{"name":"salt","type":"bytes32","internalType":"bytes32"}]},{"name":"hookData","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"nonpayable"},{"type":"function","name":"beforeSwap","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"key","type":"tuple","internalType":"struct PoolKey","components":[{"name":"currency0","type":"address","internalType":"Currency"},{"name":"currency1","type":"address","internalType":"Currency"},{"name":"fee","type":"uint24","internalType":"uint24"},{"name":"tickSpacing","type":"int24","internalType":"int24"},{"name":"hooks","type":"address","internalType":"contract IHooks"}]},{"name":"params","type":"tuple","internalType":"struct SwapParams","components":[{"name":"zeroForOne","type":"bool","internalType":"bool"},{"name":"amountSpecified","type":"int256","internalType":"int256"},{"name":"sqrtPriceLimitX96","type":"uint160","internalType":"uint160"}]},{"name":"hookData","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"},{"name":"","type":"int256","internalType":"BeforeSwapDelta"},{"name":"","type":"uint24","internalType":"uint24"}],"stateMutability":"nonpayable"},{"type":"function","name":"getHookPermissions","inputs":[],"outputs":[{"name":"","type":"tuple","internalType":"struct Hooks.Permissions","components":[{"name":"beforeInitialize","type":"bool","internalType":"bool"},{"name":"afterInitialize","type":"bool","internalType":"bool"},{"name":"beforeAddLiquidity","type":"bool","internalType":"bool"},{"name":"afterAddLiquidity","type":"bool","internalType":"bool"},{"name":"beforeRemoveLiquidity","type":"bool","internalType":"bool"},{"name":"afterRemoveLiquidity","type":"bool","internalType":"bool"},{"name":"beforeSwap","type":"bool","internalType":"bool"},{"name":"afterSwap","type":"bool","internalType":"bool"},{"name":"beforeDonate","type":"bool","internalType":"bool"},{"name":"afterDonate","type":"bool","internalType":"bool"},{"name":"beforeSwapReturnDelta","type":"bool","internalType":"bool"},{"name":"afterSwapReturnDelta","type":"bool","internalType":"bool"},{"name":"afterAddLiquidityReturnDelta","type":"bool","internalType":"bool"},{"name":"afterRemoveLiquidityReturnDelta","type":"bool","internalType":"bool"}]}],"stateMutability":"pure"},{"type":"function","name":"poolManager","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IPoolManager"}],"stateMutability":"view"},{"type":"function","name":"underlyingCurrency","inputs":[],"outputs":[{"name":"","type":"address","internalType":"Currency"}],"stateMutability":"view"},{"type":"function","name":"wrapZeroForOne","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"wrapperCurrency","inputs":[],"outputs":[{"name":"","type":"address","internalType":"Currency"}],"stateMutability":"view"},{"type":"function","name":"wstETH","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IWstETH"}],"stateMutability":"view"},{"type":"error","name":"DeltaNotNegative","inputs":[{"name":"currency","type":"address","internalType":"Currency"}]},{"type":"error","name":"DeltaNotPositive","inputs":[{"name":"currency","type":"address","internalType":"Currency"}]},{"type":"error","name":"ExactInputNotSupported","inputs":[]},{"type":"error","name":"ExactOutputNotSupported","inputs":[]},{"type":"error","name":"HookNotImplemented","inputs":[]},{"type":"error","name":"InsufficientBalance","inputs":[]},{"type":"error","name":"InvalidPoolFee","inputs":[]},{"type":"error","name":"InvalidPoolToken","inputs":[]},{"type":"error","name":"LiquidityNotAllowed","inputs":[]},{"type":"error","name":"NotPoolManager","inputs":[]}],"bytecode":{"object":"0x610120604052348015610010575f80fd5b5060405161238138038061238183398101604081905261002f916103d5565b8181826001600160a01b031663c1fe3e486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561006d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610091919061040d565b6001600160a01b038316608052826100a8306100e3565b506001600160a01b0391821660a081905290821660c081905290811060e0529083166101008190526100dc92505f196101d6565b505061042f565b6101d3816101ce604080516101c0810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081019190915250604080516101c08101825260018082525f60208301819052928201819052606082018390526080820183905260a0820183905260c0820181905260e0820183905261010082018390526101208201839052610140820152610160810182905261018081018290526101a081019190915290565b61025c565b50565b5f60405163095ea7b360e01b81526001600160a01b038416600482015282602482015260205f6044835f895af13d15601f3d1160015f5114161716915050806102565760405162461bcd60e51b815260206004820152600e60248201526d1054141493d59157d1905253115160921b604482015260640160405180910390fd5b50505050565b80511515612000831615151415806102805750602081015115156110008316151514155b806102975750604081015115156108008316151514155b806102ae5750606081015115156104008316151514155b806102c55750608081015115156102008316151514155b806102dc575060a081015115156101008316151514155b806102f2575060c0810151151560808316151514155b80610308575060e0810151151560408316151514155b8061031f5750610100810151151560208316151514155b806103365750610120810151151560108316151514155b8061034d5750610140810151151560088316151514155b806103645750610160810151151560048316151514155b8061037b5750610180810151151560028316151514155b8061039257506101a0810151151560018316151514155b156103a8576103a8630732d7b560e51b836103ac565b5050565b815f526001600160a01b03811660045260245ffd5b6001600160a01b03811681146101d3575f80fd5b5f80604083850312156103e6575f80fd5b82516103f1816103c1565b6020840151909250610402816103c1565b809150509250929050565b5f6020828403121561041d575f80fd5b8151610428816103c1565b9392505050565b60805160a05160c05160e05161010051611e4361053e5f395f81816101ac01528181610d1801528181610ebb0152818161100901526110e801525f8181610229015281816109b70152610b6901525f818161010401528181610bf701528181610db701528181610e0b015281816111d10152818161124101526112ce01525f818161041301528181610b9e01528181610f41015261108e01525f818161043a015281816104880152818161050f0152818161058e0152818161061d015281816106ac01528181610732015281816107bf01528181610848015281816111a4015281816112a4015281816113ca01528181611477015281816114eb0152818161158c01526116830152611e435ff3fe608060405234801561000f575f80fd5b50600436106100fb575f3560e01c80639f063efc11610093578063d52f63cf11610063578063d52f63cf1461040e578063dc4c90d314610435578063dc98354e1461045c578063e1b4af6914610307575f80fd5b80639f063efc1461025b578063b47b2fb1146102b9578063b6a8b0fa14610307578063c4e833ce1461031a575f80fd5b8063575e24b4116100ce578063575e24b4146101ce5780635d5711a5146102245780636c2bbe7e1461025b5780636fe7e6eb146102a6575f80fd5b80630bc6bffc146100ff57806321d0ee7014610150578063259982e5146101945780634aa07e64146101a7575b5f80fd5b6101267f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61016361015e366004611903565b61046f565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610147565b6101636101a2366004611903565b6104f6565b6101267f000000000000000000000000000000000000000000000000000000000000000081565b6101e16101dc36600461198a565b610573565b604080517fffffffff000000000000000000000000000000000000000000000000000000009094168452602084019290925262ffffff1690820152606001610147565b61024b7f000000000000000000000000000000000000000000000000000000000000000081565b6040519015158152602001610147565b61026e6102693660046119e4565b610603565b604080517fffffffff000000000000000000000000000000000000000000000000000000009093168352602083019190915201610147565b6101636102b4366004611a6f565b610693565b6102cc6102c7366004611ace565b610718565b604080517fffffffff000000000000000000000000000000000000000000000000000000009093168352600f9190910b602083015201610147565b610163610315366004611b4f565b6107a6565b610401604080516101c0810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081019190915250604080516101c08101825260018082525f60208301819052928201819052606082018390526080820183905260a0820183905260c0820181905260e0820183905261010082018390526101208201839052610140820152610160810182905261018081018290526101a081019190915290565b6040516101479190611ba9565b6101267f000000000000000000000000000000000000000000000000000000000000000081565b6101267f000000000000000000000000000000000000000000000000000000000000000081565b61016361046a366004611cca565b61082f565b5f3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146104df576040517fae18210a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104ec86868686866108b2565b9695505050505050565b5f3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610566576040517fae18210a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104ec86868686866108e5565b5f80803373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146105e5576040517fae18210a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105f28888888888610918565b925092509250955095509592505050565b5f803373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610674576040517fae18210a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61068389898989898989610b31565b9150915097509795505050505050565b5f3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610703576040517fae18210a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61070f858585856108b2565b95945050505050565b5f803373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610789576040517fae18210a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610797888888888888610b31565b91509150965096945050505050565b5f3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610816576040517fae18210a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108248787878787876108b2565b979650505050505050565b5f3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461089f576040517fae18210a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108aa848484610b65565b949350505050565b5f6040517f0a85dc2900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6040517f78895c1300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80806020860135811380801561092c57505f5b15610963576040517f0ace433b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8015801561096f575060015b156109a6576040517f21b865b300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109b36020880188611d11565b15157f0000000000000000000000000000000000000000000000000000000000000000151503610a84575f816109f5576109f08860200135610d12565b610a02565b610a026020890135611d5d565b90505f80610a0f83610db0565b915091505f84610a2f57610a2a610a2584610f6c565b610fa3565b610a44565b610a3b610a2583610f6c565b610a4490611d93565b9050610a79610a568c60200135610fa3565b610a5f90611d93565b60801b6fffffffffffffffffffffffffffffffff83161790565b965050505050610aff565b5f81610a9c57610a978860200135610fd8565b610aa9565b610aa96020890135611d5d565b90505f80610ab683611087565b915091505f84610ad157610acc610a2584610f6c565b610ae6565b610add610a2583610f6c565b610ae690611d93565b9050610af8610a568c60200135610fa3565b9650505050505b507f575e24b40000000000000000000000000000000000000000000000000000000092505f9050955095509592505050565b5f806040517f0a85dc2900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f807f0000000000000000000000000000000000000000000000000000000000000000610c3957610bdb610b9c6020860186611dcf565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff90811691161490565b8015610c345750610c34610bf56040860160208701611dcf565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff90811691161490565b610c63565b610c49610bf56020860186611dcf565b8015610c635750610c63610b9c6040860160208701611dcf565b905080610c9c576040517fdcdedda900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cac6060850160408601611dea565b62ffffff1615610ce8576040517f1213a0ab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b507fdc98354e00000000000000000000000000000000000000000000000000000000949350505050565b5f610daa7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639576a0c86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d7f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610da39190611e0c565b839061134f565b92915050565b5f80610ddd7f0000000000000000000000000000000000000000000000000000000000000000308561136a565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015610e65573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e899190611e0c565b6040517fea598cb0000000000000000000000000000000000000000000000000000000008152600481018290529092507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ea598cb0906024016020604051808303815f875af1158015610f16573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f3a9190611e0c565b9050610f677f00000000000000000000000000000000000000000000000000000000000000003083611426565b915091565b805f811215610f9e57610f9e7f93dafdf10000000000000000000000000000000000000000000000000000000061161d565b919050565b80600f81900b8114610f9e57610f9e7f93dafdf10000000000000000000000000000000000000000000000000000000061161d565b6040517fb0e38900000000000000000000000000000000000000000000000000000000008152600481018290525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063b0e3890090602401602060405180830381865afa158015611063573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610daa9190611e0c565b5f806110b47f0000000000000000000000000000000000000000000000000000000000000000308561136a565b6040517fde0e9a3e000000000000000000000000000000000000000000000000000000008152600481018490528392505f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063de0e9a3e906024016020604051808303815f875af1158015611143573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111679190611e0c565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301529192505f917f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015611216573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061123a9190611e0c565b90506112677f00000000000000000000000000000000000000000000000000000000000000003084611426565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301525f917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015611315573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113399190611e0c565b90506113458282611e23565b9350505050915091565b5f61136383670de0b6b3a764000084611625565b9392505050565b805f0361137657505050565b6040517f0b0d9c0900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301528381166024830152604482018390527f00000000000000000000000000000000000000000000000000000000000000001690630b0d9c09906064015f604051808303815f87803b15801561140b575f80fd5b505af115801561141d573d5f803e3d5ffd5b50505050505050565b805f0361143257505050565b6040517fa584119400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063a5841194906024015f604051808303815f87803b1580156114b8575f80fd5b505af11580156114ca573d5f803e3d5ffd5b5050505073ffffffffffffffffffffffffffffffffffffffff831661157f577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166311da60b4826040518263ffffffff1660e01b815260040160206040518083038185885af1158015611554573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906115799190611e0c565b50505050565b61158a838383611667565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166311da60b46040518163ffffffff1660e01b81526004016020604051808303815f875af11580156115f4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115799190611e0c565b505050565b805f5260045ffd5b5f827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0484118302158202611658575f80fd5b50910281810615159190040190565b61161873ffffffffffffffffffffffffffffffffffffffff84167f0000000000000000000000000000000000000000000000000000000000000000835f836116e8575f805f8085875af19050806116e3576116e3835f7ff4b3b1bc000000000000000000000000000000000000000000000000000000006117a6565b611579565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015282602482015260205f6044835f895af13d15601f3d1160015f511416171691505f81525f60208201525f6040820152508061157957611579847fa9059cbb000000000000000000000000000000000000000000000000000000007ff27f64e4000000000000000000000000000000000000000000000000000000005b6040517f90bfb8650000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff851660048301527fffffffff0000000000000000000000000000000000000000000000000000000084166024830152608060448301526020601f3d018190040260a0810160648401523d608484015290913d5f60a483013e60048260a4018201527fffffffff0000000000000000000000000000000000000000000000000000000084168260c4018201528160e40181fd5b73ffffffffffffffffffffffffffffffffffffffff81168114611895575f80fd5b50565b5f60a082840312156118a8575f80fd5b50919050565b5f608082840312156118a8575f80fd5b5f8083601f8401126118ce575f80fd5b50813567ffffffffffffffff8111156118e5575f80fd5b6020830191508360208285010111156118fc575f80fd5b9250929050565b5f805f805f6101608688031215611918575f80fd5b853561192381611874565b94506119328760208801611898565b93506119418760c088016118ae565b925061014086013567ffffffffffffffff81111561195d575f80fd5b611969888289016118be565b969995985093965092949392505050565b5f606082840312156118a8575f80fd5b5f805f805f610140868803121561199f575f80fd5b85356119aa81611874565b94506119b98760208801611898565b93506119c88760c0880161197a565b925061012086013567ffffffffffffffff81111561195d575f80fd5b5f805f805f805f6101a0888a0312156119fb575f80fd5b8735611a0681611874565b9650611a158960208a01611898565b9550611a248960c08a016118ae565b94506101408801359350610160880135925061018088013567ffffffffffffffff811115611a50575f80fd5b611a5c8a828b016118be565b989b979a50959850939692959293505050565b5f805f806101008587031215611a83575f80fd5b8435611a8e81611874565b9350611a9d8660208701611898565b925060c0850135611aad81611874565b915060e0850135600281900b8114611ac3575f80fd5b939692955090935050565b5f805f805f806101608789031215611ae4575f80fd5b8635611aef81611874565b9550611afe8860208901611898565b9450611b0d8860c0890161197a565b9350610120870135925061014087013567ffffffffffffffff811115611b31575f80fd5b611b3d89828a016118be565b979a9699509497509295939492505050565b5f805f805f806101208789031215611b65575f80fd5b8635611b7081611874565b9550611b7f8860208901611898565b945060c0870135935060e0870135925061010087013567ffffffffffffffff811115611b31575f80fd5b8151151581526101c081016020830151611bc7602084018215159052565b506040830151611bdb604084018215159052565b506060830151611bef606084018215159052565b506080830151611c03608084018215159052565b5060a0830151611c1760a084018215159052565b5060c0830151611c2b60c084018215159052565b5060e0830151611c3f60e084018215159052565b50610100830151611c5561010084018215159052565b50610120830151611c6b61012084018215159052565b50610140830151611c8161014084018215159052565b50610160830151611c9761016084018215159052565b50610180830151611cad61018084018215159052565b506101a0830151611cc36101a084018215159052565b5092915050565b5f805f60e08486031215611cdc575f80fd5b8335611ce781611874565b9250611cf68560208601611898565b915060c0840135611d0681611874565b809150509250925092565b5f60208284031215611d21575f80fd5b81358015158114611363575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f7f80000000000000000000000000000000000000000000000000000000000000008203611d8d57611d8d611d30565b505f0390565b5f81600f0b7fffffffffffffffffffffffffffffffff800000000000000000000000000000008103611dc757611dc7611d30565b5f0392915050565b5f60208284031215611ddf575f80fd5b813561136381611874565b5f60208284031215611dfa575f80fd5b813562ffffff81168114611363575f80fd5b5f60208284031215611e1c575f80fd5b5051919050565b81810381811115610daa57610daa611d3056fea164736f6c634300081a000a","sourceMap":"850:3525:152:-:0;;;1330:395;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1424:8;1468:7;1532;-1:-1:-1;;;;;1532:13:152;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;782:26:144;;;;3175:8:150;879:25:189::1;899:4;879:19;:25::i;:::-;-1:-1:-1::0;;;;;;3195:26:150;;::::1;;::::0;;;3231:32;;::::1;;::::0;;;734:50:120;;;3273:39:150::1;::::0;1602:16:152;;::::1;;::::0;;;1628:90:::1;::::0;-1:-1:-1;;;1628:54:152::1;:90::i;:::-;1330:395:::0;;850:3525;;1555:142:189;1632:58;1662:5;1669:20;850:3525:152;;;;;;;;-1:-1:-1;850:3525:152;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3457:568:150;;;;;;;;3507:4;3457:568;;;-1:-1:-1;3457:568:150;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3354:678;1669:20:189;1632:29;:58::i;:::-;1555:142;:::o;4729:1605:66:-;4840:12;5010:4;5004:11;-1:-1:-1;;;5133:17:66;5126:93;-1:-1:-1;;;;;5270:2:66;5266:51;5262:1;5243:17;5239:25;5232:86;5404:6;5399:2;5380:17;5376:26;5369:42;6256:2;6253:1;6249:2;6230:17;6227:1;6220:5;6213;6208:51;5777:16;5770:24;5764:2;5746:16;5743:24;5739:1;5735;5729:8;5726:15;5722:46;5719:76;5519:754;5508:765;;;6301:7;6293:34;;;;-1:-1:-1;;;6293:34:66;;1093:2:262;6293:34:66;;;1075:21:262;1132:2;1112:18;;;1105:30;-1:-1:-1;;;1151:18:262;;;1144:44;1205:18;;6293:34:66;;;;;;;;4830:1504;4729:1605;;;:::o;3610:1599:89:-;3729:28;;:74;;1397:7;16467:29;;:34;;3729:74;;;:166;;-1:-1:-1;3823:27:89;;;;:72;;1460:7;16467:29;;:34;;3823:72;;3729:166;:265;;;-1:-1:-1;3915:30:89;;;;:79;;1528:7;16467:29;;:34;;3915:79;;3729:265;:362;;;-1:-1:-1;4014:29:89;;;;:77;;1594:7;16467:29;;:34;;4014:77;;3729:362;:467;;;-1:-1:-1;4111:33:89;;;;:85;;1665:6;16467:29;;:34;;4111:85;;3729:467;:570;;;-1:-1:-1;4216:32:89;;;;:83;;1733:6;16467:29;;:34;;4216:83;;3729:570;:652;;;-1:-1:-1;4319:22:89;;;;:62;;1791:6;16467:29;;:34;;4319:62;;3729:652;:732;;;-1:-1:-1;4401:21:89;;;;:60;;1847:6;16467:29;;:34;;4401:60;;3729:732;:818;;;-1:-1:-1;4481:24:89;;;;:66;;1907:6;16467:29;;:34;;4481:66;;3729:818;:902;;;-1:-1:-1;4567:23:89;;;;:64;;1965:6;16467:29;;:34;;4567:64;;3729:902;:1009;;;-1:-1:-1;4651:33:89;;;;:87;;2037:6;16467:29;;:34;;4651:87;;3729:1009;:1114;;;-1:-1:-1;4758:32:89;;;;:85;;2107:6;16467:29;;:34;;4758:85;;3729:1114;:1236;;;-1:-1:-1;4863:40:89;;;;:102;;2186:6;16467:29;;:34;;4863:102;;3729:1236;:1384;;;-1:-1:-1;4985:43:89;;;;:128;;2268:6;16467:29;;:34;;4985:128;;3729:1384;3712:1491;;;5138:54;-1:-1:-1;;;5186:4:89;5138:39;:54::i;:::-;3610:1599;;:::o;1009:257:85:-;1133:8;1130:1;1123:19;-1:-1:-1;;;;;1172:4:85;1168:53;1162:4;1155:67;1245:4;1242:1;1235:15;14:145:262;-1:-1:-1;;;;;103:31:262;;93:42;;83:70;;149:1;146;139:12;164:452;282:6;290;343:2;331:9;322:7;318:23;314:32;311:52;;;359:1;356;349:12;311:52;391:9;385:16;410:45;449:5;410:45;:::i;:::-;524:2;509:18;;503:25;474:5;;-1:-1:-1;537:47:262;503:25;537:47;:::i;:::-;603:7;593:17;;;164:452;;;;;:::o;621:265::-;691:6;744:2;732:9;723:7;719:23;715:32;712:52;;;760:1;757;750:12;712:52;792:9;786:16;811:45;850:5;811:45;:::i;:::-;875:5;621:265;-1:-1:-1;;;621:265:262:o;891:338::-;850:3525:152;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405234801561000f575f80fd5b50600436106100fb575f3560e01c80639f063efc11610093578063d52f63cf11610063578063d52f63cf1461040e578063dc4c90d314610435578063dc98354e1461045c578063e1b4af6914610307575f80fd5b80639f063efc1461025b578063b47b2fb1146102b9578063b6a8b0fa14610307578063c4e833ce1461031a575f80fd5b8063575e24b4116100ce578063575e24b4146101ce5780635d5711a5146102245780636c2bbe7e1461025b5780636fe7e6eb146102a6575f80fd5b80630bc6bffc146100ff57806321d0ee7014610150578063259982e5146101945780634aa07e64146101a7575b5f80fd5b6101267f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61016361015e366004611903565b61046f565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610147565b6101636101a2366004611903565b6104f6565b6101267f000000000000000000000000000000000000000000000000000000000000000081565b6101e16101dc36600461198a565b610573565b604080517fffffffff000000000000000000000000000000000000000000000000000000009094168452602084019290925262ffffff1690820152606001610147565b61024b7f000000000000000000000000000000000000000000000000000000000000000081565b6040519015158152602001610147565b61026e6102693660046119e4565b610603565b604080517fffffffff000000000000000000000000000000000000000000000000000000009093168352602083019190915201610147565b6101636102b4366004611a6f565b610693565b6102cc6102c7366004611ace565b610718565b604080517fffffffff000000000000000000000000000000000000000000000000000000009093168352600f9190910b602083015201610147565b610163610315366004611b4f565b6107a6565b610401604080516101c0810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081019190915250604080516101c08101825260018082525f60208301819052928201819052606082018390526080820183905260a0820183905260c0820181905260e0820183905261010082018390526101208201839052610140820152610160810182905261018081018290526101a081019190915290565b6040516101479190611ba9565b6101267f000000000000000000000000000000000000000000000000000000000000000081565b6101267f000000000000000000000000000000000000000000000000000000000000000081565b61016361046a366004611cca565b61082f565b5f3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146104df576040517fae18210a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104ec86868686866108b2565b9695505050505050565b5f3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610566576040517fae18210a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104ec86868686866108e5565b5f80803373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146105e5576040517fae18210a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105f28888888888610918565b925092509250955095509592505050565b5f803373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610674576040517fae18210a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61068389898989898989610b31565b9150915097509795505050505050565b5f3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610703576040517fae18210a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61070f858585856108b2565b95945050505050565b5f803373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610789576040517fae18210a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610797888888888888610b31565b91509150965096945050505050565b5f3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610816576040517fae18210a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108248787878787876108b2565b979650505050505050565b5f3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461089f576040517fae18210a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108aa848484610b65565b949350505050565b5f6040517f0a85dc2900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6040517f78895c1300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80806020860135811380801561092c57505f5b15610963576040517f0ace433b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8015801561096f575060015b156109a6576040517f21b865b300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109b36020880188611d11565b15157f0000000000000000000000000000000000000000000000000000000000000000151503610a84575f816109f5576109f08860200135610d12565b610a02565b610a026020890135611d5d565b90505f80610a0f83610db0565b915091505f84610a2f57610a2a610a2584610f6c565b610fa3565b610a44565b610a3b610a2583610f6c565b610a4490611d93565b9050610a79610a568c60200135610fa3565b610a5f90611d93565b60801b6fffffffffffffffffffffffffffffffff83161790565b965050505050610aff565b5f81610a9c57610a978860200135610fd8565b610aa9565b610aa96020890135611d5d565b90505f80610ab683611087565b915091505f84610ad157610acc610a2584610f6c565b610ae6565b610add610a2583610f6c565b610ae690611d93565b9050610af8610a568c60200135610fa3565b9650505050505b507f575e24b40000000000000000000000000000000000000000000000000000000092505f9050955095509592505050565b5f806040517f0a85dc2900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f807f0000000000000000000000000000000000000000000000000000000000000000610c3957610bdb610b9c6020860186611dcf565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff90811691161490565b8015610c345750610c34610bf56040860160208701611dcf565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff90811691161490565b610c63565b610c49610bf56020860186611dcf565b8015610c635750610c63610b9c6040860160208701611dcf565b905080610c9c576040517fdcdedda900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cac6060850160408601611dea565b62ffffff1615610ce8576040517f1213a0ab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b507fdc98354e00000000000000000000000000000000000000000000000000000000949350505050565b5f610daa7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639576a0c86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d7f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610da39190611e0c565b839061134f565b92915050565b5f80610ddd7f0000000000000000000000000000000000000000000000000000000000000000308561136a565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015610e65573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e899190611e0c565b6040517fea598cb0000000000000000000000000000000000000000000000000000000008152600481018290529092507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ea598cb0906024016020604051808303815f875af1158015610f16573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f3a9190611e0c565b9050610f677f00000000000000000000000000000000000000000000000000000000000000003083611426565b915091565b805f811215610f9e57610f9e7f93dafdf10000000000000000000000000000000000000000000000000000000061161d565b919050565b80600f81900b8114610f9e57610f9e7f93dafdf10000000000000000000000000000000000000000000000000000000061161d565b6040517fb0e38900000000000000000000000000000000000000000000000000000000008152600481018290525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063b0e3890090602401602060405180830381865afa158015611063573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610daa9190611e0c565b5f806110b47f0000000000000000000000000000000000000000000000000000000000000000308561136a565b6040517fde0e9a3e000000000000000000000000000000000000000000000000000000008152600481018490528392505f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063de0e9a3e906024016020604051808303815f875af1158015611143573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111679190611e0c565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301529192505f917f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015611216573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061123a9190611e0c565b90506112677f00000000000000000000000000000000000000000000000000000000000000003084611426565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301525f917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015611315573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113399190611e0c565b90506113458282611e23565b9350505050915091565b5f61136383670de0b6b3a764000084611625565b9392505050565b805f0361137657505050565b6040517f0b0d9c0900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301528381166024830152604482018390527f00000000000000000000000000000000000000000000000000000000000000001690630b0d9c09906064015f604051808303815f87803b15801561140b575f80fd5b505af115801561141d573d5f803e3d5ffd5b50505050505050565b805f0361143257505050565b6040517fa584119400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063a5841194906024015f604051808303815f87803b1580156114b8575f80fd5b505af11580156114ca573d5f803e3d5ffd5b5050505073ffffffffffffffffffffffffffffffffffffffff831661157f577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166311da60b4826040518263ffffffff1660e01b815260040160206040518083038185885af1158015611554573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906115799190611e0c565b50505050565b61158a838383611667565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166311da60b46040518163ffffffff1660e01b81526004016020604051808303815f875af11580156115f4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115799190611e0c565b505050565b805f5260045ffd5b5f827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0484118302158202611658575f80fd5b50910281810615159190040190565b61161873ffffffffffffffffffffffffffffffffffffffff84167f0000000000000000000000000000000000000000000000000000000000000000835f836116e8575f805f8085875af19050806116e3576116e3835f7ff4b3b1bc000000000000000000000000000000000000000000000000000000006117a6565b611579565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015282602482015260205f6044835f895af13d15601f3d1160015f511416171691505f81525f60208201525f6040820152508061157957611579847fa9059cbb000000000000000000000000000000000000000000000000000000007ff27f64e4000000000000000000000000000000000000000000000000000000005b6040517f90bfb8650000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff851660048301527fffffffff0000000000000000000000000000000000000000000000000000000084166024830152608060448301526020601f3d018190040260a0810160648401523d608484015290913d5f60a483013e60048260a4018201527fffffffff0000000000000000000000000000000000000000000000000000000084168260c4018201528160e40181fd5b73ffffffffffffffffffffffffffffffffffffffff81168114611895575f80fd5b50565b5f60a082840312156118a8575f80fd5b50919050565b5f608082840312156118a8575f80fd5b5f8083601f8401126118ce575f80fd5b50813567ffffffffffffffff8111156118e5575f80fd5b6020830191508360208285010111156118fc575f80fd5b9250929050565b5f805f805f6101608688031215611918575f80fd5b853561192381611874565b94506119328760208801611898565b93506119418760c088016118ae565b925061014086013567ffffffffffffffff81111561195d575f80fd5b611969888289016118be565b969995985093965092949392505050565b5f606082840312156118a8575f80fd5b5f805f805f610140868803121561199f575f80fd5b85356119aa81611874565b94506119b98760208801611898565b93506119c88760c0880161197a565b925061012086013567ffffffffffffffff81111561195d575f80fd5b5f805f805f805f6101a0888a0312156119fb575f80fd5b8735611a0681611874565b9650611a158960208a01611898565b9550611a248960c08a016118ae565b94506101408801359350610160880135925061018088013567ffffffffffffffff811115611a50575f80fd5b611a5c8a828b016118be565b989b979a50959850939692959293505050565b5f805f806101008587031215611a83575f80fd5b8435611a8e81611874565b9350611a9d8660208701611898565b925060c0850135611aad81611874565b915060e0850135600281900b8114611ac3575f80fd5b939692955090935050565b5f805f805f806101608789031215611ae4575f80fd5b8635611aef81611874565b9550611afe8860208901611898565b9450611b0d8860c0890161197a565b9350610120870135925061014087013567ffffffffffffffff811115611b31575f80fd5b611b3d89828a016118be565b979a9699509497509295939492505050565b5f805f805f806101208789031215611b65575f80fd5b8635611b7081611874565b9550611b7f8860208901611898565b945060c0870135935060e0870135925061010087013567ffffffffffffffff811115611b31575f80fd5b8151151581526101c081016020830151611bc7602084018215159052565b506040830151611bdb604084018215159052565b506060830151611bef606084018215159052565b506080830151611c03608084018215159052565b5060a0830151611c1760a084018215159052565b5060c0830151611c2b60c084018215159052565b5060e0830151611c3f60e084018215159052565b50610100830151611c5561010084018215159052565b50610120830151611c6b61012084018215159052565b50610140830151611c8161014084018215159052565b50610160830151611c9761016084018215159052565b50610180830151611cad61018084018215159052565b506101a0830151611cc36101a084018215159052565b5092915050565b5f805f60e08486031215611cdc575f80fd5b8335611ce781611874565b9250611cf68560208601611898565b915060c0840135611d0681611874565b809150509250925092565b5f60208284031215611d21575f80fd5b81358015158114611363575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f7f80000000000000000000000000000000000000000000000000000000000000008203611d8d57611d8d611d30565b505f0390565b5f81600f0b7fffffffffffffffffffffffffffffffff800000000000000000000000000000008103611dc757611dc7611d30565b5f0392915050565b5f60208284031215611ddf575f80fd5b813561136381611874565b5f60208284031215611dfa575f80fd5b813562ffffff81168114611363575f80fd5b5f60208284031215611e1c575f80fd5b5051919050565b81810381811115610daa57610daa611d3056fea164736f6c634300081a000a","sourceMap":"850:3525:152:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2302:44:150;;;;;;;;220:42:262;208:55;;;190:74;;178:2;163:18;2302:44:150;;;;;;;;3093:290:189;;;;;;:::i;:::-;;:::i;:::-;;;2130:66:262;2118:79;;;2100:98;;2088:2;2073:18;3093:290:189;1956:248:262;2560:284:189;;;;;;:::i;:::-;;:::i;1055:31:152:-;;;;;5032:272:189;;;;;;:::i;:::-;;:::i;:::-;;;;3696:66:262;3684:79;;;3666:98;;3795:2;3780:18;;3773:34;;;;3855:8;3843:21;3823:18;;;3816:49;3654:2;3639:18;5032:272:189;3432:439:262;2813:36:150;;;;;;;;4137:14:262;;4130:22;4112:41;;4100:2;4085:18;2813:36:150;3972:187:262;4329:384:189;;;;;;:::i;:::-;;:::i;:::-;;;;5543:66:262;5531:79;;;5513:98;;5642:2;5627:18;;5620:34;;;;5486:18;4329:384:189;5308:352:262;2134:240:189;;;;;;:::i;:::-;;:::i;5559:298::-;;;;;;:::i;:::-;;:::i;:::-;;;;7524:66:262;7512:79;;;7494:98;;7639:2;7628:22;;;;7623:2;7608:18;;7601:50;7467:18;5559:298:189;7324:333:262;6108:285:189;;;;;;:::i;:::-;;:::i;3354:678:150:-;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3457:568:150;;;;;;;;3507:4;3457:568;;;-1:-1:-1;3457:568:150;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3354:678;;;;;;;;:::i;2196:41::-;;;;;411::144;;;;;1730:224:189;;;;;;:::i;:::-;;:::i;3093:290::-;3298:6;650:10:144;:34;672:11;650:34;;646:63;;693:16;;;;;;;;;;;;;;646:63;3323:53:189::1;3346:6;3354:3;3359:6;3367:8;;3323:22;:53::i;:::-;3316:60:::0;3093:290;-1:-1:-1;;;;;;3093:290:189:o;2560:284::-;2762:6;650:10:144;:34;672:11;650:34;;646:63;;693:16;;;;;;;;;;;;;;646:63;2787:50:189::1;2807:6;2815:3;2820:6;2828:8;;2787:19;:50::i;5032:272::-:0;5201:6;;;650:10:144;:34;672:11;650:34;;646:63;;693:16;;;;;;;;;;;;;;646:63;5255:42:189::1;5267:6;5275:3;5280:6;5288:8;;5255:11;:42::i;:::-;5248:49;;;;;;5032:272:::0;;;;;;;;;:::o;4329:384::-;4595:6;;650:10:144;:34;672:11;650:34;;646:63;;693:16;;;;;;;;;;;;;;646:63;4634:72:189::1;4656:6;4664:3;4669:6;4677:5;4684:11;4697:8;;4634:21;:72::i;:::-;4627:79;;;;4329:384:::0;;;;;;;;;;:::o;2134:240::-;2289:6;650:10:144;:34;672:11;650:34;;646:63;;693:16;;;;;;;;;;;;;;646:63;2318:49:189::1;2335:6;2343:3;2348:12;2362:4;2318:16;:49::i;:::-;2311:56:::0;2134:240;-1:-1:-1;;;;;2134:240:189:o;5559:298::-;5769:6;;650:10:144;:34;672:11;650:34;;646:63;;693:16;;;;;;;;;;;;;;646:63;5802:48:189::1;5813:6;5821:3;5826:6;5834:5;5841:8;;5802:10;:48::i;:::-;5795:55;;;;5559:298:::0;;;;;;;;;:::o;6108:285::-;6307:6;650:10:144;:34;672:11;650:34;;646:63;;693:16;;;;;;;;;;;;;;646:63;6332:54:189::1;6346:6;6354:3;6359:7;6368;6377:8;;6332:13;:54::i;:::-;6325:61:::0;6108:285;-1:-1:-1;;;;;;;6108:285:189:o;1730:224::-;1874:6;650:10:144;:34;672:11;650:34;;646:63;;693:16;;;;;;;;;;;;;;646:63;1903:44:189::1;1921:6;1929:3;1934:12;1903:17;:44::i;:::-;1896:51:::0;1730:224;-1:-1:-1;;;;1730:224:189:o;3389:213::-;3546:6;3575:20;;;;;;;;;;;;;;5042:225:150;5210:6;5239:21;;;;;;;;;;;;;;5720:1650;5863:6;;;5940:22;;;;:26;-1:-1:-1;5940:26:150;5980:38;;;;-1:-1:-1;5996:22:150;5980:38;5976:75;;;6027:24;;;;;;;;;;;;;;5976:75;6066:12;6065:13;:40;;;;-1:-1:-1;6082:23:150;6065:40;6061:78;;;6114:25;;;;;;;;;;;;;;6061:78;6172:17;;;;:6;:17;:::i;:::-;6154:35;;:14;:35;;;6150:1154;;6236:19;6274:12;:104;;6324:54;6354:6;:22;;;6324:21;:54::i;:::-;6274:104;;;6297:23;6298:22;;;;6297:23;:::i;:::-;6236:142;;6393:30;6425:21;6450;6459:11;6450:8;:21::i;:::-;6392:79;;;;6485:24;6528:12;:98;;6582:44;:33;:22;:31;:33::i;:::-;:42;:44::i;:::-;6528:98;;;6544:35;:24;:13;:22;:24::i;:35::-;6543:36;;;:::i;:::-;6485:141;;6652:72;6671:33;:6;:22;;;:31;:33::i;:::-;6670:34;;;:::i;:::-;548:3:119;510:24;540:19;536:42;;507:72;;317:270;6652:72:150;6640:84;;6191:544;;;;6150:1154;;;6788:19;6810:12;:138;;6892:56;6924:6;:22;;;6892:23;:56::i;:::-;6810:138;;;6849:23;6850:22;;;;6849:23;:::i;:::-;6788:160;;6963:27;6992:23;7019:22;7029:11;7019:9;:22::i;:::-;6962:79;;;;7055:24;7098:12;:97;;7154:41;:30;:19;:28;:30::i;:41::-;7098:97;;;7114:37;:26;:15;:24;:26::i;:37::-;7113:38;;;:::i;:::-;7055:140;;7221:72;7240:33;:6;:22;;;:31;:33::i;7221:72::-;7209:84;;6741:563;;;;6150:1154;-1:-1:-1;7322:26:150;;-1:-1:-1;7361:1:150;;-1:-1:-1;5720:1650:150;;;;;;;;;:::o;4719:280:189:-;4933:6;4941:12;4972:20;;;;;;;;;;;;;;4304:591:150;4407:6;4504:16;4523:14;:206;;4649:36;:17;;;;:7;:17;:::i;:::-;4670:15;448:51:120;;;;;;;;364:138;4649:36:150;:79;;;;-1:-1:-1;4689:39:150;:17;;;;;;;;:::i;:::-;4710:18;448:51:120;;;;;;;;364:138;4689:39:150;4523:206;;;4553:39;:17;;;;:7;:17;:::i;:39::-;:79;;;;-1:-1:-1;4596:36:150;:17;;;;;;;;:::i;:36::-;4504:225;;4745:11;4740:43;;4765:18;;;;;;;;;;;;;;4740:43;4797:11;;;;;;;;:::i;:::-;:16;;;4793:45;;4822:16;;;;;;;;;;;;;;4793:45;-1:-1:-1;4856:32:150;;4304:591;-1:-1:-1;;;;4304:591:150:o;3591:166:152:-;3677:7;3703:47;3726:6;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3703:13;;:22;:47::i;:::-;3696:54;3591:166;-1:-1:-1;;3591:166:152:o;1772:629::-;1883:30;1915:21;1952:58;1958:18;1986:4;1993:16;1952:5;:58::i;:::-;2118:68;;;;;2180:4;2118:68;;;190:74:262;2141:18:152;2118:53;;;;;163:18:262;;2118:68:152;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2295:35;;;;;;;;13198:25:262;;;2093:93:152;;-1:-1:-1;2295:6:152;:11;;;;;13171:18:262;;2295:35:152;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2279:51;;2340:54;2348:15;2373:4;2380:13;2340:7;:54::i;:::-;1772:629;;;:::o;1776:151:98:-;1859:1;1828:8;1875:5;;1871:49;;;1882:38;:25;:36;:38::i;:::-;1776:151;;;:::o;1460:::-;1542:1;1558:6;;;;;;1554:50;;1566:38;:25;:36;:38::i;4062:165:152:-;4179:41;;;;;;;;13198:25:262;;;4153:7:152;;4179:6;:23;;;;;13171:18:262;;4179:41:152;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;2448:841::-;2541:27;2570:29;2615:52;2621:15;2646:4;2653:13;2615:5;:52::i;:::-;2748:34;;;;;;;;13198:25:262;;;2699:13:152;;-1:-1:-1;2722:23:152;;2748:6;:13;;;;;13171:18:262;;2748:34:152;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2934:75;;;;;:53;2996:11;208:55:262;;2934:75:152;;;190:74:262;2722:60:152;;-1:-1:-1;;;2957:18:152;2934:53;;;;163:18:262;;2934:75:152;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2899:110;;3019:59;3027:18;3055:4;3062:15;3019:7;:59::i;:::-;3122:75;;;;;:53;3184:11;208:55:262;;3122:75:152;;;190:74:262;-1:-1:-1;;3145:18:152;3122:53;;;;;;163:18:262;;3122:75:152;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3088:109;-1:-1:-1;3232:50:152;3258:24;3088:109;3232:50;:::i;:::-;3208:74;;2605:684;;;2448:841;;;:::o;1208:158:65:-;1271:7;1297:19;1306:1;655:4;1314:1;1297:8;:19::i;:::-;1290:26;1208:158;-1:-1:-1;;;1208:158:65:o;1270:173:141:-;1362:6;1372:1;1362:11;1358:24;;1270:173;;;:::o;1358:24::-;1391:45;;;;;:16;13617:55:262;;;1391:45:141;;;13599:74:262;13709:55;;;13689:18;;;13682:83;13781:18;;;13774:34;;;1391:11:141;:16;;;;13572:18:262;;1391:45:141;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1270:173;;;:::o;1766:346::-;1856:6;1866:1;1856:11;1852:24;;1766:346;;;:::o;1852:24::-;1886:26;;;;;:16;208:55:262;;;1886:26:141;;;190:74:262;1886:11:141;:16;;;;163:18:262;;1886:26:141;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;1926:22:141;;;1922:184;;1966:11;:18;;;1992:6;1966:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1766:346;;;:::o;1922:184::-;2032:29;2037:8;2047:5;2054:6;2032:4;:29::i;:::-;2075:11;:18;;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;1922:184::-;1766:346;;;:::o;753:163:85:-;863:8;860:1;853:19;895:4;892:1;885:15;2096:672:65;2210:9;2458:1;2445:11;2441:19;2438:1;2435:26;2432:1;2428:34;2421:42;2408:11;2404:60;2394:116;;2494:1;2491;2484:12;2394:116;-1:-1:-1;2728:9:65;;2691:27;;;2688:34;;2724:27;;;2684:68;;2096:672::o;7551:134:150:-;7634:44;:14;;;7657:11;7671:6;1743:12:120;4998:58;1765:2574;;1956:1;1953;1950;1947;1939:6;1935:2;1928:5;1923:35;1912:46;;2086:7;2081:127;;2113:80;2148:2;2159:1;2163:29;2113:34;:80::i;:::-;1765:2574;;;2352:4;2346:11;2488:66;2483:3;2476:79;2600:42;2596:2;2592:51;2588:1;2583:3;2579:11;2572:72;2720:6;2715:2;2710:3;2706:12;2699:28;3649:2;3646:1;3642:2;3637:3;3634:1;3624:8;3617:5;3612:40;3141:16;3134:24;3128:2;3110:16;3107:24;3103:1;3099;3093:8;3090:15;3086:46;3083:76;2859:815;2828:846;;3752:1;3747:3;3740:14;3853:1;3846:4;3841:3;3837:14;3830:25;3956:1;3949:4;3944:3;3940:14;3933:25;;4125:7;4120:209;;4152:162;4224:8;4235:31;4268:28;3508:1663:85;3953:4;3947:11;3710:21;4094:33;;;4186:42;4163:66;;4156:4;4147:14;;4140:90;4330:66;4299:98;;4276:4;4267:14;;4243:168;4483:4;4476;4467:14;;4460:28;3919:2;3909;3891:16;3887:25;3883:34;;;3879:43;4569:4;4565:26;;4558:4;4549:14;;4542:50;4662:16;4655:4;4646:14;;4639:40;3710:21;;4755:16;-1:-1:-1;4745:4:85;4736:14;;4721:51;4869:4;4850:15;4844:4;4840:26;4835:3;4831:36;4824:50;5022:66;5003:17;4999:90;4964:15;4958:4;4954:26;4949:3;4945:36;4921:182;5138:15;5132:4;5128:26;5123:3;5116:39;275:154:262;361:42;354:5;350:54;343:5;340:65;330:93;;419:1;416;409:12;330:93;275:154;:::o;434:156::-;494:5;539:3;530:6;525:3;521:16;517:26;514:46;;;556:1;553;546:12;514:46;-1:-1:-1;578:6:262;434:156;-1:-1:-1;434:156:262:o;595:170::-;669:5;714:3;705:6;700:3;696:16;692:26;689:46;;;731:1;728;721:12;770:347;821:8;831:6;885:3;878:4;870:6;866:17;862:27;852:55;;903:1;900;893:12;852:55;-1:-1:-1;926:20:262;;969:18;958:30;;955:50;;;1001:1;998;991:12;955:50;1038:4;1030:6;1026:17;1014:29;;1090:3;1083:4;1074:6;1066;1062:19;1058:30;1055:39;1052:59;;;1107:1;1104;1097:12;1052:59;770:347;;;;;:::o;1122:829::-;1289:6;1297;1305;1313;1321;1374:3;1362:9;1353:7;1349:23;1345:33;1342:53;;;1391:1;1388;1381:12;1342:53;1430:9;1417:23;1449:31;1474:5;1449:31;:::i;:::-;1499:5;-1:-1:-1;1523:63:262;1578:7;1573:2;1558:18;;1523:63;:::i;:::-;1513:73;;1605:78;1675:7;1669:3;1658:9;1654:19;1605:78;:::i;:::-;1595:88;;1734:3;1723:9;1719:19;1706:33;1762:18;1754:6;1751:30;1748:50;;;1794:1;1791;1784:12;1748:50;1833:58;1883:7;1874:6;1863:9;1859:22;1833:58;:::i;:::-;1122:829;;;;-1:-1:-1;1122:829:262;;-1:-1:-1;1910:8:262;;1807:84;1122:829;-1:-1:-1;;;1122:829:262:o;2457:158::-;2520:5;2565:2;2556:6;2551:3;2547:16;2543:25;2540:45;;;2581:1;2578;2571:12;2620:807;2776:6;2784;2792;2800;2808;2861:3;2849:9;2840:7;2836:23;2832:33;2829:53;;;2878:1;2875;2868:12;2829:53;2917:9;2904:23;2936:31;2961:5;2936:31;:::i;:::-;2986:5;-1:-1:-1;3010:63:262;3065:7;3060:2;3045:18;;3010:63;:::i;:::-;3000:73;;3092:67;3151:7;3145:3;3134:9;3130:19;3092:67;:::i;:::-;3082:77;;3210:3;3199:9;3195:19;3182:33;3238:18;3230:6;3227:30;3224:50;;;3270:1;3267;3260:12;4164:1139;4417:6;4425;4433;4441;4449;4457;4465;4518:3;4506:9;4497:7;4493:23;4489:33;4486:53;;;4535:1;4532;4525:12;4486:53;4574:9;4561:23;4593:31;4618:5;4593:31;:::i;:::-;4643:5;-1:-1:-1;4667:63:262;4722:7;4717:2;4702:18;;4667:63;:::i;:::-;4657:73;;4749:78;4819:7;4813:3;4802:9;4798:19;4749:78;:::i;:::-;4739:88;-1:-1:-1;4900:3:262;4885:19;;4872:33;;-1:-1:-1;5004:3:262;4989:19;;4976:33;;-1:-1:-1;5086:3:262;5071:19;;5058:33;5114:18;5103:30;;5100:50;;;5146:1;5143;5136:12;5100:50;5185:58;5235:7;5226:6;5215:9;5211:22;5185:58;:::i;:::-;4164:1139;;;;-1:-1:-1;4164:1139:262;;-1:-1:-1;4164:1139:262;;;;5159:84;;-1:-1:-1;;;4164:1139:262:o;5665:687::-;5777:6;5785;5793;5801;5854:3;5842:9;5833:7;5829:23;5825:33;5822:53;;;5871:1;5868;5861:12;5822:53;5910:9;5897:23;5929:31;5954:5;5929:31;:::i;:::-;5979:5;-1:-1:-1;6003:63:262;6058:7;6053:2;6038:18;;6003:63;:::i;:::-;5993:73;;6118:3;6107:9;6103:19;6090:33;6132;6157:7;6132:33;:::i;:::-;6184:7;-1:-1:-1;6243:3:262;6228:19;;6215:33;6290:1;6279:22;;;6267:35;;6257:63;;6316:1;6313;6306:12;6257:63;5665:687;;;;-1:-1:-1;5665:687:262;;-1:-1:-1;;5665:687:262:o;6357:962::-;6556:6;6564;6572;6580;6588;6596;6649:3;6637:9;6628:7;6624:23;6620:33;6617:53;;;6666:1;6663;6656:12;6617:53;6705:9;6692:23;6724:31;6749:5;6724:31;:::i;:::-;6774:5;-1:-1:-1;6798:63:262;6853:7;6848:2;6833:18;;6798:63;:::i;:::-;6788:73;;6880:67;6939:7;6933:3;6922:9;6918:19;6880:67;:::i;:::-;6870:77;-1:-1:-1;7020:3:262;7005:19;;6992:33;;-1:-1:-1;7102:3:262;7087:19;;7074:33;7130:18;7119:30;;7116:50;;;7162:1;7159;7152:12;7116:50;7201:58;7251:7;7242:6;7231:9;7227:22;7201:58;:::i;:::-;6357:962;;;;-1:-1:-1;6357:962:262;;-1:-1:-1;6357:962:262;;7278:8;;6357:962;-1:-1:-1;;;6357:962:262:o;7662:915::-;7796:6;7804;7812;7820;7828;7836;7889:3;7877:9;7868:7;7864:23;7860:33;7857:53;;;7906:1;7903;7896:12;7857:53;7945:9;7932:23;7964:31;7989:5;7964:31;:::i;:::-;8014:5;-1:-1:-1;8038:63:262;8093:7;8088:2;8073:18;;8038:63;:::i;:::-;8028:73;-1:-1:-1;8174:3:262;8159:19;;8146:33;;-1:-1:-1;8278:3:262;8263:19;;8250:33;;-1:-1:-1;8360:3:262;8345:19;;8332:33;8388:18;8377:30;;8374:50;;;8420:1;8417;8410:12;8582:1801;8805:13;;3946;3939:21;3927:34;;8776:3;8761:19;;8877:4;8869:6;8865:17;8859:24;8892:51;8937:4;8926:9;8922:20;8908:12;3946:13;3939:21;3927:34;;3876:91;8892:51;;8992:4;8984:6;8980:17;8974:24;9007:53;9054:4;9043:9;9039:20;9023:14;3946:13;3939:21;3927:34;;3876:91;9007:53;;9109:4;9101:6;9097:17;9091:24;9124:53;9171:4;9160:9;9156:20;9140:14;3946:13;3939:21;3927:34;;3876:91;9124:53;;9226:4;9218:6;9214:17;9208:24;9241:53;9288:4;9277:9;9273:20;9257:14;3946:13;3939:21;3927:34;;3876:91;9241:53;;9343:4;9335:6;9331:17;9325:24;9358:53;9405:4;9394:9;9390:20;9374:14;3946:13;3939:21;3927:34;;3876:91;9358:53;;9460:4;9452:6;9448:17;9442:24;9475:53;9522:4;9511:9;9507:20;9491:14;3946:13;3939:21;3927:34;;3876:91;9475:53;;9577:4;9569:6;9565:17;9559:24;9592:53;9639:4;9628:9;9624:20;9608:14;3946:13;3939:21;3927:34;;3876:91;9592:53;;9694:6;9686;9682:19;9676:26;9711:55;9758:6;9747:9;9743:22;9727:14;3946:13;3939:21;3927:34;;3876:91;9711:55;;9815:6;9807;9803:19;9797:26;9832:55;9879:6;9868:9;9864:22;9848:14;3946:13;3939:21;3927:34;;3876:91;9832:55;;9936:6;9928;9924:19;9918:26;9953:55;10000:6;9989:9;9985:22;9969:14;3946:13;3939:21;3927:34;;3876:91;9953:55;;10058:6;10050;10046:19;10040:26;10075:56;10123:6;10112:9;10108:22;10091:15;3946:13;3939:21;3927:34;;3876:91;10075:56;;10181:6;10173;10169:19;10163:26;10198:56;10246:6;10235:9;10231:22;10214:15;3946:13;3939:21;3927:34;;3876:91;10198:56;;10304:6;10296;10292:19;10286:26;10321:56;10369:6;10358:9;10354:22;10337:15;3946:13;3939:21;3927:34;;3876:91;10321:56;;8582:1801;;;;:::o;10641:517::-;10746:6;10754;10762;10815:3;10803:9;10794:7;10790:23;10786:33;10783:53;;;10832:1;10829;10822:12;10783:53;10871:9;10858:23;10890:31;10915:5;10890:31;:::i;:::-;10940:5;-1:-1:-1;10964:63:262;11019:7;11014:2;10999:18;;10964:63;:::i;:::-;10954:73;;11079:3;11068:9;11064:19;11051:33;11093;11118:7;11093:33;:::i;:::-;11145:7;11135:17;;;10641:517;;;;;:::o;11163:273::-;11219:6;11272:2;11260:9;11251:7;11247:23;11243:32;11240:52;;;11288:1;11285;11278:12;11240:52;11327:9;11314:23;11380:5;11373:13;11366:21;11359:5;11356:32;11346:60;;11402:1;11399;11392:12;11441:184;11493:77;11490:1;11483:88;11590:4;11587:1;11580:15;11614:4;11611:1;11604:15;11630:191;11665:3;11696:66;11689:5;11686:77;11683:103;;11766:18;;:::i;:::-;-1:-1:-1;11806:1:262;11802:13;;11630:191::o;11826:240::-;11861:3;11909:5;11905:2;11894:21;11939:66;11930:7;11927:79;11924:105;;12009:18;;:::i;:::-;12049:1;12045:15;;11826:240;-1:-1:-1;;11826:240:262:o;12071:277::-;12160:6;12213:2;12201:9;12192:7;12188:23;12184:32;12181:52;;;12229:1;12226;12219:12;12181:52;12268:9;12255:23;12287:31;12312:5;12287:31;:::i;12353:274::-;12411:6;12464:2;12452:9;12443:7;12439:23;12435:32;12432:52;;;12480:1;12477;12470:12;12432:52;12519:9;12506:23;12569:8;12562:5;12558:20;12551:5;12548:31;12538:59;;12593:1;12590;12583:12;12632:184;12702:6;12755:2;12743:9;12734:7;12730:23;12726:32;12723:52;;;12771:1;12768;12761:12;12723:52;-1:-1:-1;12794:16:262;;12632:184;-1:-1:-1;12632:184:262:o;13234:128::-;13301:9;;;13322:11;;;13319:37;;;13336:18;;:::i","linkReferences":{},"immutableReferences":{"66153":[{"start":1082,"length":32},{"start":1160,"length":32},{"start":1295,"length":32},{"start":1422,"length":32},{"start":1565,"length":32},{"start":1708,"length":32},{"start":1842,"length":32},{"start":1983,"length":32},{"start":2120,"length":32},{"start":4516,"length":32},{"start":4772,"length":32},{"start":5066,"length":32},{"start":5239,"length":32},{"start":5355,"length":32},{"start":5516,"length":32},{"start":5763,"length":32}],"66570":[{"start":1043,"length":32},{"start":2974,"length":32},{"start":3905,"length":32},{"start":4238,"length":32}],"66574":[{"start":260,"length":32},{"start":3063,"length":32},{"start":3511,"length":32},{"start":3595,"length":32},{"start":4561,"length":32},{"start":4673,"length":32},{"start":4814,"length":32}],"66577":[{"start":553,"length":32},{"start":2487,"length":32},{"start":2921,"length":32}],"67126":[{"start":428,"length":32},{"start":3352,"length":32},{"start":3771,"length":32},{"start":4105,"length":32},{"start":4328,"length":32}]}},"methodIdentifiers":{"afterAddLiquidity(address,(address,address,uint24,int24,address),(int24,int24,int256,bytes32),int256,int256,bytes)":"9f063efc","afterDonate(address,(address,address,uint24,int24,address),uint256,uint256,bytes)":"e1b4af69","afterInitialize(address,(address,address,uint24,int24,address),uint160,int24)":"6fe7e6eb","afterRemoveLiquidity(address,(address,address,uint24,int24,address),(int24,int24,int256,bytes32),int256,int256,bytes)":"6c2bbe7e","afterSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),int256,bytes)":"b47b2fb1","beforeAddLiquidity(address,(address,address,uint24,int24,address),(int24,int24,int256,bytes32),bytes)":"259982e5","beforeDonate(address,(address,address,uint24,int24,address),uint256,uint256,bytes)":"b6a8b0fa","beforeInitialize(address,(address,address,uint24,int24,address),uint160)":"dc98354e","beforeRemoveLiquidity(address,(address,address,uint24,int24,address),(int24,int24,int256,bytes32),bytes)":"21d0ee70","beforeSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),bytes)":"575e24b4","getHookPermissions()":"c4e833ce","poolManager()":"dc4c90d3","underlyingCurrency()":"0bc6bffc","wrapZeroForOne()":"5d5711a5","wrapperCurrency()":"d52f63cf","wstETH()":"4aa07e64"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IPoolManager\",\"name\":\"_manager\",\"type\":\"address\"},{\"internalType\":\"contract IWstETH\",\"name\":\"_wsteth\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"Currency\",\"name\":\"currency\",\"type\":\"address\"}],\"name\":\"DeltaNotNegative\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"Currency\",\"name\":\"currency\",\"type\":\"address\"}],\"name\":\"DeltaNotPositive\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExactInputNotSupported\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExactOutputNotSupported\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"HookNotImplemented\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidPoolFee\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidPoolToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LiquidityNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotPoolManager\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"Currency\",\"name\":\"currency0\",\"type\":\"address\"},{\"internalType\":\"Currency\",\"name\":\"currency1\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"},{\"internalType\":\"int24\",\"name\":\"tickSpacing\",\"type\":\"int24\"},{\"internalType\":\"contract IHooks\",\"name\":\"hooks\",\"type\":\"address\"}],\"internalType\":\"struct PoolKey\",\"name\":\"key\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"},{\"internalType\":\"int256\",\"name\":\"liquidityDelta\",\"type\":\"int256\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"}],\"internalType\":\"struct ModifyLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"},{\"internalType\":\"BalanceDelta\",\"name\":\"delta\",\"type\":\"int256\"},{\"internalType\":\"BalanceDelta\",\"name\":\"feesAccrued\",\"type\":\"int256\"},{\"internalType\":\"bytes\",\"name\":\"hookData\",\"type\":\"bytes\"}],\"name\":\"afterAddLiquidity\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"},{\"internalType\":\"BalanceDelta\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"Currency\",\"name\":\"currency0\",\"type\":\"address\"},{\"internalType\":\"Currency\",\"name\":\"currency1\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"},{\"internalType\":\"int24\",\"name\":\"tickSpacing\",\"type\":\"int24\"},{\"internalType\":\"contract IHooks\",\"name\":\"hooks\",\"type\":\"address\"}],\"internalType\":\"struct PoolKey\",\"name\":\"key\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"hookData\",\"type\":\"bytes\"}],\"name\":\"afterDonate\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"Currency\",\"name\":\"currency0\",\"type\":\"address\"},{\"internalType\":\"Currency\",\"name\":\"currency1\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"},{\"internalType\":\"int24\",\"name\":\"tickSpacing\",\"type\":\"int24\"},{\"internalType\":\"contract IHooks\",\"name\":\"hooks\",\"type\":\"address\"}],\"internalType\":\"struct PoolKey\",\"name\":\"key\",\"type\":\"tuple\"},{\"internalType\":\"uint160\",\"name\":\"sqrtPriceX96\",\"type\":\"uint160\"},{\"internalType\":\"int24\",\"name\":\"tick\",\"type\":\"int24\"}],\"name\":\"afterInitialize\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"Currency\",\"name\":\"currency0\",\"type\":\"address\"},{\"internalType\":\"Currency\",\"name\":\"currency1\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"},{\"internalType\":\"int24\",\"name\":\"tickSpacing\",\"type\":\"int24\"},{\"internalType\":\"contract IHooks\",\"name\":\"hooks\",\"type\":\"address\"}],\"internalType\":\"struct PoolKey\",\"name\":\"key\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"},{\"internalType\":\"int256\",\"name\":\"liquidityDelta\",\"type\":\"int256\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"}],\"internalType\":\"struct ModifyLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"},{\"internalType\":\"BalanceDelta\",\"name\":\"delta\",\"type\":\"int256\"},{\"internalType\":\"BalanceDelta\",\"name\":\"feesAccrued\",\"type\":\"int256\"},{\"internalType\":\"bytes\",\"name\":\"hookData\",\"type\":\"bytes\"}],\"name\":\"afterRemoveLiquidity\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"},{\"internalType\":\"BalanceDelta\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"Currency\",\"name\":\"currency0\",\"type\":\"address\"},{\"internalType\":\"Currency\",\"name\":\"currency1\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"},{\"internalType\":\"int24\",\"name\":\"tickSpacing\",\"type\":\"int24\"},{\"internalType\":\"contract IHooks\",\"name\":\"hooks\",\"type\":\"address\"}],\"internalType\":\"struct PoolKey\",\"name\":\"key\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"zeroForOne\",\"type\":\"bool\"},{\"internalType\":\"int256\",\"name\":\"amountSpecified\",\"type\":\"int256\"},{\"internalType\":\"uint160\",\"name\":\"sqrtPriceLimitX96\",\"type\":\"uint160\"}],\"internalType\":\"struct SwapParams\",\"name\":\"params\",\"type\":\"tuple\"},{\"internalType\":\"BalanceDelta\",\"name\":\"delta\",\"type\":\"int256\"},{\"internalType\":\"bytes\",\"name\":\"hookData\",\"type\":\"bytes\"}],\"name\":\"afterSwap\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"},{\"internalType\":\"int128\",\"name\":\"\",\"type\":\"int128\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"Currency\",\"name\":\"currency0\",\"type\":\"address\"},{\"internalType\":\"Currency\",\"name\":\"currency1\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"},{\"internalType\":\"int24\",\"name\":\"tickSpacing\",\"type\":\"int24\"},{\"internalType\":\"contract IHooks\",\"name\":\"hooks\",\"type\":\"address\"}],\"internalType\":\"struct PoolKey\",\"name\":\"key\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"},{\"internalType\":\"int256\",\"name\":\"liquidityDelta\",\"type\":\"int256\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"}],\"internalType\":\"struct ModifyLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"hookData\",\"type\":\"bytes\"}],\"name\":\"beforeAddLiquidity\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"Currency\",\"name\":\"currency0\",\"type\":\"address\"},{\"internalType\":\"Currency\",\"name\":\"currency1\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"},{\"internalType\":\"int24\",\"name\":\"tickSpacing\",\"type\":\"int24\"},{\"internalType\":\"contract IHooks\",\"name\":\"hooks\",\"type\":\"address\"}],\"internalType\":\"struct PoolKey\",\"name\":\"key\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"hookData\",\"type\":\"bytes\"}],\"name\":\"beforeDonate\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"Currency\",\"name\":\"currency0\",\"type\":\"address\"},{\"internalType\":\"Currency\",\"name\":\"currency1\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"},{\"internalType\":\"int24\",\"name\":\"tickSpacing\",\"type\":\"int24\"},{\"internalType\":\"contract IHooks\",\"name\":\"hooks\",\"type\":\"address\"}],\"internalType\":\"struct PoolKey\",\"name\":\"key\",\"type\":\"tuple\"},{\"internalType\":\"uint160\",\"name\":\"sqrtPriceX96\",\"type\":\"uint160\"}],\"name\":\"beforeInitialize\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"Currency\",\"name\":\"currency0\",\"type\":\"address\"},{\"internalType\":\"Currency\",\"name\":\"currency1\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"},{\"internalType\":\"int24\",\"name\":\"tickSpacing\",\"type\":\"int24\"},{\"internalType\":\"contract IHooks\",\"name\":\"hooks\",\"type\":\"address\"}],\"internalType\":\"struct PoolKey\",\"name\":\"key\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"},{\"internalType\":\"int256\",\"name\":\"liquidityDelta\",\"type\":\"int256\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"}],\"internalType\":\"struct ModifyLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"hookData\",\"type\":\"bytes\"}],\"name\":\"beforeRemoveLiquidity\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"Currency\",\"name\":\"currency0\",\"type\":\"address\"},{\"internalType\":\"Currency\",\"name\":\"currency1\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"},{\"internalType\":\"int24\",\"name\":\"tickSpacing\",\"type\":\"int24\"},{\"internalType\":\"contract IHooks\",\"name\":\"hooks\",\"type\":\"address\"}],\"internalType\":\"struct PoolKey\",\"name\":\"key\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"zeroForOne\",\"type\":\"bool\"},{\"internalType\":\"int256\",\"name\":\"amountSpecified\",\"type\":\"int256\"},{\"internalType\":\"uint160\",\"name\":\"sqrtPriceLimitX96\",\"type\":\"uint160\"}],\"internalType\":\"struct SwapParams\",\"name\":\"params\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"hookData\",\"type\":\"bytes\"}],\"name\":\"beforeSwap\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"},{\"internalType\":\"BeforeSwapDelta\",\"name\":\"\",\"type\":\"int256\"},{\"internalType\":\"uint24\",\"name\":\"\",\"type\":\"uint24\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getHookPermissions\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"beforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"afterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"beforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"afterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"beforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"afterRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"beforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"afterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"beforeDonate\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"afterDonate\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"beforeSwapReturnDelta\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"afterSwapReturnDelta\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"afterAddLiquidityReturnDelta\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"afterRemoveLiquidityReturnDelta\",\"type\":\"bool\"}],\"internalType\":\"struct Hooks.Permissions\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"poolManager\",\"outputs\":[{\"internalType\":\"contract IPoolManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"underlyingCurrency\",\"outputs\":[{\"internalType\":\"Currency\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wrapZeroForOne\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wrapperCurrency\",\"outputs\":[{\"internalType\":\"Currency\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wstETH\",\"outputs\":[{\"internalType\":\"contract IWstETH\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Implements dynamic exchange rate wrapping/unwrapping between stETH and wstETHwstETH represents stETH with accrued staking rewards, maintaining a dynamic exchange rate\",\"errors\":{\"InvalidPoolFee()\":[{\"details\":\"Fee must be 0 as wrapper pools don't charge fees\"}],\"InvalidPoolToken()\":[{\"details\":\"Pool must contain exactly one wrapper token and its underlying token\"}],\"LiquidityNotAllowed()\":[{\"details\":\"Liquidity operations are blocked since all liquidity is managed by the token wrapper\"}]},\"kind\":\"dev\",\"methods\":{\"afterAddLiquidity(address,(address,address,uint24,int24,address),(int24,int24,int256,bytes32),int256,int256,bytes)\":{\"params\":{\"delta\":\"The caller's balance delta after adding liquidity; the sum of principal delta, fees accrued, and hook delta\",\"feesAccrued\":\"The fees accrued since the last time fees were collected from this position\",\"hookData\":\"Arbitrary data handed into the PoolManager by the liquidity provider to be passed on to the hook\",\"key\":\"The key for the pool\",\"params\":\"The parameters for adding liquidity\",\"sender\":\"The initial msg.sender for the add liquidity call\"},\"returns\":{\"_0\":\"bytes4 The function selector for the hook\",\"_1\":\"BalanceDelta The hook's delta in token0 and token1. Positive: the hook is owed/took currency, negative: the hook owes/sent currency\"}},\"afterDonate(address,(address,address,uint24,int24,address),uint256,uint256,bytes)\":{\"params\":{\"amount0\":\"The amount of token0 being donated\",\"amount1\":\"The amount of token1 being donated\",\"hookData\":\"Arbitrary data handed into the PoolManager by the donor to be be passed on to the hook\",\"key\":\"The key for the pool\",\"sender\":\"The initial msg.sender for the donate call\"},\"returns\":{\"_0\":\"bytes4 The function selector for the hook\"}},\"afterInitialize(address,(address,address,uint24,int24,address),uint160,int24)\":{\"params\":{\"key\":\"The key for the pool being initialized\",\"sender\":\"The initial msg.sender for the initialize call\",\"sqrtPriceX96\":\"The sqrt(price) of the pool as a Q64.96\",\"tick\":\"The current tick after the state of a pool is initialized\"},\"returns\":{\"_0\":\"bytes4 The function selector for the hook\"}},\"afterRemoveLiquidity(address,(address,address,uint24,int24,address),(int24,int24,int256,bytes32),int256,int256,bytes)\":{\"params\":{\"delta\":\"The caller's balance delta after removing liquidity; the sum of principal delta, fees accrued, and hook delta\",\"feesAccrued\":\"The fees accrued since the last time fees were collected from this position\",\"hookData\":\"Arbitrary data handed into the PoolManager by the liquidity provider to be be passed on to the hook\",\"key\":\"The key for the pool\",\"params\":\"The parameters for removing liquidity\",\"sender\":\"The initial msg.sender for the remove liquidity call\"},\"returns\":{\"_0\":\"bytes4 The function selector for the hook\",\"_1\":\"BalanceDelta The hook's delta in token0 and token1. Positive: the hook is owed/took currency, negative: the hook owes/sent currency\"}},\"afterSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),int256,bytes)\":{\"params\":{\"delta\":\"The amount owed to the caller (positive) or owed to the pool (negative)\",\"hookData\":\"Arbitrary data handed into the PoolManager by the swapper to be be passed on to the hook\",\"key\":\"The key for the pool\",\"params\":\"The parameters for the swap\",\"sender\":\"The initial msg.sender for the swap call\"},\"returns\":{\"_0\":\"bytes4 The function selector for the hook\",\"_1\":\"int128 The hook's delta in unspecified currency. Positive: the hook is owed/took currency, negative: the hook owes/sent currency\"}},\"beforeAddLiquidity(address,(address,address,uint24,int24,address),(int24,int24,int256,bytes32),bytes)\":{\"params\":{\"hookData\":\"Arbitrary data handed into the PoolManager by the liquidity provider to be passed on to the hook\",\"key\":\"The key for the pool\",\"params\":\"The parameters for adding liquidity\",\"sender\":\"The initial msg.sender for the add liquidity call\"},\"returns\":{\"_0\":\"bytes4 The function selector for the hook\"}},\"beforeDonate(address,(address,address,uint24,int24,address),uint256,uint256,bytes)\":{\"params\":{\"amount0\":\"The amount of token0 being donated\",\"amount1\":\"The amount of token1 being donated\",\"hookData\":\"Arbitrary data handed into the PoolManager by the donor to be be passed on to the hook\",\"key\":\"The key for the pool\",\"sender\":\"The initial msg.sender for the donate call\"},\"returns\":{\"_0\":\"bytes4 The function selector for the hook\"}},\"beforeInitialize(address,(address,address,uint24,int24,address),uint160)\":{\"params\":{\"key\":\"The key for the pool being initialized\",\"sender\":\"The initial msg.sender for the initialize call\",\"sqrtPriceX96\":\"The sqrt(price) of the pool as a Q64.96\"},\"returns\":{\"_0\":\"bytes4 The function selector for the hook\"}},\"beforeRemoveLiquidity(address,(address,address,uint24,int24,address),(int24,int24,int256,bytes32),bytes)\":{\"params\":{\"hookData\":\"Arbitrary data handed into the PoolManager by the liquidity provider to be be passed on to the hook\",\"key\":\"The key for the pool\",\"params\":\"The parameters for removing liquidity\",\"sender\":\"The initial msg.sender for the remove liquidity call\"},\"returns\":{\"_0\":\"bytes4 The function selector for the hook\"}},\"beforeSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),bytes)\":{\"params\":{\"hookData\":\"Arbitrary data handed into the PoolManager by the swapper to be be passed on to the hook\",\"key\":\"The key for the pool\",\"params\":\"The parameters for the swap\",\"sender\":\"The initial msg.sender for the swap call\"},\"returns\":{\"_0\":\"bytes4 The function selector for the hook\",\"_1\":\"BeforeSwapDelta The hook's delta in specified and unspecified currencies. Positive: the hook is owed/took currency, negative: the hook owes/sent currency\",\"_2\":\"uint24 Optionally override the lp fee, only used if three conditions are met: 1. the Pool has a dynamic fee, 2. the value's 2nd highest bit is set (23rd bit, 0x400000), and 3. the value is less than or equal to the maximum fee (1 million)\"}},\"constructor\":{\"details\":\"Initializes with wstETH as wrapper token and stETH as underlying token\",\"params\":{\"_manager\":\"The Uniswap V4 pool manager\",\"_wsteth\":\"The wstETH contract address\"}},\"getHookPermissions()\":{\"details\":\"Used at deployment to validate the address correctly represents the expected permissions\",\"returns\":{\"_0\":\"Permissions struct\"}}},\"title\":\"Wrapped Staked ETH (wstETH) Hook\",\"version\":1},\"userdoc\":{\"errors\":{\"DeltaNotNegative(address)\":[{\"notice\":\"Emitted trying to take a negative delta.\"}],\"DeltaNotPositive(address)\":[{\"notice\":\"Emitted trying to settle a positive delta.\"}],\"ExactInputNotSupported()\":[{\"notice\":\"Thrown when exact input swaps are not supported\"}],\"ExactOutputNotSupported()\":[{\"notice\":\"Thrown when exact output swaps are not supported\"}],\"InsufficientBalance()\":[{\"notice\":\"Emitted when the contract does not have enough balance to wrap or unwrap.\"}],\"InvalidPoolFee()\":[{\"notice\":\"Thrown when initializing a pool with non-zero fee\"}],\"InvalidPoolToken()\":[{\"notice\":\"Thrown when initializing a pool with invalid tokens\"}],\"LiquidityNotAllowed()\":[{\"notice\":\"Thrown when attempting to add or remove liquidity\"}],\"NotPoolManager()\":[{\"notice\":\"Thrown when the caller is not PoolManager\"}]},\"kind\":\"user\",\"methods\":{\"afterAddLiquidity(address,(address,address,uint24,int24,address),(int24,int24,int256,bytes32),int256,int256,bytes)\":{\"notice\":\"The hook called after liquidity is added\"},\"afterDonate(address,(address,address,uint24,int24,address),uint256,uint256,bytes)\":{\"notice\":\"The hook called after donate\"},\"afterInitialize(address,(address,address,uint24,int24,address),uint160,int24)\":{\"notice\":\"The hook called after the state of a pool is initialized\"},\"afterRemoveLiquidity(address,(address,address,uint24,int24,address),(int24,int24,int256,bytes32),int256,int256,bytes)\":{\"notice\":\"The hook called after liquidity is removed\"},\"afterSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),int256,bytes)\":{\"notice\":\"The hook called after a swap\"},\"beforeAddLiquidity(address,(address,address,uint24,int24,address),(int24,int24,int256,bytes32),bytes)\":{\"notice\":\"The hook called before liquidity is added\"},\"beforeDonate(address,(address,address,uint24,int24,address),uint256,uint256,bytes)\":{\"notice\":\"The hook called before donate\"},\"beforeInitialize(address,(address,address,uint24,int24,address),uint160)\":{\"notice\":\"The hook called before the state of a pool is initialized\"},\"beforeRemoveLiquidity(address,(address,address,uint24,int24,address),(int24,int24,int256,bytes32),bytes)\":{\"notice\":\"The hook called before liquidity is removed\"},\"beforeSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),bytes)\":{\"notice\":\"The hook called before a swap\"},\"constructor\":{\"notice\":\"Creates a new wstETH wrapper hook\"},\"getHookPermissions()\":{\"notice\":\"Returns a struct of permissions to signal which hook functions are to be implemented\"},\"poolManager()\":{\"notice\":\"The Uniswap v4 PoolManager contract\"},\"underlyingCurrency()\":{\"notice\":\"The underlying token currency (e.g., ETH)\"},\"wrapZeroForOne()\":{\"notice\":\"Indicates whether wrapping occurs when swapping from token0 to token1\"},\"wrapperCurrency()\":{\"notice\":\"The wrapped token currency (e.g., WETH)\"},\"wstETH()\":{\"notice\":\"The wstETH contract used for wrapping/unwrapping operations\"}},\"notice\":\"Hook for wrapping/unwrapping stETH/wstETH in Uniswap V4 pools\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/hooks/WstETHHook.sol\":\"WstETHHook\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":44444444},\"remappings\":[\":@ensdomains/=lib/v4-core/node_modules/@ensdomains/\",\":@openzeppelin/=lib/v4-core/lib/openzeppelin-contracts/\",\":@uniswap/v4-core/=lib/v4-core/\",\":ds-test/=lib/v4-core/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/v4-core/lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-gas-snapshot/=lib/permit2/lib/forge-gas-snapshot/src/\",\":forge-std/=lib/v4-core/lib/forge-std/src/\",\":hardhat/=lib/v4-core/node_modules/hardhat/\",\":openzeppelin-contracts/=lib/v4-core/lib/openzeppelin-contracts/\",\":permit2/=lib/permit2/\",\":solmate/=lib/v4-core/lib/solmate/\",\":v4-core/=lib/v4-core/src/\"]},\"sources\":{\"lib/v4-core/lib/solmate/src/tokens/ERC20.sol\":{\"keccak256\":\"0xcdfd8db76b2a3415620e4d18cc5545f3d50de792dbf2c3dd5adb40cbe6f94b10\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://57b3ab70cde374af1cf2c9888636e8de6cf660f087b1c9abd805e9271e19fa35\",\"dweb:/ipfs/QmNrLDBAHYFjpjSd12jerm1AdBkDqEYUUaXgnT854BUZ97\"]},\"lib/v4-core/lib/solmate/src/utils/FixedPointMathLib.sol\":{\"keccak256\":\"0x1b62af9baf5b8e991ed7531bc87f45550ba9d61e8dbff5caf237ccaf3a3fd843\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://b7b38b977c5305b18ceefbeed4c9ceaaaefa419b520de62de6604ea661f8c0a9\",\"dweb:/ipfs/QmecMRzgfMyDVa2pvBqMMDLYBappaj7Aa3qcMoQYEQrhWi\"]},\"lib/v4-core/lib/solmate/src/utils/SafeTransferLib.sol\":{\"keccak256\":\"0x6ab948013c2c7ca6351e593600425b0ec6df9035320280c678e735bce16e996b\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://2ab977d0eeb2bf458f9798250215c646d2f3b1f90b5a7e2b506fdf3335c0f060\",\"dweb:/ipfs/QmYPRoPhNtBAmCSq7imN1scMVpKNQvMTpoqab3tXUx5Tnv\"]},\"lib/v4-core/src/interfaces/IExtsload.sol\":{\"keccak256\":\"0x80b53ca4907d6f0088c3b931f2b72cad1dc4615a95094d96bd0fb8dff8d5ba43\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://375c69148622aab7a3537d5fd37d373a8e9731022c8d87bdaee46233b0a99fe1\",\"dweb:/ipfs/QmXFjdoYRxsA5B1kyuxEXgNf3FBoL1zPvy26Qy8EtpdFRN\"]},\"lib/v4-core/src/interfaces/IExttload.sol\":{\"keccak256\":\"0xc6b68283ebd8d1c789df536756726eed51c589134bb20821b236a0d22a135937\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://294394f72dfc219689209f4130d85601dfd0d63c8d47578050d312db70f9b6c8\",\"dweb:/ipfs/QmTDMQ3oxCGHgEBU48a3Lp4S1rRjc8vVCxkhE5ZNej1bsY\"]},\"lib/v4-core/src/interfaces/IHooks.sol\":{\"keccak256\":\"0xc131ffa2d04c10a012fe715fe2c115811526b7ea34285cf0a04ce7ce8320da8d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3b212358897db5d99c21244d88f97b2e788527552cb430629b472a8cc6289aec\",\"dweb:/ipfs/QmQtwV4dDe2RYk2ErLpaAX7U82jWh1L6Lw2HRuKDvBi84G\"]},\"lib/v4-core/src/interfaces/IPoolManager.sol\":{\"keccak256\":\"0xbdab3544da3d32dfdf7457baa94e17d5a3012952428559e013ffac45d067038e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce95ff864468e37c76adf71df061d4f3d6f3a5ec1f9bc3aea090463bc72798f4\",\"dweb:/ipfs/QmSbWh1pLbz51yQF4HEu5NRhr8XVv9JYGEw1hq1HudAnCi\"]},\"lib/v4-core/src/interfaces/IProtocolFees.sol\":{\"keccak256\":\"0x32a666e588a2f66334430357bb1e2424fe7eebeb98a3364b1dd16eb6ccca9848\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://85751d302125881f72e5f8af051c2d5d9b1f606ebaea8ca7d04fccdd27cc252d\",\"dweb:/ipfs/QmeRwomeh9NWm6A6fgNA4KZPQZHPpdKsPQyYsHSFmvud7J\"]},\"lib/v4-core/src/interfaces/external/IERC20Minimal.sol\":{\"keccak256\":\"0xeccadf1bf69ba2eb51f2fe4fa511bc7bb05bbd6b9f9a3cb8e5d83d9582613e0f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://118757369892687b99ef46ce28d6861f62c098285bd7687a4f17f7e44e5f81de\",\"dweb:/ipfs/QmUxqbYqQtcEwwFbb9e6BBMePEaSgN8C45v6RKubD4ib8d\"]},\"lib/v4-core/src/interfaces/external/IERC6909Claims.sol\":{\"keccak256\":\"0xa586f345739e52b0488a0fe40b6e375cce67fdd25758408b0efcb5133ad96a48\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e8c557b7e52abdbbd82e415a1acc27921446a7fd090b7d4877e52be72619547f\",\"dweb:/ipfs/QmXE2KNPbXmGX8BQF3ei6zhzRTnhoTQg39XmqMnkhbr6QK\"]},\"lib/v4-core/src/libraries/CurrencyReserves.sol\":{\"keccak256\":\"0x1576616129933fcdf3b684cea33cffd9c95e18fafbd2832a8c48ac3d8526d4c3\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://33b050efb9b81803b18f562271e7cca2ec5362c4d505860d6419b4a345636725\",\"dweb:/ipfs/QmQtFtTwKZ5pFVGD2ENDUXvp7ECFvzqeCuJ1miJcUHdmiX\"]},\"lib/v4-core/src/libraries/CustomRevert.sol\":{\"keccak256\":\"0x111ed3031b6990c80a93ae35dde6b6ac0b7e6af471388fdd7461e91edda9b7de\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c9ea883c98d6ae1829160d0977bb5195761cfd5bc81692d0a941f45717f594cd\",\"dweb:/ipfs/QmZPwxzaeMNv536wzrAMrMswu7vMHuqPVpjcqL3YvCMoxt\"]},\"lib/v4-core/src/libraries/Hooks.sol\":{\"keccak256\":\"0xd679b4b2d429689bc44f136050ebc958fb2d7d0d3a3c7b3e48c08ab4fba09aaa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://287190cb72840e5eb63cc7a8a1d0b9150af17d8e4ea0323f47c7e7928f2033cb\",\"dweb:/ipfs/QmVfqWBnAQM2jUcuREDdvjcP21gNuLU35CoL3NG5CEhNcx\"]},\"lib/v4-core/src/libraries/LPFeeLibrary.sol\":{\"keccak256\":\"0xbf6914e01014e7c1044111feb7df7a3d96bb503b3da827ad8464b1955580d13b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://33823c20a91882c9aacdcbb02f0558c05209f4d5954aa6dd4fa17c95664db475\",\"dweb:/ipfs/QmR7owkFgpfztpp1QUg3ut3nw9iPVQqLGP4hzgmZtRUQ2J\"]},\"lib/v4-core/src/libraries/Lock.sol\":{\"keccak256\":\"0x9338be4b5695f1da5f3d3f7a3eeaf7a356c1045458289586ac0cbe9cef77c6d5\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://485ec42ed6155469d612a9a0c18068ebfbad74448792a338a435503de3ef1b2c\",\"dweb:/ipfs/QmVnnv5u74MYatfRmBgrcfFYQcsMAJMG9jQ6ju8UiydKNF\"]},\"lib/v4-core/src/libraries/NonzeroDeltaCount.sol\":{\"keccak256\":\"0x0666ebd5d3528d7d52c48538296367a4cff97a578cf13365c51983fae3219b87\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://d27f1be3bd09d85c53d3e6a539dd6529ddd8b2b764ccb47fd7765fc81f9add59\",\"dweb:/ipfs/QmQdZujNXhKEXQBkKtF5jbdvo1yXMqPDUoBBaF9S5u3Kpm\"]},\"lib/v4-core/src/libraries/ParseBytes.sol\":{\"keccak256\":\"0x7533b13f53ee2c2c55500100b22ffd6e37e7523c27874edc98663d53a8672b15\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://82449058634fde28a085f3c59a6a5f412550c02181590593fd84c3e8b329aa17\",\"dweb:/ipfs/Qmev4E9Au6SsE4wsArChCwfg94KhHc5gYsEsZUnjF5sRLa\"]},\"lib/v4-core/src/libraries/SafeCast.sol\":{\"keccak256\":\"0x42c4a24f996a14d358be397b71f7ec9d7daf666aaec78002c63315a6ee67aa86\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c3db86e2ba3679105fc32edec656c70282e1fede6cab11217702443f6c26fa59\",\"dweb:/ipfs/QmX4yaaSPdKQzYNRsezjTvZKsubzS8JRTEGFD3fPpTTCcj\"]},\"lib/v4-core/src/libraries/TransientStateLibrary.sol\":{\"keccak256\":\"0x7d1e0875747bd89b32c25f1a48da2766e5f4aff1f671ad5f3c0c07ebbbcb946a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d76cfeb1cb60595b41ecc51c8a12fb4bf63a7fc733d0b1a2e3adb55abeb1f9d5\",\"dweb:/ipfs/Qmb8oX7DtsRpw3tTtdWZwGhauj1evq43d3PLwe4nSDAKkV\"]},\"lib/v4-core/src/types/BalanceDelta.sol\":{\"keccak256\":\"0xa719c8fe51e0a9524280178f19f6851bcc3b3b60e73618f3d60905d35ae5569f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7436928dc9de35c6c7c5c636cb51adaf295cfd590da83b19a004ae33cbec9ef9\",\"dweb:/ipfs/QmRJ9yZkUpzk4433GX3LgVVL8jwpbSYSUwXcucKisf3v4H\"]},\"lib/v4-core/src/types/BeforeSwapDelta.sol\":{\"keccak256\":\"0x2a774312d91285313d569da1a718c909655da5432310417692097a1d4dc83a78\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a2c7a0379955cff9c17ab9e61f95e42909aa5947c22740f86ce940d09856f782\",\"dweb:/ipfs/QmaAuo8UBYXsGrVuKh8iRoAAdqwtg1jDq515cW1ZRP5m9K\"]},\"lib/v4-core/src/types/Currency.sol\":{\"keccak256\":\"0x4a0b84b282577ff6f8acf13ec9f4d32dbb9348748b49611d00e68bee96609c93\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://45f9d62ab3d51b52957279e353853ba1547c3182c9a1e3d1846ada4a90263b01\",\"dweb:/ipfs/QmS8NG84ccQS1yXVD8cv3eKX7J1UKxuJhbUfHTQR2opKF5\"]},\"lib/v4-core/src/types/PoolId.sol\":{\"keccak256\":\"0x308311916ea0f5c2fd878b6a2751eb223d170a69e33f601fae56dfe3c5d392af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://669c2cd7ac17690b5d8831e0bda72822376c3a04b36afed6d31df4d75fe60918\",\"dweb:/ipfs/QmT6EpkxqU8VF3WsgrZ66F3s1cCQRffR95z1HDYZz7ph6y\"]},\"lib/v4-core/src/types/PoolKey.sol\":{\"keccak256\":\"0xf89856e0580d7a4856d3187a76858377ccee9d59702d230c338d84388221b786\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6f3118fa189025695c37fdf0bdd1190f085ad097484d3c88cf4c56d1db65f639\",\"dweb:/ipfs/QmamXpgtB8GV1CaFLvqefPWSoikLDhMk1yU4heBnVzU8gi\"]},\"lib/v4-core/src/types/PoolOperation.sol\":{\"keccak256\":\"0x7a1a107fc1f2208abb2c9364c8c54e56e98dca27673e9441bed2b949b6382162\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ad2470383bc5595d5af17840c64971f457adac68895a4db41ba5c71a4478e07\",\"dweb:/ipfs/QmdwKhBHDZFuqXrR2BfDBD9r7rB2ULGQBznsajRTkTmL4c\"]},\"src/base/DeltaResolver.sol\":{\"keccak256\":\"0x94a2da2be5c924df65a8e1e29f585bbe4c37777fedd43b45989c66d509a4a83c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://42bba590f6e817fd56328b74ae99bfdc4df57386d0a69ee22b9108341953ed36\",\"dweb:/ipfs/QmdusastK7FWYouLz9gvV5J3z8MQbNKLJNNHTrc1vi7DWw\"]},\"src/base/ImmutableState.sol\":{\"keccak256\":\"0x1867c9fa2f9b4fa73bab0fcdc9d19ccef4eeac552273d8b84a170cd1cc90350a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af2d699b439e13b599632fddfe82718aebd41055fba7c075f186675c588d1337\",\"dweb:/ipfs/Qmc111gckSKb9aESn3wRFLeLiS4KGujaUcaYJgRnCRfwQU\"]},\"src/base/hooks/BaseTokenWrapperHook.sol\":{\"keccak256\":\"0x4444f619c7fff29d2e9e4ed1802bdc8c0852bec1f1c0a47c34c549466c6a6aca\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2e587d8588c44d960af1625cd9ee7bf9a33ed568814d7970474072540ffcc83f\",\"dweb:/ipfs/QmctJqdWMgQ9QbiF5ef9NtnNtNcNHfGSQqEQ69gt483f4o\"]},\"src/hooks/WstETHHook.sol\":{\"keccak256\":\"0x7acc945f5e95ccf627f3486e49fb954eb22f0004a0d3fdfa67313cb53794b6a3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b03951d341836cfefc035ac063ed65821e31cc4c7934cba3938f1827bf14f300\",\"dweb:/ipfs/QmQBABtYyBHAbb4JonxYEJfUwAfqKFaFa1XAim2qTVEsN1\"]},\"src/interfaces/IImmutableState.sol\":{\"keccak256\":\"0x36ab3100e87457ecf04887f4f540e34fd7f21d8e3b83880cb679239e60b7b06b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7f290c7ce8e4832608d637a51b13dff95abecf6549485448e647a11c8ed01341\",\"dweb:/ipfs/QmfD1R6mTp8j4EjQXmQZW3vCh11EYFjnvoaw8rXRP27mMq\"]},\"src/interfaces/external/IWstETH.sol\":{\"keccak256\":\"0x1123fab9f0ccfcea5a0b6e1f3514ef72ea76f6ed33e13f8e1b8fc0b3aeb274a4\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://17e6bc50f7f4f1ec12237947aa686451011fceba5d1db4c59dd8ea7f0e92f378\",\"dweb:/ipfs/QmZTnzsaDLhe37hQspRMASj4MqVhP1inyRT77STve6SvjL\"]},\"src/libraries/ActionConstants.sol\":{\"keccak256\":\"0x3d6f0e5b4a7b1e60bad93e73dce5db67fb66bebef11c31ed8355014a79aa03b3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6dfa42e24b1b5c7f66e75304ab034fbb6768518eb2410ccfff8b3defdd1658f2\",\"dweb:/ipfs/QmQQ7fud9mmv7PEWPAQiNzeZhNkWf28Z6nCHc2e6WJFfa7\"]},\"src/utils/BaseHook.sol\":{\"keccak256\":\"0x6268607345149d912996d1c2bac693b2102304cc97c19ec4fef184d6fa390e89\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d6c0dddffa6c5eb3c10bc45d56d58bc3f4773778322fa10a4acf46e2292b61b3\",\"dweb:/ipfs/Qmc1Srhh6ne5Lsi2Y5BBz8pgPLmJdg8uN1UCeJzKnr6Kra\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"contract IPoolManager","name":"_manager","type":"address"},{"internalType":"contract IWstETH","name":"_wsteth","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"Currency","name":"currency","type":"address"}],"type":"error","name":"DeltaNotNegative"},{"inputs":[{"internalType":"Currency","name":"currency","type":"address"}],"type":"error","name":"DeltaNotPositive"},{"inputs":[],"type":"error","name":"ExactInputNotSupported"},{"inputs":[],"type":"error","name":"ExactOutputNotSupported"},{"inputs":[],"type":"error","name":"HookNotImplemented"},{"inputs":[],"type":"error","name":"InsufficientBalance"},{"inputs":[],"type":"error","name":"InvalidPoolFee"},{"inputs":[],"type":"error","name":"InvalidPoolToken"},{"inputs":[],"type":"error","name":"LiquidityNotAllowed"},{"inputs":[],"type":"error","name":"NotPoolManager"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"struct PoolKey","name":"key","type":"tuple","components":[{"internalType":"Currency","name":"currency0","type":"address"},{"internalType":"Currency","name":"currency1","type":"address"},{"internalType":"uint24","name":"fee","type":"uint24"},{"internalType":"int24","name":"tickSpacing","type":"int24"},{"internalType":"contract IHooks","name":"hooks","type":"address"}]},{"internalType":"struct ModifyLiquidityParams","name":"params","type":"tuple","components":[{"internalType":"int24","name":"tickLower","type":"int24"},{"internalType":"int24","name":"tickUpper","type":"int24"},{"internalType":"int256","name":"liquidityDelta","type":"int256"},{"internalType":"bytes32","name":"salt","type":"bytes32"}]},{"internalType":"BalanceDelta","name":"delta","type":"int256"},{"internalType":"BalanceDelta","name":"feesAccrued","type":"int256"},{"internalType":"bytes","name":"hookData","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"afterAddLiquidity","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"},{"internalType":"BalanceDelta","name":"","type":"int256"}]},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"struct PoolKey","name":"key","type":"tuple","components":[{"internalType":"Currency","name":"currency0","type":"address"},{"internalType":"Currency","name":"currency1","type":"address"},{"internalType":"uint24","name":"fee","type":"uint24"},{"internalType":"int24","name":"tickSpacing","type":"int24"},{"internalType":"contract IHooks","name":"hooks","type":"address"}]},{"internalType":"uint256","name":"amount0","type":"uint256"},{"internalType":"uint256","name":"amount1","type":"uint256"},{"internalType":"bytes","name":"hookData","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"afterDonate","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}]},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"struct PoolKey","name":"key","type":"tuple","components":[{"internalType":"Currency","name":"currency0","type":"address"},{"internalType":"Currency","name":"currency1","type":"address"},{"internalType":"uint24","name":"fee","type":"uint24"},{"internalType":"int24","name":"tickSpacing","type":"int24"},{"internalType":"contract IHooks","name":"hooks","type":"address"}]},{"internalType":"uint160","name":"sqrtPriceX96","type":"uint160"},{"internalType":"int24","name":"tick","type":"int24"}],"stateMutability":"nonpayable","type":"function","name":"afterInitialize","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}]},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"struct PoolKey","name":"key","type":"tuple","components":[{"internalType":"Currency","name":"currency0","type":"address"},{"internalType":"Currency","name":"currency1","type":"address"},{"internalType":"uint24","name":"fee","type":"uint24"},{"internalType":"int24","name":"tickSpacing","type":"int24"},{"internalType":"contract IHooks","name":"hooks","type":"address"}]},{"internalType":"struct ModifyLiquidityParams","name":"params","type":"tuple","components":[{"internalType":"int24","name":"tickLower","type":"int24"},{"internalType":"int24","name":"tickUpper","type":"int24"},{"internalType":"int256","name":"liquidityDelta","type":"int256"},{"internalType":"bytes32","name":"salt","type":"bytes32"}]},{"internalType":"BalanceDelta","name":"delta","type":"int256"},{"internalType":"BalanceDelta","name":"feesAccrued","type":"int256"},{"internalType":"bytes","name":"hookData","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"afterRemoveLiquidity","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"},{"internalType":"BalanceDelta","name":"","type":"int256"}]},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"struct PoolKey","name":"key","type":"tuple","components":[{"internalType":"Currency","name":"currency0","type":"address"},{"internalType":"Currency","name":"currency1","type":"address"},{"internalType":"uint24","name":"fee","type":"uint24"},{"internalType":"int24","name":"tickSpacing","type":"int24"},{"internalType":"contract IHooks","name":"hooks","type":"address"}]},{"internalType":"struct SwapParams","name":"params","type":"tuple","components":[{"internalType":"bool","name":"zeroForOne","type":"bool"},{"internalType":"int256","name":"amountSpecified","type":"int256"},{"internalType":"uint160","name":"sqrtPriceLimitX96","type":"uint160"}]},{"internalType":"BalanceDelta","name":"delta","type":"int256"},{"internalType":"bytes","name":"hookData","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"afterSwap","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"},{"internalType":"int128","name":"","type":"int128"}]},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"struct PoolKey","name":"key","type":"tuple","components":[{"internalType":"Currency","name":"currency0","type":"address"},{"internalType":"Currency","name":"currency1","type":"address"},{"internalType":"uint24","name":"fee","type":"uint24"},{"internalType":"int24","name":"tickSpacing","type":"int24"},{"internalType":"contract IHooks","name":"hooks","type":"address"}]},{"internalType":"struct ModifyLiquidityParams","name":"params","type":"tuple","components":[{"internalType":"int24","name":"tickLower","type":"int24"},{"internalType":"int24","name":"tickUpper","type":"int24"},{"internalType":"int256","name":"liquidityDelta","type":"int256"},{"internalType":"bytes32","name":"salt","type":"bytes32"}]},{"internalType":"bytes","name":"hookData","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"beforeAddLiquidity","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}]},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"struct PoolKey","name":"key","type":"tuple","components":[{"internalType":"Currency","name":"currency0","type":"address"},{"internalType":"Currency","name":"currency1","type":"address"},{"internalType":"uint24","name":"fee","type":"uint24"},{"internalType":"int24","name":"tickSpacing","type":"int24"},{"internalType":"contract IHooks","name":"hooks","type":"address"}]},{"internalType":"uint256","name":"amount0","type":"uint256"},{"internalType":"uint256","name":"amount1","type":"uint256"},{"internalType":"bytes","name":"hookData","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"beforeDonate","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}]},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"struct PoolKey","name":"key","type":"tuple","components":[{"internalType":"Currency","name":"currency0","type":"address"},{"internalType":"Currency","name":"currency1","type":"address"},{"internalType":"uint24","name":"fee","type":"uint24"},{"internalType":"int24","name":"tickSpacing","type":"int24"},{"internalType":"contract IHooks","name":"hooks","type":"address"}]},{"internalType":"uint160","name":"sqrtPriceX96","type":"uint160"}],"stateMutability":"nonpayable","type":"function","name":"beforeInitialize","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}]},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"struct PoolKey","name":"key","type":"tuple","components":[{"internalType":"Currency","name":"currency0","type":"address"},{"internalType":"Currency","name":"currency1","type":"address"},{"internalType":"uint24","name":"fee","type":"uint24"},{"internalType":"int24","name":"tickSpacing","type":"int24"},{"internalType":"contract IHooks","name":"hooks","type":"address"}]},{"internalType":"struct ModifyLiquidityParams","name":"params","type":"tuple","components":[{"internalType":"int24","name":"tickLower","type":"int24"},{"internalType":"int24","name":"tickUpper","type":"int24"},{"internalType":"int256","name":"liquidityDelta","type":"int256"},{"internalType":"bytes32","name":"salt","type":"bytes32"}]},{"internalType":"bytes","name":"hookData","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"beforeRemoveLiquidity","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}]},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"struct PoolKey","name":"key","type":"tuple","components":[{"internalType":"Currency","name":"currency0","type":"address"},{"internalType":"Currency","name":"currency1","type":"address"},{"internalType":"uint24","name":"fee","type":"uint24"},{"internalType":"int24","name":"tickSpacing","type":"int24"},{"internalType":"contract IHooks","name":"hooks","type":"address"}]},{"internalType":"struct SwapParams","name":"params","type":"tuple","components":[{"internalType":"bool","name":"zeroForOne","type":"bool"},{"internalType":"int256","name":"amountSpecified","type":"int256"},{"internalType":"uint160","name":"sqrtPriceLimitX96","type":"uint160"}]},{"internalType":"bytes","name":"hookData","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"beforeSwap","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"},{"internalType":"BeforeSwapDelta","name":"","type":"int256"},{"internalType":"uint24","name":"","type":"uint24"}]},{"inputs":[],"stateMutability":"pure","type":"function","name":"getHookPermissions","outputs":[{"internalType":"struct Hooks.Permissions","name":"","type":"tuple","components":[{"internalType":"bool","name":"beforeInitialize","type":"bool"},{"internalType":"bool","name":"afterInitialize","type":"bool"},{"internalType":"bool","name":"beforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"afterAddLiquidity","type":"bool"},{"internalType":"bool","name":"beforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"afterRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"beforeSwap","type":"bool"},{"internalType":"bool","name":"afterSwap","type":"bool"},{"internalType":"bool","name":"beforeDonate","type":"bool"},{"internalType":"bool","name":"afterDonate","type":"bool"},{"internalType":"bool","name":"beforeSwapReturnDelta","type":"bool"},{"internalType":"bool","name":"afterSwapReturnDelta","type":"bool"},{"internalType":"bool","name":"afterAddLiquidityReturnDelta","type":"bool"},{"internalType":"bool","name":"afterRemoveLiquidityReturnDelta","type":"bool"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"poolManager","outputs":[{"internalType":"contract IPoolManager","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"underlyingCurrency","outputs":[{"internalType":"Currency","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"wrapZeroForOne","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"wrapperCurrency","outputs":[{"internalType":"Currency","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"wstETH","outputs":[{"internalType":"contract IWstETH","name":"","type":"address"}]}],"devdoc":{"kind":"dev","methods":{"afterAddLiquidity(address,(address,address,uint24,int24,address),(int24,int24,int256,bytes32),int256,int256,bytes)":{"params":{"delta":"The caller's balance delta after adding liquidity; the sum of principal delta, fees accrued, and hook delta","feesAccrued":"The fees accrued since the last time fees were collected from this position","hookData":"Arbitrary data handed into the PoolManager by the liquidity provider to be passed on to the hook","key":"The key for the pool","params":"The parameters for adding liquidity","sender":"The initial msg.sender for the add liquidity call"},"returns":{"_0":"bytes4 The function selector for the hook","_1":"BalanceDelta The hook's delta in token0 and token1. Positive: the hook is owed/took currency, negative: the hook owes/sent currency"}},"afterDonate(address,(address,address,uint24,int24,address),uint256,uint256,bytes)":{"params":{"amount0":"The amount of token0 being donated","amount1":"The amount of token1 being donated","hookData":"Arbitrary data handed into the PoolManager by the donor to be be passed on to the hook","key":"The key for the pool","sender":"The initial msg.sender for the donate call"},"returns":{"_0":"bytes4 The function selector for the hook"}},"afterInitialize(address,(address,address,uint24,int24,address),uint160,int24)":{"params":{"key":"The key for the pool being initialized","sender":"The initial msg.sender for the initialize call","sqrtPriceX96":"The sqrt(price) of the pool as a Q64.96","tick":"The current tick after the state of a pool is initialized"},"returns":{"_0":"bytes4 The function selector for the hook"}},"afterRemoveLiquidity(address,(address,address,uint24,int24,address),(int24,int24,int256,bytes32),int256,int256,bytes)":{"params":{"delta":"The caller's balance delta after removing liquidity; the sum of principal delta, fees accrued, and hook delta","feesAccrued":"The fees accrued since the last time fees were collected from this position","hookData":"Arbitrary data handed into the PoolManager by the liquidity provider to be be passed on to the hook","key":"The key for the pool","params":"The parameters for removing liquidity","sender":"The initial msg.sender for the remove liquidity call"},"returns":{"_0":"bytes4 The function selector for the hook","_1":"BalanceDelta The hook's delta in token0 and token1. Positive: the hook is owed/took currency, negative: the hook owes/sent currency"}},"afterSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),int256,bytes)":{"params":{"delta":"The amount owed to the caller (positive) or owed to the pool (negative)","hookData":"Arbitrary data handed into the PoolManager by the swapper to be be passed on to the hook","key":"The key for the pool","params":"The parameters for the swap","sender":"The initial msg.sender for the swap call"},"returns":{"_0":"bytes4 The function selector for the hook","_1":"int128 The hook's delta in unspecified currency. Positive: the hook is owed/took currency, negative: the hook owes/sent currency"}},"beforeAddLiquidity(address,(address,address,uint24,int24,address),(int24,int24,int256,bytes32),bytes)":{"params":{"hookData":"Arbitrary data handed into the PoolManager by the liquidity provider to be passed on to the hook","key":"The key for the pool","params":"The parameters for adding liquidity","sender":"The initial msg.sender for the add liquidity call"},"returns":{"_0":"bytes4 The function selector for the hook"}},"beforeDonate(address,(address,address,uint24,int24,address),uint256,uint256,bytes)":{"params":{"amount0":"The amount of token0 being donated","amount1":"The amount of token1 being donated","hookData":"Arbitrary data handed into the PoolManager by the donor to be be passed on to the hook","key":"The key for the pool","sender":"The initial msg.sender for the donate call"},"returns":{"_0":"bytes4 The function selector for the hook"}},"beforeInitialize(address,(address,address,uint24,int24,address),uint160)":{"params":{"key":"The key for the pool being initialized","sender":"The initial msg.sender for the initialize call","sqrtPriceX96":"The sqrt(price) of the pool as a Q64.96"},"returns":{"_0":"bytes4 The function selector for the hook"}},"beforeRemoveLiquidity(address,(address,address,uint24,int24,address),(int24,int24,int256,bytes32),bytes)":{"params":{"hookData":"Arbitrary data handed into the PoolManager by the liquidity provider to be be passed on to the hook","key":"The key for the pool","params":"The parameters for removing liquidity","sender":"The initial msg.sender for the remove liquidity call"},"returns":{"_0":"bytes4 The function selector for the hook"}},"beforeSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),bytes)":{"params":{"hookData":"Arbitrary data handed into the PoolManager by the swapper to be be passed on to the hook","key":"The key for the pool","params":"The parameters for the swap","sender":"The initial msg.sender for the swap call"},"returns":{"_0":"bytes4 The function selector for the hook","_1":"BeforeSwapDelta The hook's delta in specified and unspecified currencies. Positive: the hook is owed/took currency, negative: the hook owes/sent currency","_2":"uint24 Optionally override the lp fee, only used if three conditions are met: 1. the Pool has a dynamic fee, 2. the value's 2nd highest bit is set (23rd bit, 0x400000), and 3. the value is less than or equal to the maximum fee (1 million)"}},"constructor":{"details":"Initializes with wstETH as wrapper token and stETH as underlying token","params":{"_manager":"The Uniswap V4 pool manager","_wsteth":"The wstETH contract address"}},"getHookPermissions()":{"details":"Used at deployment to validate the address correctly represents the expected permissions","returns":{"_0":"Permissions struct"}}},"version":1},"userdoc":{"kind":"user","methods":{"afterAddLiquidity(address,(address,address,uint24,int24,address),(int24,int24,int256,bytes32),int256,int256,bytes)":{"notice":"The hook called after liquidity is added"},"afterDonate(address,(address,address,uint24,int24,address),uint256,uint256,bytes)":{"notice":"The hook called after donate"},"afterInitialize(address,(address,address,uint24,int24,address),uint160,int24)":{"notice":"The hook called after the state of a pool is initialized"},"afterRemoveLiquidity(address,(address,address,uint24,int24,address),(int24,int24,int256,bytes32),int256,int256,bytes)":{"notice":"The hook called after liquidity is removed"},"afterSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),int256,bytes)":{"notice":"The hook called after a swap"},"beforeAddLiquidity(address,(address,address,uint24,int24,address),(int24,int24,int256,bytes32),bytes)":{"notice":"The hook called before liquidity is added"},"beforeDonate(address,(address,address,uint24,int24,address),uint256,uint256,bytes)":{"notice":"The hook called before donate"},"beforeInitialize(address,(address,address,uint24,int24,address),uint160)":{"notice":"The hook called before the state of a pool is initialized"},"beforeRemoveLiquidity(address,(address,address,uint24,int24,address),(int24,int24,int256,bytes32),bytes)":{"notice":"The hook called before liquidity is removed"},"beforeSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),bytes)":{"notice":"The hook called before a swap"},"constructor":{"notice":"Creates a new wstETH wrapper hook"},"getHookPermissions()":{"notice":"Returns a struct of permissions to signal which hook functions are to be implemented"},"poolManager()":{"notice":"The Uniswap v4 PoolManager contract"},"underlyingCurrency()":{"notice":"The underlying token currency (e.g., ETH)"},"wrapZeroForOne()":{"notice":"Indicates whether wrapping occurs when swapping from token0 to token1"},"wrapperCurrency()":{"notice":"The wrapped token currency (e.g., WETH)"},"wstETH()":{"notice":"The wstETH contract used for wrapping/unwrapping operations"}},"version":1}},"settings":{"remappings":["@ensdomains/=lib/v4-core/node_modules/@ensdomains/","@openzeppelin/=lib/v4-core/lib/openzeppelin-contracts/","@uniswap/v4-core/=lib/v4-core/","ds-test/=lib/v4-core/lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/v4-core/lib/openzeppelin-contracts/lib/erc4626-tests/","forge-gas-snapshot/=lib/permit2/lib/forge-gas-snapshot/src/","forge-std/=lib/v4-core/lib/forge-std/src/","hardhat/=lib/v4-core/node_modules/hardhat/","openzeppelin-contracts/=lib/v4-core/lib/openzeppelin-contracts/","permit2/=lib/permit2/","solmate/=lib/v4-core/lib/solmate/","v4-core/=lib/v4-core/src/"],"optimizer":{"enabled":true,"runs":44444444},"metadata":{"bytecodeHash":"none"},"compilationTarget":{"src/hooks/WstETHHook.sol":"WstETHHook"},"evmVersion":"cancun","libraries":{}},"sources":{"lib/v4-core/lib/solmate/src/tokens/ERC20.sol":{"keccak256":"0xcdfd8db76b2a3415620e4d18cc5545f3d50de792dbf2c3dd5adb40cbe6f94b10","urls":["bzz-raw://57b3ab70cde374af1cf2c9888636e8de6cf660f087b1c9abd805e9271e19fa35","dweb:/ipfs/QmNrLDBAHYFjpjSd12jerm1AdBkDqEYUUaXgnT854BUZ97"],"license":"AGPL-3.0-only"},"lib/v4-core/lib/solmate/src/utils/FixedPointMathLib.sol":{"keccak256":"0x1b62af9baf5b8e991ed7531bc87f45550ba9d61e8dbff5caf237ccaf3a3fd843","urls":["bzz-raw://b7b38b977c5305b18ceefbeed4c9ceaaaefa419b520de62de6604ea661f8c0a9","dweb:/ipfs/QmecMRzgfMyDVa2pvBqMMDLYBappaj7Aa3qcMoQYEQrhWi"],"license":"AGPL-3.0-only"},"lib/v4-core/lib/solmate/src/utils/SafeTransferLib.sol":{"keccak256":"0x6ab948013c2c7ca6351e593600425b0ec6df9035320280c678e735bce16e996b","urls":["bzz-raw://2ab977d0eeb2bf458f9798250215c646d2f3b1f90b5a7e2b506fdf3335c0f060","dweb:/ipfs/QmYPRoPhNtBAmCSq7imN1scMVpKNQvMTpoqab3tXUx5Tnv"],"license":"AGPL-3.0-only"},"lib/v4-core/src/interfaces/IExtsload.sol":{"keccak256":"0x80b53ca4907d6f0088c3b931f2b72cad1dc4615a95094d96bd0fb8dff8d5ba43","urls":["bzz-raw://375c69148622aab7a3537d5fd37d373a8e9731022c8d87bdaee46233b0a99fe1","dweb:/ipfs/QmXFjdoYRxsA5B1kyuxEXgNf3FBoL1zPvy26Qy8EtpdFRN"],"license":"MIT"},"lib/v4-core/src/interfaces/IExttload.sol":{"keccak256":"0xc6b68283ebd8d1c789df536756726eed51c589134bb20821b236a0d22a135937","urls":["bzz-raw://294394f72dfc219689209f4130d85601dfd0d63c8d47578050d312db70f9b6c8","dweb:/ipfs/QmTDMQ3oxCGHgEBU48a3Lp4S1rRjc8vVCxkhE5ZNej1bsY"],"license":"MIT"},"lib/v4-core/src/interfaces/IHooks.sol":{"keccak256":"0xc131ffa2d04c10a012fe715fe2c115811526b7ea34285cf0a04ce7ce8320da8d","urls":["bzz-raw://3b212358897db5d99c21244d88f97b2e788527552cb430629b472a8cc6289aec","dweb:/ipfs/QmQtwV4dDe2RYk2ErLpaAX7U82jWh1L6Lw2HRuKDvBi84G"],"license":"MIT"},"lib/v4-core/src/interfaces/IPoolManager.sol":{"keccak256":"0xbdab3544da3d32dfdf7457baa94e17d5a3012952428559e013ffac45d067038e","urls":["bzz-raw://ce95ff864468e37c76adf71df061d4f3d6f3a5ec1f9bc3aea090463bc72798f4","dweb:/ipfs/QmSbWh1pLbz51yQF4HEu5NRhr8XVv9JYGEw1hq1HudAnCi"],"license":"MIT"},"lib/v4-core/src/interfaces/IProtocolFees.sol":{"keccak256":"0x32a666e588a2f66334430357bb1e2424fe7eebeb98a3364b1dd16eb6ccca9848","urls":["bzz-raw://85751d302125881f72e5f8af051c2d5d9b1f606ebaea8ca7d04fccdd27cc252d","dweb:/ipfs/QmeRwomeh9NWm6A6fgNA4KZPQZHPpdKsPQyYsHSFmvud7J"],"license":"MIT"},"lib/v4-core/src/interfaces/external/IERC20Minimal.sol":{"keccak256":"0xeccadf1bf69ba2eb51f2fe4fa511bc7bb05bbd6b9f9a3cb8e5d83d9582613e0f","urls":["bzz-raw://118757369892687b99ef46ce28d6861f62c098285bd7687a4f17f7e44e5f81de","dweb:/ipfs/QmUxqbYqQtcEwwFbb9e6BBMePEaSgN8C45v6RKubD4ib8d"],"license":"MIT"},"lib/v4-core/src/interfaces/external/IERC6909Claims.sol":{"keccak256":"0xa586f345739e52b0488a0fe40b6e375cce67fdd25758408b0efcb5133ad96a48","urls":["bzz-raw://e8c557b7e52abdbbd82e415a1acc27921446a7fd090b7d4877e52be72619547f","dweb:/ipfs/QmXE2KNPbXmGX8BQF3ei6zhzRTnhoTQg39XmqMnkhbr6QK"],"license":"MIT"},"lib/v4-core/src/libraries/CurrencyReserves.sol":{"keccak256":"0x1576616129933fcdf3b684cea33cffd9c95e18fafbd2832a8c48ac3d8526d4c3","urls":["bzz-raw://33b050efb9b81803b18f562271e7cca2ec5362c4d505860d6419b4a345636725","dweb:/ipfs/QmQtFtTwKZ5pFVGD2ENDUXvp7ECFvzqeCuJ1miJcUHdmiX"],"license":"BUSL-1.1"},"lib/v4-core/src/libraries/CustomRevert.sol":{"keccak256":"0x111ed3031b6990c80a93ae35dde6b6ac0b7e6af471388fdd7461e91edda9b7de","urls":["bzz-raw://c9ea883c98d6ae1829160d0977bb5195761cfd5bc81692d0a941f45717f594cd","dweb:/ipfs/QmZPwxzaeMNv536wzrAMrMswu7vMHuqPVpjcqL3YvCMoxt"],"license":"MIT"},"lib/v4-core/src/libraries/Hooks.sol":{"keccak256":"0xd679b4b2d429689bc44f136050ebc958fb2d7d0d3a3c7b3e48c08ab4fba09aaa","urls":["bzz-raw://287190cb72840e5eb63cc7a8a1d0b9150af17d8e4ea0323f47c7e7928f2033cb","dweb:/ipfs/QmVfqWBnAQM2jUcuREDdvjcP21gNuLU35CoL3NG5CEhNcx"],"license":"MIT"},"lib/v4-core/src/libraries/LPFeeLibrary.sol":{"keccak256":"0xbf6914e01014e7c1044111feb7df7a3d96bb503b3da827ad8464b1955580d13b","urls":["bzz-raw://33823c20a91882c9aacdcbb02f0558c05209f4d5954aa6dd4fa17c95664db475","dweb:/ipfs/QmR7owkFgpfztpp1QUg3ut3nw9iPVQqLGP4hzgmZtRUQ2J"],"license":"MIT"},"lib/v4-core/src/libraries/Lock.sol":{"keccak256":"0x9338be4b5695f1da5f3d3f7a3eeaf7a356c1045458289586ac0cbe9cef77c6d5","urls":["bzz-raw://485ec42ed6155469d612a9a0c18068ebfbad74448792a338a435503de3ef1b2c","dweb:/ipfs/QmVnnv5u74MYatfRmBgrcfFYQcsMAJMG9jQ6ju8UiydKNF"],"license":"BUSL-1.1"},"lib/v4-core/src/libraries/NonzeroDeltaCount.sol":{"keccak256":"0x0666ebd5d3528d7d52c48538296367a4cff97a578cf13365c51983fae3219b87","urls":["bzz-raw://d27f1be3bd09d85c53d3e6a539dd6529ddd8b2b764ccb47fd7765fc81f9add59","dweb:/ipfs/QmQdZujNXhKEXQBkKtF5jbdvo1yXMqPDUoBBaF9S5u3Kpm"],"license":"BUSL-1.1"},"lib/v4-core/src/libraries/ParseBytes.sol":{"keccak256":"0x7533b13f53ee2c2c55500100b22ffd6e37e7523c27874edc98663d53a8672b15","urls":["bzz-raw://82449058634fde28a085f3c59a6a5f412550c02181590593fd84c3e8b329aa17","dweb:/ipfs/Qmev4E9Au6SsE4wsArChCwfg94KhHc5gYsEsZUnjF5sRLa"],"license":"MIT"},"lib/v4-core/src/libraries/SafeCast.sol":{"keccak256":"0x42c4a24f996a14d358be397b71f7ec9d7daf666aaec78002c63315a6ee67aa86","urls":["bzz-raw://c3db86e2ba3679105fc32edec656c70282e1fede6cab11217702443f6c26fa59","dweb:/ipfs/QmX4yaaSPdKQzYNRsezjTvZKsubzS8JRTEGFD3fPpTTCcj"],"license":"MIT"},"lib/v4-core/src/libraries/TransientStateLibrary.sol":{"keccak256":"0x7d1e0875747bd89b32c25f1a48da2766e5f4aff1f671ad5f3c0c07ebbbcb946a","urls":["bzz-raw://d76cfeb1cb60595b41ecc51c8a12fb4bf63a7fc733d0b1a2e3adb55abeb1f9d5","dweb:/ipfs/Qmb8oX7DtsRpw3tTtdWZwGhauj1evq43d3PLwe4nSDAKkV"],"license":"MIT"},"lib/v4-core/src/types/BalanceDelta.sol":{"keccak256":"0xa719c8fe51e0a9524280178f19f6851bcc3b3b60e73618f3d60905d35ae5569f","urls":["bzz-raw://7436928dc9de35c6c7c5c636cb51adaf295cfd590da83b19a004ae33cbec9ef9","dweb:/ipfs/QmRJ9yZkUpzk4433GX3LgVVL8jwpbSYSUwXcucKisf3v4H"],"license":"MIT"},"lib/v4-core/src/types/BeforeSwapDelta.sol":{"keccak256":"0x2a774312d91285313d569da1a718c909655da5432310417692097a1d4dc83a78","urls":["bzz-raw://a2c7a0379955cff9c17ab9e61f95e42909aa5947c22740f86ce940d09856f782","dweb:/ipfs/QmaAuo8UBYXsGrVuKh8iRoAAdqwtg1jDq515cW1ZRP5m9K"],"license":"MIT"},"lib/v4-core/src/types/Currency.sol":{"keccak256":"0x4a0b84b282577ff6f8acf13ec9f4d32dbb9348748b49611d00e68bee96609c93","urls":["bzz-raw://45f9d62ab3d51b52957279e353853ba1547c3182c9a1e3d1846ada4a90263b01","dweb:/ipfs/QmS8NG84ccQS1yXVD8cv3eKX7J1UKxuJhbUfHTQR2opKF5"],"license":"MIT"},"lib/v4-core/src/types/PoolId.sol":{"keccak256":"0x308311916ea0f5c2fd878b6a2751eb223d170a69e33f601fae56dfe3c5d392af","urls":["bzz-raw://669c2cd7ac17690b5d8831e0bda72822376c3a04b36afed6d31df4d75fe60918","dweb:/ipfs/QmT6EpkxqU8VF3WsgrZ66F3s1cCQRffR95z1HDYZz7ph6y"],"license":"MIT"},"lib/v4-core/src/types/PoolKey.sol":{"keccak256":"0xf89856e0580d7a4856d3187a76858377ccee9d59702d230c338d84388221b786","urls":["bzz-raw://6f3118fa189025695c37fdf0bdd1190f085ad097484d3c88cf4c56d1db65f639","dweb:/ipfs/QmamXpgtB8GV1CaFLvqefPWSoikLDhMk1yU4heBnVzU8gi"],"license":"MIT"},"lib/v4-core/src/types/PoolOperation.sol":{"keccak256":"0x7a1a107fc1f2208abb2c9364c8c54e56e98dca27673e9441bed2b949b6382162","urls":["bzz-raw://4ad2470383bc5595d5af17840c64971f457adac68895a4db41ba5c71a4478e07","dweb:/ipfs/QmdwKhBHDZFuqXrR2BfDBD9r7rB2ULGQBznsajRTkTmL4c"],"license":"MIT"},"src/base/DeltaResolver.sol":{"keccak256":"0x94a2da2be5c924df65a8e1e29f585bbe4c37777fedd43b45989c66d509a4a83c","urls":["bzz-raw://42bba590f6e817fd56328b74ae99bfdc4df57386d0a69ee22b9108341953ed36","dweb:/ipfs/QmdusastK7FWYouLz9gvV5J3z8MQbNKLJNNHTrc1vi7DWw"],"license":"MIT"},"src/base/ImmutableState.sol":{"keccak256":"0x1867c9fa2f9b4fa73bab0fcdc9d19ccef4eeac552273d8b84a170cd1cc90350a","urls":["bzz-raw://af2d699b439e13b599632fddfe82718aebd41055fba7c075f186675c588d1337","dweb:/ipfs/Qmc111gckSKb9aESn3wRFLeLiS4KGujaUcaYJgRnCRfwQU"],"license":"MIT"},"src/base/hooks/BaseTokenWrapperHook.sol":{"keccak256":"0x4444f619c7fff29d2e9e4ed1802bdc8c0852bec1f1c0a47c34c549466c6a6aca","urls":["bzz-raw://2e587d8588c44d960af1625cd9ee7bf9a33ed568814d7970474072540ffcc83f","dweb:/ipfs/QmctJqdWMgQ9QbiF5ef9NtnNtNcNHfGSQqEQ69gt483f4o"],"license":"MIT"},"src/hooks/WstETHHook.sol":{"keccak256":"0x7acc945f5e95ccf627f3486e49fb954eb22f0004a0d3fdfa67313cb53794b6a3","urls":["bzz-raw://b03951d341836cfefc035ac063ed65821e31cc4c7934cba3938f1827bf14f300","dweb:/ipfs/QmQBABtYyBHAbb4JonxYEJfUwAfqKFaFa1XAim2qTVEsN1"],"license":"MIT"},"src/interfaces/IImmutableState.sol":{"keccak256":"0x36ab3100e87457ecf04887f4f540e34fd7f21d8e3b83880cb679239e60b7b06b","urls":["bzz-raw://7f290c7ce8e4832608d637a51b13dff95abecf6549485448e647a11c8ed01341","dweb:/ipfs/QmfD1R6mTp8j4EjQXmQZW3vCh11EYFjnvoaw8rXRP27mMq"],"license":"MIT"},"src/interfaces/external/IWstETH.sol":{"keccak256":"0x1123fab9f0ccfcea5a0b6e1f3514ef72ea76f6ed33e13f8e1b8fc0b3aeb274a4","urls":["bzz-raw://17e6bc50f7f4f1ec12237947aa686451011fceba5d1db4c59dd8ea7f0e92f378","dweb:/ipfs/QmZTnzsaDLhe37hQspRMASj4MqVhP1inyRT77STve6SvjL"],"license":"GPL-3.0"},"src/libraries/ActionConstants.sol":{"keccak256":"0x3d6f0e5b4a7b1e60bad93e73dce5db67fb66bebef11c31ed8355014a79aa03b3","urls":["bzz-raw://6dfa42e24b1b5c7f66e75304ab034fbb6768518eb2410ccfff8b3defdd1658f2","dweb:/ipfs/QmQQ7fud9mmv7PEWPAQiNzeZhNkWf28Z6nCHc2e6WJFfa7"],"license":"MIT"},"src/utils/BaseHook.sol":{"keccak256":"0x6268607345149d912996d1c2bac693b2102304cc97c19ec4fef184d6fa390e89","urls":["bzz-raw://d6c0dddffa6c5eb3c10bc45d56d58bc3f4773778322fa10a4acf46e2292b61b3","dweb:/ipfs/Qmc1Srhh6ne5Lsi2Y5BBz8pgPLmJdg8uN1UCeJzKnr6Kra"],"license":"MIT"}},"version":1},"id":107}