@uniswap/v4-periphery
Version:
🦄 Peripheral smart contracts for interacting with Uniswap v4
1 lines • 133 kB
JSON
{"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;:::-;;::