@uniswap/v4-core
Version:
🦄 Core smart contracts of Uniswap v4
1 lines • 213 kB
JSON
{"abi":[{"type":"function","name":"IS_TEST","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"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":"pool","inputs":[],"outputs":[{"name":"slot0","type":"bytes32","internalType":"Slot0"},{"name":"feeGrowthGlobal0X128","type":"uint256","internalType":"uint256"},{"name":"feeGrowthGlobal1X128","type":"uint256","internalType":"uint256"},{"name":"liquidity","type":"uint128","internalType":"uint128"}],"stateMutability":"view"},{"type":"function","name":"setUp","inputs":[],"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":"function","name":"testTick_clear_deletesAllTheDataInTheTick","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"testTick_cross_flipsTheGrowthVariables","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"testTick_cross_twoFlipsAreNoOp","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"testTick_getFeeGrowthInside_returns0ForTwoUninitializedTicksIfTickIsAbove","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"testTick_getFeeGrowthInside_returns0ForTwoUninitializedTicksIfTickIsBelow","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"testTick_getFeeGrowthInside_returnsAllForTwoUninitializedTicksIfTickIsInside","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"testTick_getFeeGrowthInside_subtractsLowerTickIfAbove","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"testTick_getFeeGrowthInside_subtractsUpperAndLowerTickIfInside","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"testTick_getFeeGrowthInside_subtractsUpperTickIfBelow","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"testTick_getFeeGrowthInside_worksCorrectlyWithOverflowOnInsideTick","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"testTick_tickSpacingToMaxLiquidityPerTick_gasCost60TickSpacing","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"testTick_tickSpacingToMaxLiquidityPerTick_gasCostMaxTickSpacing","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"testTick_tickSpacingToMaxLiquidityPerTick_gasCostMinTickSpacing","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"testTick_tickSpacingToMaxLiquidityPerTick_returnsTheCorrectValueFor2302","inputs":[],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"testTick_tickSpacingToMaxLiquidityPerTick_returnsTheCorrectValueForEntireRange","inputs":[],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"testTick_tickSpacingToMaxLiquidityPerTick_returnsTheCorrectValueForHighFee","inputs":[],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"testTick_tickSpacingToMaxLiquidityPerTick_returnsTheCorrectValueForLowFee","inputs":[],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"testTick_tickSpacingToMaxLiquidityPerTick_returnsTheCorrectValueForMaxTickSpacing","inputs":[],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"testTick_tickSpacingToMaxLiquidityPerTick_returnsTheCorrectValueForMediumFee","inputs":[],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"testTick_tickSpacingToMaxLiquidityPerTick_returnsTheCorrectValueForMinTickSpacing","inputs":[],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"testTick_tickSpacingToParametersInvariants_fuzz","inputs":[{"name":"tickSpacing","type":"int24","internalType":"int24"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"testTick_update_assumesAllGrowthHappensBelowTicksLteCurrentTick","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"testTick_update_doesNotFlipFromNonzeroToGreaterNonzero","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"testTick_update_doesNotFlipFromNonzeroToLesserZero","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"testTick_update_doesNotSetAnyGrowthFieldsForTicksGtCurrentTick","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"testTick_update_doesNotSetAnyGrowthFieldsIfTickIsAlreadyInitialized","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"testTick_update_flipsFromNonzeroToZero","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"testTick_update_flipsFromZeroToNonzero","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"testTick_update_fuzz","inputs":[{"name":"liquidityGross","type":"uint128","internalType":"uint128"},{"name":"liquidityNet","type":"int128","internalType":"int128"},{"name":"liquidityDelta","type":"int128","internalType":"int128"},{"name":"upper","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"testTick_update_liquidityParsing_parsesMaxInt128StoredLiquidityGrossAfterUpdate","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"testTick_update_liquidityParsing_parsesMaxInt128StoredLiquidityGrossBeforeUpdate","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"testTick_update_liquidityParsing_parsesMaxUint128StoredLiquidityGrossAfterUpdate","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"testTick_update_liquidityParsing_parsesMaxUint128StoredLiquidityGrossBeforeUpdate","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"testTick_update_netsTheLiquidityBasedOnUpperFlag","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"testTick_update_revertsOnOverflowLiquidityGross","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_getPoolBitmapInfo","inputs":[{"name":"word","type":"int16","internalType":"int16"},{"name":"bitmap","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_getPoolTickInfo","inputs":[{"name":"tick","type":"int24","internalType":"int24"},{"name":"info","type":"tuple","internalType":"struct Pool.TickInfo","components":[{"name":"liquidityGross","type":"uint128","internalType":"uint128"},{"name":"liquidityNet","type":"int128","internalType":"int128"},{"name":"feeGrowthOutside0X128","type":"uint256","internalType":"uint256"},{"name":"feeGrowthOutside1X128","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"nonpayable"},{"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}],"bytecode":{"object":"0x60808060405234602f57600160ff19600c541617600c55600160ff19601f541617601f5561670490816100348239f35b5f80fdfe60806040526004361015610011575f80fd5b5f803560e01c806301cd29c4146148a357806301e47b5d146148025780630901f8e5146147ab5780630a9254e4146146e05780630ad2903d146145c5578063161a1f831461457d57806316f0115b146145175780631ed7831c1461446f57806321c4eaa41461416c57806325e21ffc1461401557806326badc4314613bb15780632a2b196b14613a025780632ade38801461384157806337e09102146135155780633a970d17146133ea5780633e5e3c23146133415780633f430189146131d95780633f7286f41461313057806348a07da314612f4f578063511eea6614612d6b57806351b153d214612b8457806351c2420914612b1f5780635a59e2aa14612ac1578063609c0de514612a7157806366d9a9a0146129165780636f8da26b146127d057806375527195146125ef5780637692607114611ed85780637fb3882c14611cc457806385226c8114611c145780638f1e65bc14611ab4578063916a17c6146119df578063aec0868114611846578063b0464fdc14611771578063b0d769ea1461162b578063b1c6f00d1461144a578063b5508aa91461139a578063ba414fa614611357578063bf709bea1461117a578063c1a938e714610fa3578063d0af9ccf14610c8e578063de7c548a14610a0f578063df8453a1146108e9578063e20c9f7114610830578063eafa573914610757578063ebcdcb0c146105cf578063f14be2d11461056c578063f56a8a5914610511578063fa7626d4146104d0578063ff8b603c1461046b5763ffa9a3621461024b575f80fd5b3461046857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046857610357610284614b9f565b60016040820190815260026060830181815260038452600460208086019182525f9390935260249092529251905160801b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff91909116177f47bb5529a97e2b401b32950f6360fbc9e3f4e70b887dc0f9b9ad1f7402ca11da55517f47bb5529a97e2b401b32950f6360fbc9e3f4e70b887dc0f9b9ad1f7402ca11db55517f47bb5529a97e2b401b32950f6360fbc9e3f4e70b887dc0f9b9ad1f7402ca11dc55565b60025f5260246020527f47bb5529a97e2b401b32950f6360fbc9e3f4e70b887dc0f9b9ad1f7402ca11db805460070390557f47bb5529a97e2b401b32950f6360fbc9e3f4e70b887dc0f9b9ad1f7402ca11dc805460090390556103b8615935565b816040820151737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561045957604051907f98296c540000000000000000000000000000000000000000000000000000000082526004820152600660248201528181604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561045d57610444575b506104416060830151615b5c565b80f35b8161044e916149ac565b61045957815f610433565b5080fd5b6040513d84823e3d90fd5b80fd5b50346104685760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610468576004358060010b8091036104595761044190602435908084526025602052816040852055835260256020526040832054615d38565b503461046857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046857602060ff601f54166040519015158152f35b503461046857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610468576104416fffffffffffffffffffffffffffffffff61056661055f615534565b919061602e565b16615a6e565b503461046857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610468576105a3614b9f565b506105ac615765565b505061044160606105bb6159ad565b6105c86040820151615a6e565b0151615cc1565b503461046857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046857737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561046857806040517f3cad9d7b00000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f7469636b53706163696e67546f4d61784c69717569646974795065725469636b60448201527f5f676173436f737436305469636b53706163696e6700000000000000000000006064820152818160848183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561045d57610742575b50506040517ff6402eda00000000000000000000000000000000000000000000000000000000815260208160048185737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561045d57610716575080f35b6107379060203d60201161073b575b61072f81836149ac565b81019061502d565b5080f35b503d610725565b8161074c916149ac565b61046857805f6106c2565b503461046857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610468576f7ffffffffffffffffffffffffffffffe6107a081615864565b5050737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561045957816040517ff4844814000000000000000000000000000000000000000000000000000000008152818160048183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561045d5761081b575b5061081682615864565b505080f35b81610825916149ac565b61045957815f61080c565b503461046857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126104685760405180916020601554928381520191601582527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec475915b8181106108bd576108b9856108ad818703826149ac565b60405191829182614905565b0390f35b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201610896565b503461046857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610468576109f5610923614b9f565b60026040820181815260036060840190815285845260208085018781525f94909452602490529251915160801b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091177f47bb5529a97e2b401b32950f6360fbc9e3f4e70b887dc0f9b9ad1f7402ca11da55517f47bb5529a97e2b401b32950f6360fbc9e3f4e70b887dc0f9b9ad1f7402ca11db55517f47bb5529a97e2b401b32950f6360fbc9e3f4e70b887dc0f9b9ad1f7402ca11dc55565b610441610a0a610a036160a7565b9190615bd3565b615c4a565b503461046857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610468576f04924924924924924924924924924924737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561045957816040517f98296c540000000000000000000000000000000000000000000000000000000081528260048201528260248201528181604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561045d57610c79575b50617fff9050610ad581601b61507b565b60020b908015610c4c57617fff610b0d917ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff276180561507b565b60020b90838282039212818312811691831390151617610c1f57617fff900590600182019183600184129112908015821691151617610c1f57818102918183041490151715610bf2578190737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610bef57604051907f8466f41500000000000000000000000000000000000000000000000000000000825260048201526fffffffffffffffffffffffffffffffff60248201528181604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561045d57610bde5750f35b81610be8916149ac565b6104685780f35b50fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b6024837f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b81610c83916149ac565b61045957815f610ac4565b503461046857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046857610e84610cc8614b9f565b60026040820190815260036060830190815284835260208084018681527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe5f5260249091528351815160801b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff91909116177fcad8f8e22db9bc9fe5526a2e235ff4c7ffe44cdab36ac33494e6af5e2724b1025582517fcad8f8e22db9bc9fe5526a2e235ff4c7ffe44cdab36ac33494e6af5e2724b1035581517fcad8f8e22db9bc9fe5526a2e235ff4c7ffe44cdab36ac33494e6af5e2724b10455859290916001916004905b52528183525260025f526024602090815281519082015160801b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff91909116177f47bb5529a97e2b401b32950f6360fbc9e3f4e70b887dc0f9b9ad1f7402ca11da5560408101517f47bb5529a97e2b401b32950f6360fbc9e3f4e70b887dc0f9b9ad1f7402ca11db55606001517f47bb5529a97e2b401b32950f6360fbc9e3f4e70b887dc0f9b9ad1f7402ca11dc55565b80610e8d6160a7565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610f9f57604051907f98296c540000000000000000000000000000000000000000000000000000000082526004820152600960248201528281604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115610f94578391610f7f575b5050737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610bef57604051907f98296c540000000000000000000000000000000000000000000000000000000082526004820152600b60248201528181604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561045d57610bde5750f35b81610f89916149ac565b610bef57815f610f06565b6040513d85823e3d90fd5b5050fd5b503461046857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610468576110a9610fdd614b9f565b60408101838152606082018481526fffffffffffffffffffffffffffffffff808452602080850187815260025f5260249091529351935160801b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000169316929092177f47bb5529a97e2b401b32950f6360fbc9e3f4e70b887dc0f9b9ad1f7402ca11da55517f47bb5529a97e2b401b32950f6360fbc9e3f4e70b887dc0f9b9ad1f7402ca11db55517f47bb5529a97e2b401b32950f6360fbc9e3f4e70b887dc0f9b9ad1f7402ca11dc55565b6110b1615627565b50506110bb615935565b816fffffffffffffffffffffffffffffffff825116737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561045957604051907f98296c5400000000000000000000000000000000000000000000000000000000825260048201526ffffffffffffffffffffffffffffffffe60248201528181604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561045d57611165575b506104416020830151600f0b615e24565b8161116f916149ac565b61045957815f611154565b503461046857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610468576d097451ff859c3282305ffa26a9c5737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561045957816040517f98296c540000000000000000000000000000000000000000000000000000000081528260048201528260248201528181604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561045d57611342575b50600191905061124082620d89e861507b565b60020b918015610c4c576001611277917ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff276180561507b565b60020b91838382039312818412811691841390151617610c1f57600182019183600184129112908015821691151617610c1f57818102918183041490151715610bf2578190737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610bef57604051907f8466f41500000000000000000000000000000000000000000000000000000000825260048201526fffffffffffffffffffffffffffffffff60248201528181604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561045d57610bde5750f35b8161134c916149ac565b61045957815f61122d565b503461046857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126104685760206113906150f9565b6040519015158152f35b503461046857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610468576019546113d581614c6e565b916113e360405193846149ac565b818352601981527f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c9695602084015b83831061142d57604051602080825281906108b990820188614a30565b60016020819261143c85614c86565b815201920192019190611410565b503461046857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610468576e023741fda549e280617f579868b2ee737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561045957816040517f98296c540000000000000000000000000000000000000000000000000000000081528260048201528260248201528181604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561045d57611616575b50603c905061150f816139c361507b565b60020b908015610c4c57603c611546917ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff276180561507b565b60020b90838282039212818312811691831390151617610c1f57603c900590600182019183600184129112908015821691151617610c1f57818102918183041490151715610bf2578190737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610bef57604051907f8466f41500000000000000000000000000000000000000000000000000000000825260048201526fffffffffffffffffffffffffffffffff60248201528181604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561045d57610bde5750f35b81611620916149ac565b61045957815f6114fe565b503461046857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046857737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561046857806040517f3cad9d7b00000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f7469636b53706163696e67546f4d61784c69717569646974795065725469636b60448201527f5f676173436f73744d61785469636b53706163696e67000000000000000000006064820152818160848183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561045d576107425750506040517ff6402eda00000000000000000000000000000000000000000000000000000000815260208160048185737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561045d57610716575080f35b503461046857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046857601c546117ac81614c6e565b916117ba60405193846149ac565b818352601c81527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a211602084015b8383106117fc57604051806108b98782614afb565b6002602060019260405161180f81614990565b73ffffffffffffffffffffffffffffffffffffffff8654168152611834858701614d89565b838201528152019201920191906117e7565b503461046857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126104685761187d614b9f565b50611886615765565b5050740100000000000000000000000000000000000000006020547fffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffff1617806020556006602155600760225560018252602460205260408220908154916fffffffffffffffffffffffffffffffff83169060018201938460801c6119d2576001906fffffffffffffffffffffffffffffffff8616931594856119aa575b5060801d600f0b017fffffffffffffffffffffffffffffffff8000000000000000000000000000000081126f7fffffffffffffffffffffffffffffff82131761197d5760801b8217905550505061044160606105bb6159ad565b6024867f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b60a01c60020b8213156119be575b5f611923565b6021548284015560225460028401556119b8565b6393dafdf186526004601cfd5b503461046857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046857601d54611a1a81614c6e565b91611a2860405193846149ac565b818352601d81527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f602084015b838310611a6a57604051806108b98782614afb565b60026020600192604051611a7d81614990565b73ffffffffffffffffffffffffffffffffffffffff8654168152611aa2858701614d89565b83820152815201920192019190611a55565b503461046857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126104685761044176fffffc00000000000000000000000000000000000000006020547fffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffff161780602055600f602155600f6022557ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe8352602460205260408320600284526024602052604084209160a01c60020b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81125f14611bbf575090611bba906002806001850154600184015490039401549101549003915b6159ee565b600213611be757611bba906002806001850154600184015490039401549101549003916159ee565b90611bba9060026021546001850154900360018301549003938160225491015490039101549003916159ee565b503461046857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046857601a54611c4f81614c6e565b91611c5d60405193846149ac565b818352601a81527f057c384a7d1c54f3a1b2e5e67b2617b8224fdfd1ea7234eea573a6ff665ff63e602084015b838310611ca757604051602080825281906108b990820188614a30565b600160208192611cb685614c86565b815201920192019190611c8a565b503461046857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046857611e39611cfe614b9f565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc604082019081527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd6060830190815284835260208084018681527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe5f5260249091528351815160801b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff91909116177fcad8f8e22db9bc9fe5526a2e235ff4c7ffe44cdab36ac33494e6af5e2724b1025582517fcad8f8e22db9bc9fe5526a2e235ff4c7ffe44cdab36ac33494e6af5e2724b1035581517fcad8f8e22db9bc9fe5526a2e235ff4c7ffe44cdab36ac33494e6af5e2724b1045585929091600591600390610dc1565b80611e426160a7565b9190737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561045957604051907f98296c540000000000000000000000000000000000000000000000000000000082526004820152601060248201528181604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561045d57611ec3575b5061044182615bd3565b81611ecd916149ac565b61045957815f611eb9565b50346104685760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046857611f10614964565b60020b8181121561257a57197f8000000000000000000000000000000000000000000000000000000000000000037f8000000000000000000000000000000000000000000000000000000000000000811161251d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811161251d577f8000000000000000000000000000000000000000000000000000000000007fff7f8000000000000000000000000000000000000000000000000000000000000001611fda9261628c565b7f800000000000000000000000000000000000000000000000000000000000000081101561254a577f8000000000000000000000000000000000000000000000000000000000000000037f8000000000000000000000000000000000000000000000000000000000000000811161251d57196001810180911161251d57905b604051917fa322c40e0000000000000000000000000000000000000000000000000000000083528060048401528183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831561045d578293612499575b50818060409461216361218f8751926120c989856149ac565b600c84527f426f756e6420726573756c7400000000000000000000000000000000000000006020850152885192839161213360208401967f4b5c42770000000000000000000000000000000000000000000000000000000088528c602486015260648501906149ed565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc8483030160448501526149ed565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826149ac565b51906a636f6e736f6c652e6c6f675afa5060020b916121b6836121b18161503c565b61507b565b926121c4816121b18161506a565b93600184837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff276180712837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff27618050383620d89e80503016fffffffffffffffffffffffffffffffff04948160020b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800000811461197d576122698260020b91870360020b82615f40565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15612495578451907f5a362d4500000000000000000000000000000000000000000000000000000000825260048201528560248201528581604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561248b57908691612472575b50506122eb8282615092565b60020b831561244557906123078461230c94930760020b615dae565b615092565b60020b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82147fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800000821416612418570560020b9260018401809411610c1f5782936fffffffffffffffffffffffffffffffff61238792166150d9565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610f9f578051917fa8d4d1d90000000000000000000000000000000000000000000000000000000083526fffffffffffffffffffffffffffffffff600484015260248301528282604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811561240f5750610bde5750f35b513d84823e3d90fd5b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b6024867f4e487b710000000000000000000000000000000000000000000000000000000081526012600452fd5b8161247c916149ac565b61248757845f6122df565b8480fd5b85513d88823e3d90fd5b8580fd5b9092503d8083833e6124ab81836149ac565b8101906020818303126125195780519067ffffffffffffffff8211612515570181601f82011215612519578051906124e282614bc3565b926124f060405194856149ac565b828452602083830101116125155781849260208093018386015e83010152915f6120b0565b8380fd5b8280fd5b6024827f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b7f8000000000000000000000000000000000000000000000000000000000000000810190811161251d5790612059565b7f8000000000000000000000000000000000000000000000000000000000000000810180911161251d577f8000000000000000000000000000000000000000000000000000000000007fff7f8000000000000000000000000000000000000000000000000000000000000001611fda9261628c565b503461046857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610468576d5e8aff9b8c506abaea8e9966c87d737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561045957816040517f98296c540000000000000000000000000000000000000000000000000000000081528260048201528260248201528181604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561045d576127bb575b50600a90506126b48162015a9761507b565b60020b908015610c4c57600a6126eb917ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff276180561507b565b60020b90838282039212818312811691831390151617610c1f57600a900590600182019183600184129112908015821691151617610c1f57818102918183041490151715610bf2578190737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610bef57604051907f8466f41500000000000000000000000000000000000000000000000000000000825260048201526fffffffffffffffffffffffffffffffff60248201528181604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561045d57610bde5750f35b816127c5916149ac565b61045957815f6126a2565b503461046857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046857737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561046857806040517f3cad9d7b00000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f7469636b53706163696e67546f4d61784c69717569646974795065725469636b60448201527f5f676173436f73744d696e5469636b53706163696e67000000000000000000006064820152818160848183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561045d576107425750506040517ff6402eda00000000000000000000000000000000000000000000000000000000815260208160048185737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561045d57610716575080f35b503461046857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046857601b5461295181614c6e565b61295e60405191826149ac565b818152601b83526020810191837f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc1845b838310612a3657868587604051928392602084019060208552518091526040840160408260051b8601019392905b8282106129cb57505050500390f35b91936020612a26827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0600195979984950301865288519083612a1683516040845260408401906149ed565b9201519084818403910152614aa6565b96019201920185949391926129bc565b60026020600192604051612a4981614990565b612a5286614c86565b8152612a5f858701614d89565b8382015281520192019201919061298e565b503461046857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046857612aab610284614b9f565b60025f52602460205261044160606105bb615935565b503461046857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046857612af8615534565b50506104416fffffffffffffffffffffffffffffffff612b1961055f6153ee565b166159ee565b503461046857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261046857612b56615534565b50506104416fffffffffffffffffffffffffffffffff612b7e612b77615534565b9190615fb6565b16615cc1565b503461046857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610468576f55555555555555555555555555555555737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561045957816040517f98296c540000000000000000000000000000000000000000000000000000000081528260048201528260248201528181604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561045d57612d56575b50620d89e89050612c4b81600161507b565b60020b908015610c4c57620d89e8612c84917ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff276180561507b565b60020b90838282039212818312811691831390151617610c1f57620d89e8900590600182019183600184129112908015821691151617610c1f57818102918183041490151715610bf2578190737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610bef57604051907f8466f41500000000000000000000000000000000000000000000000000000000825260048201526fffffffffffffffffffffffffffffffff60248201528181604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561045d57610bde5750f35b81612d60916149ac565b61045957815f612c39565b503461046857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610468576e54e42523d03fab1bdadc2fc054e425737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561045957816040517f98296c540000000000000000000000000000000000000000000000000000000081528260048201528260248201528181604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561045d57612f3a575b506108fe9050612e318161018161507b565b60020b908015610c4c576108fe612e69917ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff276180561507b565b60020b90838282039212818312811691831390151617610c1f576108fe900590600182019183600184129112908015821691151617610c1f57818102918183041490151715610bf2578190737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610bef57604051907f8466f41500000000000000000000000000000000000000000000000000000000825260048201526fffffffffffffffffffffffffffffffff60248201528181604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561045d57610bde5750f35b81612f44916149ac565b61045957815f612e1f565b503461046857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610468576e07629a82f8ac2ab20d452da356d55c737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561045957816040517f98296c540000000000000000000000000000000000000000000000000000000081528260048201528260248201528181604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561045d5761311b575b5060c890506130148161115461507b565b60020b908015610c4c5760c861304b917ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff276180561507b565b60020b90838282039212818312811691831390151617610c1f5760c8900590600182019183600184129112908015821691151617610c1f57818102918183041490151715610bf2578190737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610bef57604051907f8466f41500000000000000000000000000000000000000000000000000000000825260048201526fffffffffffffffffffffffffffffffff60248201528181604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561045d57610bde5750f35b81613125916149ac565b61045957815f613003565b503461046857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126104685760405180916020601754928381520191601782527fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c15915b8181106131ad576108b9856108ad818703826149ac565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201613196565b503461046857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610468576132f2613213614b9f565b6040810183815260608201848152600183526f7fffffffffffffffffffffffffffffff602080850191825260025f52602490529251925160801b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff93909316929092177f47bb5529a97e2b401b32950f6360fbc9e3f4e70b887dc0f9b9ad1f7402ca11da55517f47bb5529a97e2b401b32950f6360fbc9e3f4e70b887dc0f9b9ad1f7402ca11db55517f47bb5529a97e2b401b32950f6360fbc9e3f4e70b887dc0f9b9ad1f7402ca11dc55565b6132fa615627565b50506104416020613309615935565b6133256fffffffffffffffffffffffffffffffff8251166159ee565b01516f7ffffffffffffffffffffffffffffffe90600f0b615f40565b503461046857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126104685760405180916020601854928381520191601882527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e915b8181106133be576108b9856108ad818703826149ac565b825473ffffffffffffffffffffffffffffffffffffffff168452602090930192600192830192016133a7565b503461046857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610468576109f5613424614b9f565b60026040820190815260036060830190815284835260208084018681527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe5f5260249091529251925160801b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff93909316929092177fcad8f8e22db9bc9fe5526a2e235ff4c7ffe44cdab36ac33494e6af5e2724b10255517fcad8f8e22db9bc9fe5526a2e235ff4c7ffe44cdab36ac33494e6af5e2724b10355517fcad8f8e22db9bc9fe5526a2e235ff4c7ffe44cdab36ac33494e6af5e2724b10455565b5034613806575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126138065761362e61354f614b9f565b5f60408201818152606083018281526f80000000000000000000000000000000845260208085018481526002909452602490529251915160801b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091177f47bb5529a97e2b401b32950f6360fbc9e3f4e70b887dc0f9b9ad1f7402ca11da55517f47bb5529a97e2b401b32950f6360fbc9e3f4e70b887dc0f9b9ad1f7402ca11db55517f47bb5529a97e2b401b32950f6360fbc9e3f4e70b887dc0f9b9ad1f7402ca11dc55565b740100000000000000000000000000000000000000006020547fffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffff1617806020556001602155600260225560025f52602460205260405f20908154916fffffffffffffffffffffffffffffffff8316906f7fffffffffffffffffffffffffffffff8201938460801c613834576f7fffffffffffffffffffffffffffffff906fffffffffffffffffffffffffffffffff86169315948561380a575b5060801d600f0b017fffffffffffffffffffffffffffffffff8000000000000000000000000000000081126f7fffffffffffffffffffffffffffffff821317610bf25760801b8217905550505061373c615935565b6fffffffffffffffffffffffffffffffff815116737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561380657604051907f98296c5400000000000000000000000000000000000000000000000000000000825260048201526fffffffffffffffffffffffffffffffff60248201525f81604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156137fb576137e5575b506020610441910151600f0b615eba565b6137f29192505f906149ac565b5f9060206137d4565b6040513d5f823e3d90fd5b5f80fd5b60a01c60020b6002131561381f575b5f6136e7565b60215460018401556022546002840155613819565b6393dafdf15f526004601cfd5b34613806575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261380657601e5461387b81614c6e565b9061388960405192836149ac565b808252602082019081601e5f527f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e3505f915b83831061396a57848660405191829160208301906020845251809152604083019060408160051b85010192915f905b8282106138f857505050500390f35b9193602061395a827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc060019597998495030186526040838a5173ffffffffffffffffffffffffffffffffffffffff815116845201519181858201520190614a30565b96019201920185949391926138e9565b60405161397681614990565b73ffffffffffffffffffffffffffffffffffffffff835416815260018301805461399f81614c6e565b916139ad60405193846149ac565b81835260208301905f5260205f20905f905b8382106139e55750505050600192826020928360029501528152019201920191906138ba565b6001602081926139f486614c86565b8152019301910190916139bf565b346138065760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261380657613a39614964565b60807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc3601126138065760405190613a7082614974565b602435916fffffffffffffffffffffffffffffffff8316830361380657613baf928152613ba6613a9e614954565b60208301908152604083019060643582526060840194608435865260020b805f52602460205260405f206fffffffffffffffffffffffffffffffff8651167fffffffffffffffffffffffffffffffff00000000000000000000000000000000845160801b161781558351600182015560028751910155613b1c614b9f565b505f526024602052613ba660405f209160405195613b3987614974565b613b978454916fffffffffffffffffffffffffffffffff83168952602089019260801d600f0b83526fffffffffffffffffffffffffffffffff80600260018901549860408d01998a5201549a606081019b8c52511691511690615d38565b51600f0b9051600f0b90615f40565b51905190615d38565b005b346138065760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112613806576004356fffffffffffffffffffffffffffffffff8116809103613806576024359081600f0b80920361380657613c14614954565b9160643592831515918285036138065773ffffffffffffffffffffffffffffffffffffffff6027541693604051927f402d44fb000000000000000000000000000000000000000000000000000000008452816004850152600f0b93846024850152602084604481895afa5f9481613fc8575b50613cab5750505050505050613baf613c9d614bfd565b613ca5614c2c565b906161cd565b6020906064604051809881937f274d8e2a00000000000000000000000000000000000000000000000000000000835260048301528660248301528860448301525afa5f9581613f8a575b50613d0b57505050505050613baf613c9d614bfd565b613deb9160405191613d1c83614974565b825260208083019182525f6040840181815260608501828152600290925260249092529251915160801b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091177f47bb5529a97e2b401b32950f6360fbc9e3f4e70b887dc0f9b9ad1f7402ca11da55517f47bb5529a97e2b401b32950f6360fbc9e3f4e70b887dc0f9b9ad1f7402ca11db55517f47bb5529a97e2b401b32950f6360fbc9e3f4e70b887dc0f9b9ad1f7402ca11dc55565b740100000000000000000000000000000000000000006020547fffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffff161793846020555f6021555f60225560025f52602460205260405f20948554936fffffffffffffffffffffffffffffffff85169460801d818601938460801c613834576fffffffffffffffffffffffffffffffff851696159384613f60575b5015613f1457600f0b03936f7fffffffffffffffffffffffffffffff85137fffffffffffffffffffffffffffffffff80000000000000000000000000000000861217610bf257613baf966020955b60801b82179055505050613f05613ee7615935565b916fffffffffffffffffffffffffffffffff80845116911690615d38565b0151600f0b90600f0b90615f40565b600f0b01937fffffffffffffffffffffffffffffffff8000000000000000000000000000000085126f7fffffffffffffffffffffffffffffff861317610bf257613baf96602095613ed2565b60a01c60020b60021315613f75575b89613e84565b60215460018a015560225460028a0155613f6f565b9095506020813d602011613fc0575b81613fa6602093836149ac565b81010312613806575180600f0b8103613806579487613cf5565b3d9150613f99565b9094506020813d60201161400d575b81613fe4602093836149ac565b8101031261380657516fffffffffffffffffffffffffffffffff81168103613806579388613c86565b3d9150613fd7565b34613806575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126138065761412f61404e614b9f565b5f60408201818152606083018281528284526f7ffffffffffffffffffffffffffffffe6020808601918252600290945260249093529251915160801b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091177f47bb5529a97e2b401b32950f6360fbc9e3f4e70b887dc0f9b9ad1f7402ca11da55517f47bb5529a97e2b401b32950f6360fbc9e3f4e70b887dc0f9b9ad1f7402ca11db55517f47bb5529a97e2b401b32950f6360fbc9e3f4e70b887dc0f9b9ad1f7402ca11dc55565b6141376151d2565b5050613baf6020614146615935565b6141626fffffffffffffffffffffffffffffffff825116615a6e565b0151600f0b615eba565b34613806575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112613806576141a2614b9f565b506141ab6152e8565b5050602054807fffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffff166020555f6021555f6022555f8052602460205260405f20908154916fffffffffffffffffffffffffffffffff83169060018201938460801c613834577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff906fffffffffffffffffffffffffffffffff861693159485614438575b5060801d600f0b016f7fffffffffffffffffffffffffffffff81137fffffffffffffffffffffffffffffffff80000000000000000000000000000000821217610bf25760801b82179055505050602054807fffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffff166020555f6021555f6022555f8052602460205260405f20908154916fffffffffffffffffffffffffffffffff83169060038201938460801c613834577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd906fffffffffffffffffffffffffffffffff861693159485614401575b5060801d600f0b016f7fffffffffffffffffffffffffffffff81137fffffffffffffffffffffffffffffffff80000000000000000000000000000000821217610bf25760801b8217905550505061438f615534565b5050614399614b9f565b505f80526024602052613baf60405f206143f86fffffffffffffffffffffffffffffffff6040516143c981614974565b60028454948386168352602083019560801d600f0b865260018101546040840152015460608201525116615b5c565b51600f0b615e24565b60a01c6bffffffffffffffffff0000001660020b5f1315614423575b8661433a565b6021546001840155602254600284015561441d565b60a01c6bffffffffffffffffff0000001660020b5f131561445a575b8661424d565b60215460018401556022546002840155614454565b34613806575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126138065760405180602060165491828152019060165f527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b5124289905f5b8181106144eb576108b9856108ad818703826149ac565b825473ffffffffffffffffffffffffffffffffffffffff168452602090930192600192830192016144d4565b34613806575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126138065760806020546021546022546fffffffffffffffffffffffffffffffff6023541691604051938452602084015260408301526060820152f35b34613806575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261380657613baf6145c06145b96160a7565b9190615ae5565b615ae5565b34613806575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261380657602080547fffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffff167404000000000000000000000000000000000000000017808255600f6021819055602255602490915260025f819052613baf917f47bb5529a97e2b401b32950f6360fbc9e3f4e70b887dc0f9b9ad1f7402ca11da917fcad8f8e22db9bc9fe5526a2e235ff4c7ffe44cdab36ac33494e6af5e2724b1029160a01c900b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe811215611bbf575090611bba906002806001850154600184015490039401549101549003916159ee565b34613806575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126138065760405161028d80820182811067ffffffffffffffff82111761477e57829161646b833903905ff080156137fb5773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff000000000000000000000000000000000000000060275416176027555f80f35b7f4e487