UNPKG

@uniswap/v4-core

Version:

🦄 Core smart contracts of Uniswap v4

1 lines • 161 kB
{"abi":[{"type":"function","name":"IS_TEST","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"_addLiquidity","inputs":[{"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":[],"stateMutability":"nonpayable"},{"type":"function","name":"_donate","inputs":[{"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":"amt0","type":"uint256","internalType":"uint256"},{"name":"amt1","type":"uint256","internalType":"uint256"},{"name":"hookData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"_initialize","inputs":[{"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":[],"stateMutability":"nonpayable"},{"type":"function","name":"_removeLiquidity","inputs":[{"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":[],"stateMutability":"nonpayable"},{"type":"function","name":"_swap","inputs":[{"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":[],"stateMutability":"nonpayable"},{"type":"function","name":"afterAddLiquidity","inputs":[{"name":"","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":"","type":"int256","internalType":"BalanceDelta"},{"name":"","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":"","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":"amt0","type":"uint256","internalType":"uint256"},{"name":"amt1","type":"uint256","internalType":"uint256"},{"name":"hookData","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"nonpayable"},{"type":"function","name":"afterInitialize","inputs":[{"name":"","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":"","type":"int24","internalType":"int24"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"nonpayable"},{"type":"function","name":"afterRemoveLiquidity","inputs":[{"name":"","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":"","type":"int256","internalType":"BalanceDelta"},{"name":"","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":"","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":"","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":"","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":"","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":"amt0","type":"uint256","internalType":"uint256"},{"name":"amt1","type":"uint256","internalType":"uint256"},{"name":"hookData","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"nonpayable"},{"type":"function","name":"beforeInitialize","inputs":[{"name":"","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":"","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":"","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":"counter","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"excludeArtifacts","inputs":[],"outputs":[{"name":"excludedArtifacts_","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"excludeContracts","inputs":[],"outputs":[{"name":"excludedContracts_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"excludeSelectors","inputs":[],"outputs":[{"name":"excludedSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzSelector[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"excludeSenders","inputs":[],"outputs":[{"name":"excludedSenders_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"failed","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"setManager","inputs":[{"name":"_manager","type":"address","internalType":"contract IPoolManager"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"targetArtifactSelectors","inputs":[],"outputs":[{"name":"targetedArtifactSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzArtifactSelector[]","components":[{"name":"artifact","type":"string","internalType":"string"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetArtifacts","inputs":[],"outputs":[{"name":"targetedArtifacts_","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"targetContracts","inputs":[],"outputs":[{"name":"targetedContracts_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"targetInterfaces","inputs":[],"outputs":[{"name":"targetedInterfaces_","type":"tuple[]","internalType":"struct StdInvariant.FuzzInterface[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"artifacts","type":"string[]","internalType":"string[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetSelectors","inputs":[],"outputs":[{"name":"targetedSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzSelector[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetSenders","inputs":[],"outputs":[{"name":"targetedSenders_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"event","name":"log","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_address","inputs":[{"name":"","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"int256[]","indexed":false,"internalType":"int256[]"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"log_bytes","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_bytes32","inputs":[{"name":"","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_int","inputs":[{"name":"","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_address","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256[]","indexed":false,"internalType":"int256[]"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"log_named_bytes","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_named_bytes32","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_named_decimal_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_decimal_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_string","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_named_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_string","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_uint","inputs":[{"name":"","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"logs","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"error","name":"HookNotImplemented","inputs":[]}],"bytecode":{"object":"0x60808060405234602f57600160ff19600c541617600c55600160ff19601f541617601f5561307190816100348239f35b5f80fdfe6080806040526004361015610012575f80fd5b5f905f3560e01c9081631ed7831c1461168e5750806321d0ee7014611650578063259982e5146116025780632adbda2a146115e85780632ade3880146114275780633e5e3c231461137f5780633f7286f4146112d7578063575e24b4146111f057806359b1290e1461101057806361bc221a14610fd657806366d9a9a014610e795780636bc141f114610d795780636c2bbe7e14610d305780636fe7e6eb14610c8457806385226c8114610bd3578063916a17c614610afd5780639f063efc14610a98578063b0464fdc146109c2578063b47b2fb1146108c5578063b5508aa914610814578063b6a8b0fa146107d9578063ba414fa614610797578063d0ebdbe71461071a578063dc98354e14610667578063e1b4af6914610613578063e20c9f711461055b578063e30eb84e146101be578063e4660d8c146101a05763fa7626d41461015d575f80fd5b3461019d57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019d57602060ff601f54166040519015158152f35b80fd5b503461019d576101bb6101b236611a04565b92919091612bf1565b80f35b5034610523577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360161012081126105235760a0136105235760607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5c360112610523576040519061022e8261193f565b60a4358015158103610523578252602082019160c435835260e4359073ffffffffffffffffffffffffffffffffffffffff821682036105235760408101918252610104359167ffffffffffffffff83116105235761029260209336906004016117c5565b93909273ffffffffffffffffffffffffffffffffffffffff6021541673ffffffffffffffffffffffffffffffffffffffff6040519485937ff3cd914c0000000000000000000000000000000000000000000000000000000085526102fa600486016004611f5f565b51151560a4850152895160c4850152511660e4830152610120610104830152815f8161032b61012482018a8a611fff565b03925af1801561051857610527575b508073ffffffffffffffffffffffffffffffffffffffff9261035d92019061208b565b169173ffffffffffffffffffffffffffffffffffffffff60215416926004359073ffffffffffffffffffffffffffffffffffffffff82168203610523576103a5823087612d19565b925194737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561052357604051957ffe74f05b00000000000000000000000000000000000000000000000000000000875284600488015260248701525f86604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561051857610502575b84809650506024359073ffffffffffffffffffffffffffffffffffffffff8216938483036104fe578361046e92610468610457863084612d19565b986104638b8b136120d8565b61210c565b92612dcb565b5073ffffffffffffffffffffffffffffffffffffffff60215416803b156104fa5784928360649260405196879586947f0b0d9c090000000000000000000000000000000000000000000000000000000086526004860152602485015260448401525af180156104ef576104de5750f35b816104e89161195b565b61019d5780f35b6040513d84823e3d90fd5b8480fd5b8680fd5b9350935f61050f9161195b565b5f92849061041c565b6040513d5f823e3d90fd5b5f80fd5b906020823d602011610553575b816105416020938361195b565b8101031261052357905061035d61033a565b3d9150610534565b34610523575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105235760405180602060155491828152019060155f527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec475905f5b8181106105e7576105e3856105d78187038261195b565b60405191829182611732565b0390f35b825473ffffffffffffffffffffffffffffffffffffffff168452602090930192600192830192016105c0565b346105235761063d61062436611dd8565b945092610635602093929354611eef565b6020556123db565b60206040517fe1b4af69000000000000000000000000000000000000000000000000000000008152f35b346105235760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105235761069e611781565b5060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc360112610523576106f06106d4611c40565b6106df602054611eef565b6020556106eb36611b74565b6127aa565b60206040517fdc98354e000000000000000000000000000000000000000000000000000000008152f35b346105235760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105235760043573ffffffffffffffffffffffffffffffffffffffff8116809103610523577fffffffffffffffffffffffff000000000000000000000000000000000000000060215416176021555f80f35b34610523575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105235760206107cf612882565b6040519015158152f35b34610523576107ea61062436611dd8565b60206040517fb6a8b0fa000000000000000000000000000000000000000000000000000000008152f35b34610523575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105235760195461084e816122b3565b9061085c604051928361195b565b80825260195f9081527f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c9695602084015b8383106108a857604051602080825281906105e390820188611aa9565b6001602081926108b7856122cb565b81520192019201919061088b565b34610523576101607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610523576108fd611781565b5060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc3601126105235760607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3c360112610523576101443567ffffffffffffffff8111610523576109766109939136906004016117c5565b90610982602054611eef565b60205561098e36611e79565b61295b565b604080517fb47b2fb10000000000000000000000000000000000000000000000000000000081525f6020820152f35b34610523575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261052357601c546109fc816122b3565b90610a0a604051928361195b565b80825260208201601c5f527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a2115f915b838310610a4e57604051806105e38782611d34565b60026020600192604051610a61816118be565b73ffffffffffffffffffffffffffffffffffffffff8654168152610a86858701612506565b83820152815201920192019190610a39565b3461052357610ace610ac8610aac36611c63565b96939250945050610abe602054611eef565b60205536906119ba565b90612138565b604080517f9f063efc0000000000000000000000000000000000000000000000000000000081525f6020820152f35b34610523575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261052357601d54610b37816122b3565b90610b45604051928361195b565b80825260208201601d5f527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f5f915b838310610b8957604051806105e38782611d34565b60026020600192604051610b9c816118be565b73ffffffffffffffffffffffffffffffffffffffff8654168152610bc1858701612506565b83820152815201920192019190610b74565b34610523575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261052357601a54610c0d816122b3565b90610c1b604051928361195b565b808252601a5f9081527f057c384a7d1c54f3a1b2e5e67b2617b8224fdfd1ea7234eea573a6ff665ff63e602084015b838310610c6757604051602080825281906105e390820188611aa9565b600160208192610c76856122cb565b815201920192019190610c4a565b34610523576101007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261052357610cbc611781565b5060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc36011261052357610d06610cf2611c40565b610cfa61199c565b506106df602054611eef565b60206040517f6fe7e6eb000000000000000000000000000000000000000000000000000000008152f35b3461052357610d4a610d44610aac36611c63565b90612bf1565b604080517f6c2bbe7e0000000000000000000000000000000000000000000000000000000081525f6020820152f35b34610523577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360160c081126105235760a01361052357604051610dbc81611923565b60043573ffffffffffffffffffffffffffffffffffffffff8116810361052357815260243573ffffffffffffffffffffffffffffffffffffffff8116810361052357602082015260443562ffffff811681036105235760408201526064358060020b810361052357606082015260843573ffffffffffffffffffffffffffffffffffffffff8116810361052357608082015260a43573ffffffffffffffffffffffffffffffffffffffff8116810361052357610e77916127aa565b005b34610523575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261052357601b54610eb3816122b3565b90610ec1604051928361195b565b808252602082019081601b5f527f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc15f915b838310610f9b57848660405191829160208301906020845251809152604083019060408160051b85010192915f905b828210610f3057505050500390f35b91936020610f8b827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0600195979984950301865288519083610f7b8351604084526040840190611a66565b9201519084818403910152611b1f565b9601920192018594939192610f21565b60026020600192604051610fae816118be565b610fb7866122cb565b8152610fc4858701612506565b83820152815201920192019190610ef2565b34610523575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105235760208054604051908152f35b34610523577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360161010081126105235760a0136105235760e43567ffffffffffffffff8111610523576110689036906004016117c5565b9073ffffffffffffffffffffffffffffffffffffffff60215416602060405180927f234266d70000000000000000000000000000000000000000000000000000000082526110ba600483016004611f5f565b60a43560a483015260c43560c483015261010060e4830152815f816110e461010482018a8a611fff565b03925af18015610518576111bc575b508073ffffffffffffffffffffffffffffffffffffffff9261111692019061208b565b1673ffffffffffffffffffffffffffffffffffffffff602154166004359173ffffffffffffffffffffffffffffffffffffffff831683036105235761115c833084612d19565b6024359273ffffffffffffffffffffffffffffffffffffffff8416840361052357610e77948361119a92610468611194883084612d19565b9561210c565b61046873ffffffffffffffffffffffffffffffffffffffff602154169161210c565b906020823d6020116111e8575b816111d66020938361195b565b810103126105235790506111166110f3565b3d91506111c9565b34610523576101407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261052357611228611781565b5060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc3601126105235760607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3c360112610523576101243567ffffffffffffffff8111610523576109766112a19136906004016117c5565b60606040517f575e24b40000000000000000000000000000000000000000000000000000000081525f60208201525f6040820152f35b34610523575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105235760405180602060175491828152019060175f527fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c15905f5b818110611353576105e3856105d78187038261195b565b825473ffffffffffffffffffffffffffffffffffffffff1684526020909301926001928301920161133c565b34610523575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105235760405180602060185491828152019060185f527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e905f5b8181106113fb576105e3856105d78187038261195b565b825473ffffffffffffffffffffffffffffffffffffffff168452602090930192600192830192016113e4565b34610523575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261052357601e54611461816122b3565b9061146f604051928361195b565b808252602082019081601e5f527f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e3505f915b83831061155057848660405191829160208301906020845251809152604083019060408160051b85010192915f905b8282106114de57505050500390f35b91936020611540827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc060019597998495030186526040838a5173ffffffffffffffffffffffffffffffffffffffff815116845201519181858201520190611aa9565b96019201920185949391926114cf565b60405161155c816118be565b73ffffffffffffffffffffffffffffffffffffffff8354168152600183018054611585816122b3565b91611593604051938461195b565b81835260208301905f5260205f20905f905b8382106115cb5750505050600192826020928360029501528152019201920191906114a0565b6001602081926115da866122cb565b8152019301910190916115a5565b3461052357610e776115f936611a04565b92919091612138565b3461052357611626610ac8611616366117f3565b9491909350610abe602054611eef565b60206040517f259982e5000000000000000000000000000000000000000000000000000000008152f35b3461052357611664610d44611616366117f3565b60206040517f21d0ee70000000000000000000000000000000000000000000000000000000008152f35b34610523575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261052357601654808252602082019060165f527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b5124289905f5b818110611706576105e3856105d78187038261195b565b825473ffffffffffffffffffffffffffffffffffffffff168452602090930192600192830192016116ef565b60206040818301928281528451809452019201905f5b8181106117555750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101611748565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361052357565b359073ffffffffffffffffffffffffffffffffffffffff8216820361052357565b9181601f840112156105235782359167ffffffffffffffff8311610523576020838186019501011161052357565b906101607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126105235760043573ffffffffffffffffffffffffffffffffffffffff81168103610523579160a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc8201126105235760249160807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3c8301126105235760c491610144359067ffffffffffffffff8211610523576118ba916004016117c5565b9091565b6040810190811067ffffffffffffffff8211176118da57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6080810190811067ffffffffffffffff8211176118da57604052565b60a0810190811067ffffffffffffffff8211176118da57604052565b6060810190811067ffffffffffffffff8211176118da57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176118da57604052565b60e435908160020b820361052357565b35908160020b820361052357565b9190826080910312610523576040516119d281611907565b60608082946119e0816119ac565b84526119ee602082016119ac565b6020850152604081013560408501520135910152565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc810161014081126105235760a01361052357600491611a458260a46119ba565b91610124359067ffffffffffffffff8211610523576118ba916004016117c5565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b9080602083519182815201916020808360051b8301019401925f915b838310611ad457505050505090565b9091929394602080611b10837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe086600196030187528951611a66565b97019301930191939290611ac5565b90602080835192838152019201905f5b818110611b3c5750505090565b82517fffffffff0000000000000000000000000000000000000000000000000000000016845260209384019390920191600101611b2f565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc60a09101126105235760405190611bab82611923565b8160243573ffffffffffffffffffffffffffffffffffffffff8116810361052357815260443573ffffffffffffffffffffffffffffffffffffffff8116810361052357602082015260643562ffffff811681036105235760408201526084358060020b810361052357606082015260a4359073ffffffffffffffffffffffffffffffffffffffff821682036105235760800152565b60c4359073ffffffffffffffffffffffffffffffffffffffff8216820361052357565b906101a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126105235760043573ffffffffffffffffffffffffffffffffffffffff81168103610523579160a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc8201126105235760249160807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3c8301126105235760c49161014435916101643591610184359067ffffffffffffffff8211610523576118ba916004016117c5565b602081016020825282518091526040820191602060408360051b8301019401925f915b838310611d6657505050505090565b9091929394602080611dc9837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187526040838b5173ffffffffffffffffffffffffffffffffffffffff815116845201519181858201520190611b1f565b97019301930191939290611d57565b6101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126105235760043573ffffffffffffffffffffffffffffffffffffffff81168103610523579160a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc8301126105235760249160c4359160e43591610104359067ffffffffffffffff8211610523576118ba916004016117c5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3c60609101126105235760405190611eb08261193f565b8160c435801515810361052357815260e4356020820152610104359073ffffffffffffffffffffffffffffffffffffffff821682036105235760400152565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611f1c5760010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b9190826040910312610523576020825192015190565b73ffffffffffffffffffffffffffffffffffffffff611f7d826117a4565b16825273ffffffffffffffffffffffffffffffffffffffff611fa1602083016117a4565b166020830152604081013562ffffff8116810361052357611ff96080809362ffffff73ffffffffffffffffffffffffffffffffffffffff94166040870152611feb606082016119ac565b60020b6060870152016117a4565b16910152565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe093818652868601375f8582860101520116010190565b606061208895936120518361014095611f5f565b805160020b60a0840152602081015160020b60c0840152604081015160e08401520151610100820152816101208201520191611fff565b90565b90816020910312610523573573ffffffffffffffffffffffffffffffffffffffff811681036105235790565b3573ffffffffffffffffffffffffffffffffffffffff811681036105235790565b156120df57565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52600160045260245ffd5b7f80000000000000000000000000000000000000000000000000000000000000008114611f1c575f0390565b9160408461219293835f73ffffffffffffffffffffffffffffffffffffffff60215416928551978895869485937f5a6bcfda0000000000000000000000000000000000000000000000000000000085528c6004860161203d565b03925af1908115610518576122719473ffffffffffffffffffffffffffffffffffffffff936121c993612285575b5081019061208b565b1661224e73ffffffffffffffffffffffffffffffffffffffff602154166122436121fc6121f5866120b7565b3084612d19565b84602087019361046861224861221b612214886120b7565b3085612d19565b995f8612801561227c575b61222f906120d8565b5f86138015612273575b61224390156120d8565b6120b7565b9361210c565b9161046873ffffffffffffffffffffffffffffffffffffffff602154169161210c565b565b505f8b13612239565b505f8b12612226565b6122a69060403d6040116122ac575b61229e818361195b565b810190611f49565b506121c0565b503d612294565b67ffffffffffffffff81116118da5760051b60200190565b90604051915f8154908160011c92600183169283156123c2575b6020851084146123955784875286939081156123555750600114612311575b506122719250038361195b565b90505f9291925260205f20905f915b818310612339575050906020612271928201015f612304565b6020919350806001915483858901015201910190918492612320565b602093506122719592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b8201015f612304565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b93607f16936122e5565b90816020910312610523575190565b9293919060209073ffffffffffffffffffffffffffffffffffffffff602154166040519384927f234266d70000000000000000000000000000000000000000000000000000000084526124316004850189611f5f565b60a484015260c483015261010060e4830152815f816124556101048201898c611fff565b03925af18015610518576124d4575b5061248a8373ffffffffffffffffffffffffffffffffffffffff9261227195019061208b565b1661224e73ffffffffffffffffffffffffffffffffffffffff602154166122436124b66121f5866120b7565b8460208701936104686122486124ce612214886120b7565b996120b7565b6020813d6020116124fe575b816124ed6020938361195b565b81010312610523575061248a612464565b3d91506124e0565b90604051918281549182825260208201905f5260205f20925f905b80600783011061271d576122719454918181106126e7575b8181106126b1575b81811061267b575b818110612645575b81811061260f575b8181106125d9575b8181106125a4575b10612577575b50038361195b565b7fffffffff000000000000000000000000000000000000000000000000000000001681526020015f61256f565b9260206001917fffffffff0000000000000000000000000000000000000000000000000000000085831b168152019301612569565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560401b168152019301612561565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560601b168152019301612559565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560801b168152019301612551565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560a01b168152019301612549565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560c01b168152019301612541565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560e01b168152019301612539565b9160089193506101006001917fffffffff000000000000000000000000000000000000000000000000000000008754818160e01b168352818160c01b166020840152818160a01b166040840152818160801b166060840152818160601b166080840152818160401b1660a0840152818160201b1660c08401521660e0820152019401920185929391612521565b9062ffffff60c46020925f60408601916107d0835273ffffffffffffffffffffffffffffffffffffffff8060215416918160806040519a8b998a987f6276cbbe000000000000000000000000000000000000000000000000000000008a528483511660048b0152848d8401511660248b015251166044890152606081015160020b606489015201511660848601521660a48401525af180156105185761284d5750565b6020813d60201161287a575b816128666020938361195b565b8101031261052357518060020b0361052357565b3d9150612859565b60085460ff1680156128915790565b506040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d60048201527f6661696c656400000000000000000000000000000000000000000000000000006024820152602081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115610518575f91612929575b50151590565b90506020813d602011612953575b816129446020938361195b565b8101031261052357515f612923565b3d9150612937565b9091602154925f93602060405180927ff3cd914c00000000000000000000000000000000000000000000000000000000825261299b600483016024611f5f565b8651151560a483015273ffffffffffffffffffffffffffffffffffffffff604084890198895160c486015201511660e4830152610120610104830152815f73ffffffffffffffffffffffffffffffffffffffff826129fe61012482018b8b611fff565b0393165af1801561051857612bbd575b508073ffffffffffffffffffffffffffffffffffffffff92612a3192019061208b565b1673ffffffffffffffffffffffffffffffffffffffff6021541660243573ffffffffffffffffffffffffffffffffffffffff8116810361052357612a76813084612d19565b9351737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561052357604051907ffe74f05b00000000000000000000000000000000000000000000000000000000825285600483015260248201525f81604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561051857612ba8575b506044359073ffffffffffffffffffffffffffffffffffffffff8216928383036104fe579084612b2492610468610457863084612d19565b5073ffffffffffffffffffffffffffffffffffffffff60215416803b156104fa578492918360649260405196879586947f0b0d9c090000000000000000000000000000000000000000000000000000000086526004860152602485015260448401525af180156104ef57612b96575050565b612ba182809261195b565b61019d5750565b612bb59195505f9061195b565b5f935f612aec565b906020823d602011612be9575b81612bd76020938361195b565b81010312610523579050612a31612a0e565b3d9150612bca565b91612c926040858151612c0381611907565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff88815260786020820152670de0b6b3a7640000838201525f6060820152845f73ffffffffffffffffffffffffffffffffffffffff60215416928551968795869485937f5a6bcfda0000000000000000000000000000000000000000000000000000000085528d6004860161203d565b03925af1801561051857612192936040928792612cfd575b50835f73ffffffffffffffffffffffffffffffffffffffff60215416928551978895869485937f5a6bcfda0000000000000000000000000000000000000000000000000000000085528c6004860161203d565b612d1390843d86116122ac5761229e818361195b565b50612caa565b73ffffffffffffffffffffffffffffffffffffffff809381602094165f52168252602460405f2060405194859384927ff135baaa0000000000000000000000000000000000000000000000000000000084526004840152165afa908115610518575f91612d84575090565b90506020813d602011612dab575b81612d9f6020938361195b565b81010312610523575190565b3d9150612d92565b90816020910312610523575180151581036105235790565b90919073ffffffffffffffffffffffffffffffffffffffff1680612e6b57505073ffffffffffffffffffffffffffffffffffffffff600460209260405194859384927f11da60b4000000000000000000000000000000000000000000000000000000008452165af1801561051857612e405750565b612e619060203d602011612e64575b612e59818361195b565b8101906123cc565b50565b503d612e4f565b90929173ffffffffffffffffffffffffffffffffffffffff1691823b1561052357604051937fa58411940000000000000000000000000000000000000000000000000000000085528260048601525a945f816024818389819bf180156105185761303b575b5073ffffffffffffffffffffffffffffffffffffffff1684308214612fc7576020929160649160405195869485937f23b872dd000000000000000000000000000000000000000000000000000000008552600485015288602485015260448401525af18015612fbc57916020918493612f8f575b505b6004604051809581937f11da60b40000000000000000000000000000000000000000000000000000000083525af1908115612f835750612e405750565b604051903d90823e3d90fd5b612fae90833d8511612fb5575b612fa6818361195b565b810190612db3565b505f612f44565b503d612f9c565b6040513d85823e3d90fd5b929050604460209260405194859384927fa9059cbb00000000000000000000000000000000000000000000000000000000845288600485015260248401525af18015612fbc5791602091849361301e575b50612f46565b61303490833d8511612fb557612fa6818361195b565b505f613018565b6130489195505f9061195b565b5f9373ffffffffffffffffffffffffffffffffffffffff612ed056fea164736f6c634300081a000a","sourceMap":"857:6652:97:-:0;;;;;;;3166:4:2;857:6652:97;;3166:4:2;857:6652:97;;;3166:4:2;857:6652:97;3166:4:2;857:6652:97;;1038:4:12;857:6652:97;;;1038:4:12;857:6652:97;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6080806040526004361015610012575f80fd5b5f905f3560e01c9081631ed7831c1461168e5750806321d0ee7014611650578063259982e5146116025780632adbda2a146115e85780632ade3880146114275780633e5e3c231461137f5780633f7286f4146112d7578063575e24b4146111f057806359b1290e1461101057806361bc221a14610fd657806366d9a9a014610e795780636bc141f114610d795780636c2bbe7e14610d305780636fe7e6eb14610c8457806385226c8114610bd3578063916a17c614610afd5780639f063efc14610a98578063b0464fdc146109c2578063b47b2fb1146108c5578063b5508aa914610814578063b6a8b0fa146107d9578063ba414fa614610797578063d0ebdbe71461071a578063dc98354e14610667578063e1b4af6914610613578063e20c9f711461055b578063e30eb84e146101be578063e4660d8c146101a05763fa7626d41461015d575f80fd5b3461019d57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019d57602060ff601f54166040519015158152f35b80fd5b503461019d576101bb6101b236611a04565b92919091612bf1565b80f35b5034610523577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360161012081126105235760a0136105235760607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5c360112610523576040519061022e8261193f565b60a4358015158103610523578252602082019160c435835260e4359073ffffffffffffffffffffffffffffffffffffffff821682036105235760408101918252610104359167ffffffffffffffff83116105235761029260209336906004016117c5565b93909273ffffffffffffffffffffffffffffffffffffffff6021541673ffffffffffffffffffffffffffffffffffffffff6040519485937ff3cd914c0000000000000000000000000000000000000000000000000000000085526102fa600486016004611f5f565b51151560a4850152895160c4850152511660e4830152610120610104830152815f8161032b61012482018a8a611fff565b03925af1801561051857610527575b508073ffffffffffffffffffffffffffffffffffffffff9261035d92019061208b565b169173ffffffffffffffffffffffffffffffffffffffff60215416926004359073ffffffffffffffffffffffffffffffffffffffff82168203610523576103a5823087612d19565b925194737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561052357604051957ffe74f05b00000000000000000000000000000000000000000000000000000000875284600488015260248701525f86604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561051857610502575b84809650506024359073ffffffffffffffffffffffffffffffffffffffff8216938483036104fe578361046e92610468610457863084612d19565b986104638b8b136120d8565b61210c565b92612dcb565b5073ffffffffffffffffffffffffffffffffffffffff60215416803b156104fa5784928360649260405196879586947f0b0d9c090000000000000000000000000000000000000000000000000000000086526004860152602485015260448401525af180156104ef576104de5750f35b816104e89161195b565b61019d5780f35b6040513d84823e3d90fd5b8480fd5b8680fd5b9350935f61050f9161195b565b5f92849061041c565b6040513d5f823e3d90fd5b5f80fd5b906020823d602011610553575b816105416020938361195b565b8101031261052357905061035d61033a565b3d9150610534565b34610523575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105235760405180602060155491828152019060155f527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec475905f5b8181106105e7576105e3856105d78187038261195b565b60405191829182611732565b0390f35b825473ffffffffffffffffffffffffffffffffffffffff168452602090930192600192830192016105c0565b346105235761063d61062436611dd8565b945092610635602093929354611eef565b6020556123db565b60206040517fe1b4af69000000000000000000000000000000000000000000000000000000008152f35b346105235760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105235761069e611781565b5060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc360112610523576106f06106d4611c40565b6106df602054611eef565b6020556106eb36611b74565b6127aa565b60206040517fdc98354e000000000000000000000000000000000000000000000000000000008152f35b346105235760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105235760043573ffffffffffffffffffffffffffffffffffffffff8116809103610523577fffffffffffffffffffffffff000000000000000000000000000000000000000060215416176021555f80f35b34610523575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105235760206107cf612882565b6040519015158152f35b34610523576107ea61062436611dd8565b60206040517fb6a8b0fa000000000000000000000000000000000000000000000000000000008152f35b34610523575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105235760195461084e816122b3565b9061085c604051928361195b565b80825260195f9081527f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c9695602084015b8383106108a857604051602080825281906105e390820188611aa9565b6001602081926108b7856122cb565b81520192019201919061088b565b34610523576101607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610523576108fd611781565b5060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc3601126105235760607fffffffffffffffffffffffffffffffffffffffffffffffffff