@uniswap/v4-core
Version:
🦄 Core smart contracts of Uniswap v4
1 lines • 669 kB
JSON
{"abi":[{"type":"receive","stateMutability":"payable"},{"type":"function","name":"IS_TEST","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"LIQUIDITY_PARAMS","inputs":[],"outputs":[{"name":"tickLower","type":"int24","internalType":"int24"},{"name":"tickUpper","type":"int24","internalType":"int24"},{"name":"liquidityDelta","type":"int256","internalType":"int256"},{"name":"salt","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"MAX_PRICE_LIMIT","inputs":[],"outputs":[{"name":"","type":"uint160","internalType":"uint160"}],"stateMutability":"view"},{"type":"function","name":"MIN_PRICE_LIMIT","inputs":[],"outputs":[{"name":"","type":"uint160","internalType":"uint160"}],"stateMutability":"view"},{"type":"function","name":"REMOVE_LIQUIDITY_PARAMS","inputs":[],"outputs":[{"name":"tickLower","type":"int24","internalType":"int24"},{"name":"tickUpper","type":"int24","internalType":"int24"},{"name":"liquidityDelta","type":"int256","internalType":"int256"},{"name":"salt","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"SWAP_PARAMS","inputs":[],"outputs":[{"name":"zeroForOne","type":"bool","internalType":"bool"},{"name":"amountSpecified","type":"int256","internalType":"int256"},{"name":"sqrtPriceLimitX96","type":"uint160","internalType":"uint160"}],"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":"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":"test_fuzz_initialize","inputs":[{"name":"key0","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":"test_initialize_failsIfTickSpaceNeg","inputs":[{"name":"sqrtPriceX96","type":"uint160","internalType":"uint160"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_initialize_failsIfTickSpaceTooLarge","inputs":[{"name":"sqrtPriceX96","type":"uint160","internalType":"uint160"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_initialize_failsIfTickSpaceZero","inputs":[{"name":"sqrtPriceX96","type":"uint160","internalType":"uint160"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_initialize_failsWithIncorrectSelectors","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_initialize_forNativeTokens","inputs":[{"name":"sqrtPriceX96","type":"uint160","internalType":"uint160"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_initialize_gas","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_initialize_revertsWhenPoolAlreadyInitialized","inputs":[{"name":"sqrtPriceX96","type":"uint160","internalType":"uint160"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_initialize_revertsWithIdenticalTokens","inputs":[{"name":"sqrtPriceX96","type":"uint160","internalType":"uint160"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_initialize_revertsWithSameTokenCombo","inputs":[{"name":"sqrtPriceX96","type":"uint160","internalType":"uint160"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_initialize_succeedsWithCorrectSelectors","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_initialize_succeedsWithEmptyHooks","inputs":[{"name":"sqrtPriceX96","type":"uint160","internalType":"uint160"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_initialize_succeedsWithHooks","inputs":[{"name":"sqrtPriceX96","type":"uint160","internalType":"uint160"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_initialize_succeedsWithMaxTickSpacing","inputs":[{"name":"sqrtPriceX96","type":"uint160","internalType":"uint160"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"Initialize","inputs":[{"name":"poolId","type":"bytes32","indexed":true,"internalType":"PoolId"},{"name":"currency0","type":"address","indexed":true,"internalType":"Currency"},{"name":"currency1","type":"address","indexed":true,"internalType":"Currency"},{"name":"fee","type":"uint24","indexed":false,"internalType":"uint24"},{"name":"tickSpacing","type":"int24","indexed":false,"internalType":"int24"},{"name":"hooks","type":"address","indexed":false,"internalType":"contract IHooks"},{"name":"sqrtPriceX96","type":"uint160","indexed":false,"internalType":"uint160"},{"name":"tick","type":"int24","indexed":false,"internalType":"int24"}],"anonymous":false},{"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":"0x60806040523461016457600160ff19600c541617600c55600160ff19601f541617601f555f606061002e610168565b607719815260786020820152670de0b6b3a7640000604082015201526378ffff8865ffffffffffff196020541617602055670de0b6b3a76400006021555f6022555f606061007a610168565b607719815260786020820152670de0b6b3a763ffff19604082015201526378ffff8865ffffffffffff196023541617602355670de0b6b3a763ffff196024555f6025556040516060810181811060018060401b038211176101505760409081526001808352606319602084018190526bb504f333f9de6484597d89b39383018490526026805460ff1916909217909155602755602880546001600160a01b03199081169093179055604280548316600e17905560438054909216614000600160a01b031790915551620204e79081620001888239f35b634e487b7160e01b5f52604160045260245ffd5b5f80fd5b60405190608082016001600160401b038111838210176101505760405256fe608080604052600436101561001c575b50361561001a575f80fd5b005b5f905f3560e01c9081630a9254e4146141685750806311c390d214613de45780631ed7831c14613d3b578063290d5e4e14613c035780632ade3880146139d75780632d944c3a146132f457806339963ebc1461321a57806339cd2013146131b95780633e5e3c23146131105780633f7286f414613067578063497d396214612f8c578063542524dd14612f3e57806366d9a9a014612de35780636add80c314612c06578063711b8bd11461239b578063715ad660146120ff57806377cb112c146120355780637b33409214611d9257806385226c8114611cea5780638eee25d614611a6f578063916a17c61461199a57806393ad73ed14611935578063b0464fdc14611860578063b1a73b8a146117f8578063b4022aa41461153e578063b5508aa914611496578063ba414fa614611453578063be2adf1e14610983578063c7b8e15d14610945578063e20c9f711461088c578063ea4bbd1b146101c75763fa7626d40361000f57346101c457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c457602060ff601f54166040519015158152f35b80fd5b50346101c457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c45760405190612c8b918281019281841067ffffffffffffffff85111761085f5782938291620107de8339039082f080156108525773ffffffffffffffffffffffffffffffffffffffff610248911661530e565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561084f578161029b91604051809381927fb4d6c78200000000000000000000000000000000000000000000000000000000835260048301615334565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156107a95761083a575b50506130007fffffffffffffffffffffffff0000000000000000000000000000000000000000603e541617603e556130003b156101c457806040517f5941b5bb0000000000000000000000000000000000000000000000000000000081527fdc98354e0000000000000000000000000000000000000000000000000000000060048201527fdeadbeef0000000000000000000000000000000000000000000000000000000060248201528181604481836130005af180156107a957610825575b50506130003b156101c457806040517f5941b5bb0000000000000000000000000000000000000000000000000000000081527f6fe7e6eb0000000000000000000000000000000000000000000000000000000060048201527fdeadbeef0000000000000000000000000000000000000000000000000000000060248201528181604481836130005af180156107a957610810575b5050737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156101c457806040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f1e048e1d000000000000000000000000000000000000000000000000000000006004820152818160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156107a9576107fb575b50602073ffffffffffffffffffffffffffffffffffffffff602b541660c4604051809481937f6276cbbe0000000000000000000000000000000000000000000000000000000083526105686004840173ffffffffffffffffffffffffffffffffffffffff603c54168152603d5473ffffffffffffffffffffffffffffffffffffffff8116602083015262ffffff8160a01c16604083015260b81c60020b6060820152608073ffffffffffffffffffffffffffffffffffffffff603e5416910152565b6c0100000000000000000000000060a48401525af180156107a9576107de575b506130003b156101c457806040517f5941b5bb0000000000000000000000000000000000000000000000000000000081528181806105f360048201907fdc98354e00000000000000000000000000000000000000000000000000000000602060408401938281520152565b0381836130005af180156107a9576107c9575b5050737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156101c457806040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f1e048e1d000000000000000000000000000000000000000000000000000000006004820152818160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156107a9576107b4575b50602073ffffffffffffffffffffffffffffffffffffffff602b541660c4604051809481937f6276cbbe00000000000000000000000000000000000000000000000000000000835261075a6004840173ffffffffffffffffffffffffffffffffffffffff603c54168152603d5473ffffffffffffffffffffffffffffffffffffffff8116602083015262ffffff8160a01c16604083015260b81c60020b6060820152608073ffffffffffffffffffffffffffffffffffffffff603e5416910152565b6c0100000000000000000000000060a48401525af180156107a95761077d575080f35b61079e9060203d6020116107a2575b6107968183614cb5565b810190614eed565b5080f35b503d61078c565b6040513d84823e3d90fd5b816107be91614cb5565b6101c457805f610698565b816107d391614cb5565b6101c457805f610606565b6107f69060203d6020116107a2576107968183614cb5565b610588565b8161080591614cb5565b6101c457805f6104a6565b8161081a91614cb5565b6101c457805f610414565b8161082f91614cb5565b6101c457805f610380565b8161084491614cb5565b6101c457805f6102c0565b50fd5b50604051903d90823e3d90fd5b6024837f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b50346101c457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c45760405180916020601554928381520191601582527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec475915b818110610919576109158561090981870382614cb5565b60405191829182614beb565b0390f35b825473ffffffffffffffffffffffffffffffffffffffff168452602090930192600192830192016108f2565b50346101c457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c45760206040516401000276a48152f35b50346101c45760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c45773ffffffffffffffffffffffffffffffffffffffff6109f26109d3614bc8565b828073fffd8963efd1fc6a506488495d951d5263988d2516911661545a565b16816040517f3ebf73b400000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f456d70747954657374486f6f6b732e736f6c3a456d70747954657374486f6f6b60448201527f730000000000000000000000000000000000000000000000000000000000000060648201528181608481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9081156107a95782916113d9575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561137e5781610af291604051809381927fb4d6c78200000000000000000000000000000000000000000000000000000000835260048301615350565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156107a9576113c4575b50506040516107048082019082821067ffffffffffffffff831117611397579180918593620100da8339039082f080156108525773ffffffffffffffffffffffffffffffffffffffff610b6a911661530e565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561137e5781610bbd91604051809381927fb4d6c78200000000000000000000000000000000000000000000000000000000835260048301615334565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156107a957611382575b50506130003b1561137e57816040517fd784d426000000000000000000000000000000000000000000000000000000008152613fff60048201528181602481836130005af180156107a957611369575b50506130007fffffffffffffffffffffffff0000000000000000000000000000000000000000603e541617603e5581602073ffffffffffffffffffffffffffffffffffffffff602b541660c4604051809481937f6276cbbe000000000000000000000000000000000000000000000000000000008352610d226004840173ffffffffffffffffffffffffffffffffffffffff603c54168152603d5473ffffffffffffffffffffffffffffffffffffffff8116602083015262ffffff8160a01c16604083015260b81c60020b6060820152608073ffffffffffffffffffffffffffffffffffffffff603e5416910152565b8760a48401525af190811561135e57839161133f575b50610d6673ffffffffffffffffffffffffffffffffffffffff602b541660a0610d5f614e6c565b2090615c2b565b5050509083604092835190610d7b8583614cb5565b600982527f73717274507269636500000000000000000000000000000000000000000000006020830152737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561133b5773ffffffffffffffffffffffffffffffffffffffff8391610e21875194859384937f88b44c85000000000000000000000000000000000000000000000000000000008552166004840152896024840152606060448401526064830190614c3a565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561133157611318575b5050815190306020830152610ec983830173ffffffffffffffffffffffffffffffffffffffff603c54168152603d5473ffffffffffffffffffffffffffffffffffffffff8116602083015262ffffff8160a01c16604083015260b81c60020b6060820152608073ffffffffffffffffffffffffffffffffffffffff603e5416910152565b8360e083015260e08252610edf61010083614cb5565b825193306020860152610f6184860173ffffffffffffffffffffffffffffffffffffffff603c54168152603d5473ffffffffffffffffffffffffffffffffffffffff8116602083015262ffffff8160a01c16604083015260b81c60020b6060820152608073ffffffffffffffffffffffffffffffffffffffff603e5416910152565b60e085015260020b6101008401526101008352610f8061012084614cb5565b81517f5837e5b70000000000000000000000000000000000000000000000000000000081527fdc98354e0000000000000000000000000000000000000000000000000000000060048201526020816024816130005afa90811561130e5785916112da575b506110899161102a602092855190610ffc8783614cb5565b601482527f6265666f726553656c6563746f7220636f756e7400000000000000000000000085830152615ec5565b8351809381927fd80a40770000000000000000000000000000000000000000000000000000000083527fdc98354e0000000000000000000000000000000000000000000000000000000060048401528660248401526044830190614c3a565b03816130005afa9081156112b157906110e09185916112bb575b508251906110b18483614cb5565b601582527f6265666f726553656c6563746f7220706172616d7300000000000000000000006020830152615f54565b80517f5837e5b70000000000000000000000000000000000000000000000000000000081527f6fe7e6eb0000000000000000000000000000000000000000000000000000000060048201526020816024816130005afa9081156112b1578491611279575b506111e99261118a60209284519061115c8683614cb5565b601382527f616674657253656c6563746f7220636f756e740000000000000000000000000085830152615ec5565b8251809481927fd80a40770000000000000000000000000000000000000000000000000000000083527f6fe7e6eb0000000000000000000000000000000000000000000000000000000060048401528560248401526044830190614c3a565b03816130005afa801561126f5761123d928491611240575b5061120e82519283614cb5565b601482527f616674657253656c6563746f7220706172616d730000000000000000000000006020830152615f54565b80f35b611262915060203d602011611268575b61125a8183614cb5565b810190615442565b5f611201565b503d611250565b81513d85823e3d90fd5b90506020813d6020116112a9575b8161129460209383614cb5565b810103126112a557516111e9611144565b5f80fd5b3d9150611287565b82513d86823e3d90fd5b6112d4915060203d6020116112685761125a8183614cb5565b5f6110a3565b90506020813d602011611306575b816112f560209383614cb5565b810103126112a55751611089610fe4565b3d91506112e8565b83513d87823e3d90fd5b8161132291614cb5565b61132d57835f610e45565b8380fd5b84513d84823e3d90fd5b8280fd5b611358915060203d6020116107a2576107968183614cb5565b5f610d38565b6040513d85823e3d90fd5b8161137391614cb5565b61137e57815f610c32565b5080fd5b8161138c91614cb5565b61137e57815f610be2565b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b816113ce91614cb5565b61137e57815f610b17565b90503d8083833e6113ea8183614cb5565b81019060208183031261133b5780519067ffffffffffffffff821161132d570181601f8201121561133b57805190611421826152d4565b9261142f6040519485614cb5565b8284526020838301011161132d5781849260208093018386015e830101525f610a9e565b50346101c457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c457602061148c615369565b6040519015158152f35b50346101c457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c4576019546114d181614f06565b916114df6040519384614cb5565b818352601981527f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c9695602084015b83831061152157604051806109158782614d4b565b60016020819261153085614f1e565b81520192019201919061150c565b50346101c45760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c45773ffffffffffffffffffffffffffffffffffffffff61158e6109d3614bc8565b169060405191612c8b928381019381851067ffffffffffffffff8611176117cb5783948291620107de8339039083f080156107a95773ffffffffffffffffffffffffffffffffffffffff6115e2911661530e565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156117c7578261163591604051809381927fb4d6c78200000000000000000000000000000000000000000000000000000000835260048301615350565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af190811561135e5783916117b2575b5050613fff7fffffffffffffffffffffffff0000000000000000000000000000000000000000603e541617603e55602073ffffffffffffffffffffffffffffffffffffffff602b541660c4604051809581937f6276cbbe00000000000000000000000000000000000000000000000000000000835261174c6004840173ffffffffffffffffffffffffffffffffffffffff603c54168152603d5473ffffffffffffffffffffffffffffffffffffffff8116602083015262ffffff8160a01c16604083015260b81c60020b6060820152608073ffffffffffffffffffffffffffffffffffffffff603e5416910152565b8660a48401525af191821561135e5761123d92611795575b5073ffffffffffffffffffffffffffffffffffffffff61178c81602b541660a0610d5f614e6c565b50505016615d91565b6117ad9060203d6020116107a2576107968183614cb5565b611764565b816117bc91614cb5565b61084f57815f61165d565b5050fd5b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b50346101c457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c457606060ff6026541660275473ffffffffffffffffffffffffffffffffffffffff6028541690604051921515835260208301526040820152f35b50346101c457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c457601c5461189b81614f06565b916118a96040519384614cb5565b818352601c81527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a211602084015b8383106118eb57604051806109158782614dc8565b600260206001926040516118fe81614c99565b73ffffffffffffffffffffffffffffffffffffffff8654168152611923858701615021565b838201528152019201920191906118d6565b50346101c457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c4576020805460215460225460408051600285810b825260189590951c90940b94840194909452928201526060810191909152608090f35b50346101c457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c457601d546119d581614f06565b916119e36040519384614cb5565b818352601d81527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f602084015b838310611a2557604051806109158782614dc8565b60026020600192604051611a3881614c99565b73ffffffffffffffffffffffffffffffffffffffff8654168152611a5d858701615021565b83820152815201920192019190611a10565b50346101c45760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c4578073ffffffffffffffffffffffffffffffffffffffff611ac06109d3614bc8565b602954603d80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691821790556040517f6e6c9830000000000000000000000000000000000000000000000000000000006020820152602481018290526044810191909152911690611b7781606481015b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282614cb5565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156117c75782611bd291604051809381927ff28dceb3000000000000000000000000000000000000000000000000000000008352602060048401526024830190614c3a565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af190811561135e578391611cd5575b505060209060c473ffffffffffffffffffffffffffffffffffffffff602b54169160405194859384927f6276cbbe000000000000000000000000000000000000000000000000000000008452611cc06004850173ffffffffffffffffffffffffffffffffffffffff603c54168152603d5473ffffffffffffffffffffffffffffffffffffffff8116602083015262ffffff8160a01c16604083015260b81c60020b6060820152608073ffffffffffffffffffffffffffffffffffffffff603e5416910152565b60a48401525af180156107a95761077d575080f35b81611cdf91614cb5565b61084f57815f611bfa565b50346101c457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c457601a54611d2581614f06565b91611d336040519384614cb5565b818352601a81527f057c384a7d1c54f3a1b2e5e67b2617b8224fdfd1ea7234eea573a6ff665ff63e602084015b838310611d7557604051806109158782614d4b565b600160208192611d8485614f1e565b815201920192019190611d60565b50346101c45760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c4578073ffffffffffffffffffffffffffffffffffffffff611de36109d3614bc8565b16787fff00000000000000000000000000000000000000000000007fffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffff603d541617603d55611e308161552d565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156117c7576040517f491cc7c2000000000000000000000000000000000000000000000000000000008152838180611e9960048201906001606060808401938281528260208201528260408201520152565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af190811561202a578491612015575b505060209160a0611ed0614e6c565b20603c54603d54603e546040805160a084811c62ffffff16825260b885901c600290810b602084015273ffffffffffffffffffffffffffffffffffffffff9485169383019390935288841660608301529690910b608082015291811694921692917fdd466e674ea557f56295e2d0218a125ea4b4f0f6f3307b95f85e6110838d643891a460c473ffffffffffffffffffffffffffffffffffffffff602b54169160405194859384927f6276cbbe000000000000000000000000000000000000000000000000000000008452611cc06004850173ffffffffffffffffffffffffffffffffffffffff603c54168152603d5473ffffffffffffffffffffffffffffffffffffffff8116602083015262ffffff8160a01c16604083015260b81c60020b6060820152608073ffffffffffffffffffffffffffffffffffffffff603e5416910152565b8161201f91614cb5565b6117c757825f611ec1565b6040513d86823e3d90fd5b50346101c45760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c4578073ffffffffffffffffffffffffffffffffffffffff6120866109d3614bc8565b16603d547fffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffff8116603d5568ffffffffffff000000604051917fe9e9058800000000000000000000000000000000000000000000000000000000602084015260b81c1660020b602482015260248152611b77604482614cb5565b50346101c45760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c4578073ffffffffffffffffffffffffffffffffffffffff6121506109d3614bc8565b1681602073ffffffffffffffffffffffffffffffffffffffff602b541660c4604051809481937f6276cbbe0000000000000000000000000000000000000000000000000000000083526122136004840173ffffffffffffffffffffffffffffffffffffffff603c54168152603d5473ffffffffffffffffffffffffffffffffffffffff8116602083015262ffffff8160a01c16604083015260b81c60020b6060820152608073ffffffffffffffffffffffffffffffffffffffff603e5416910152565b8760a48401525af1801561135e5761237e575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561084f576040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f7983c051000000000000000000000000000000000000000000000000000000006004820152828160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af190811561135e578391611cd557505060209060c473ffffffffffffffffffffffffffffffffffffffff602b54169160405194859384927f6276cbbe000000000000000000000000000000000000000000000000000000008452611cc06004850173ffffffffffffffffffffffffffffffffffffffff603c54168152603d5473ffffffffffffffffffffffffffffffffffffffff8116602083015262ffffff8160a01c16604083015260b81c60020b6060820152608073ffffffffffffffffffffffffffffffffffffffff603e5416910152565b6123969060203d6020116107a2576107968183614cb5565b612226565b50346101c457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c45760405190612c8b918281019281841067ffffffffffffffff85111761085f5782938291620107de8339039082f080156108525773ffffffffffffffffffffffffffffffffffffffff61241c911661530e565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561084f578161246f91604051809381927fb4d6c78200000000000000000000000000000000000000000000000000000000835260048301615334565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156107a957612bf1575b50506130007fffffffffffffffffffffffff0000000000000000000000000000000000000000603e541617603e556130003b156101c457806040517f5941b5bb00000000000000000000000000000000000000000000000000000000815281818061252c60048201907fdc98354e00000000000000000000000000000000000000000000000000000000602060408401938281520152565b0381836130005af180156107a957612bdc575b50506130003b156101c457806040517f5941b5bb0000000000000000000000000000000000000000000000000000000081527f6fe7e6eb0000000000000000000000000000000000000000000000000000000060048201527f6fe7e6eb0000000000000000000000000000000000000000000000000000000060248201528181604481836130005af180156107a957612bc7575b50507ffffffffffffffffffffffffffffffffffd709b7e5480fba5a50fed5e62ffc55660801d60020b6fdb2df09e81959a81455e260799a0632f60801d60020b8082145f1461282857505b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561137e57816040517f491cc7c200000000000000000000000000000000000000000000000000000000815281818061268760048201906001606060808401938281528260208201528260408201520152565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156107a957612813575b505060a06126b8614e6c565b2073ffffffffffffffffffffffffffffffffffffffff603c5416907fdd466e674ea557f56295e2d0218a125ea4b4f0f6f3307b95f85e6110838d643860a073ffffffffffffffffffffffffffffffffffffffff603d5481603e5416966040519762ffffff83861c1689528260b81c60020b60208a015260408901526c01000000000000000000000000606089015260020b60808801521694a480602073ffffffffffffffffffffffffffffffffffffffff602b541660c4604051809481937f6276cbbe00000000000000000000000000000000000000000000000000000000835261075a6004840173ffffffffffffffffffffffffffffffffffffffff603c54168152603d5473ffffffffffffffffffffffffffffffffffffffff8116602083015262ffffff8160a01c16604083015260b81c60020b6060820152608073ffffffffffffffffffffffffffffffffffffffff603e5416910152565b8161281d91614cb5565b61137e57815f6126ac565b908160ff1d82810118620d89e88111612b9b5773ffffffffffffffffffffffffffffffffffffffff63ffffffff6c0100000000000000000000000092600181167001fffcb933bd6fad37aa2d162d1a59400102700100000000000000000000000000000000189060028116612b7f575b60048116612b63575b60088116612b47575b60108116612b2b575b60208116612b0f575b60408116612af3575b60808116612ad7575b6101008116612abb575b6102008116612a9f575b6104008116612a83575b6108008116612a67575b6110008116612a4b575b6120008116612a2f575b6140008116612a13575b61800081166129f7575b6201000081166129db575b6202000081166129c0575b6204000081166129a5575b620800001661298f575b868613612968575b0160201c1611612961575061261e565b905061261e565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04612951565b6b048a170391f7dc42444e8fa20260801c612949565b6d2216e584f5fa1ea926041bedfe9890910260801c9061293f565b906e5d6af8dedb81196699c329225ee6040260801c90612934565b906f09aa508b5b7a84e1c677de54f3e99bc90260801c90612929565b906f31be135f97d08fd981231505542fcfa60260801c9061291e565b906f70d869a156d2a1b890bb3df62baf32f70260801c90612914565b906fa9f746462d870fdf8a65dc1f90e061e50260801c9061290a565b906fd097f3bdfd2022b8845ad8f792aa58250260801c90612900565b906fe7159475a2c29b7443b29c7fa6e889d90260801c906128f6565b906ff3392b0822b70005940c7a398e4b70f30260801c906128ec565b906ff987a7253ac413176f2b074cf7815e540260801c906128e2565b906ffcbe86c7900a88aedcffc83b479aa3a40260801c906128d8565b906ffe5dee046a99a2a811c461f1969c30530260801c906128ce565b906fff2ea16466c96a3843ec78b326b528610260801c906128c5565b906fff973b41fa98c081472e6896dfb254c00260801c906128bc565b906fffcb9843d60f6159c9db58835c9266440260801c906128b3565b906fffe5caca7e10e4e61c3624eaa0941cd00260801c906128aa565b906ffff2e50f5f656932ef12357cf3c7fdcc0260801c906128a1565b906ffff97272373d413259a46990580e213a0260801c90612898565b602484847f8b86327a000000000000000000000000000000000000000000000000000000008252600452fd5b81612bd191614cb5565b6101c457805f6125d3565b81612be691614cb5565b6101c457805f61253f565b81612bfb91614cb5565b6101c457805f612494565b50346101c457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c45780602073ffffffffffffffffffffffffffffffffffffffff602b541660c4604051809481937f6276cbbe000000000000000000000000000000000000000000000000000000008352612cf76004840173ffffffffffffffffffffffffffffffffffffffff603c54168152603d5473ffffffffffffffffffffffffffffffffffffffff8116602083015262ffffff8160a01c16604083015260b81c60020b6060820152608073ffffffffffffffffffffffffffffffffffffffff603e5416910152565b6c0100000000000000000000000060a48401525af180156107a957612dc6575b506040517fdd9fca1200000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f696e697469616c697a6500000000000000000000000000000000000000000000604482015260208160648185737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156107a957612d9e575080f35b61079e9060203d602011612dbf575b612db78183614cb5565b8101906152c5565b503d612dad565b612dde9060203d6020116107a2576107968183614cb5565b612d17565b50346101c457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c457601b54612e1e81614f06565b612e2b6040519182614cb5565b818152601b83526020810191837f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc1845b838310612f0357868587604051928392602084019060208552518091526040840160408260051b8601019392905b828210612e9857505050500390f35b91936020612ef3827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0600195979984950301865288519083612ee38351604084526040840190614c3a565b9201519084818403910152614cf6565b9601920192018594939192612e89565b60026020600192604051612f1681614c99565b612f1f86614f1e565b8152612f2c858701615021565b83820152815201920192019190612e5b565b50346101c457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c45760405173fffd8963efd1fc6a506488495d951d5263988d258152602090f35b50346101c45760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c4578073ffffffffffffffffffffffffffffffffffffffff612fdd6109d3614bc8565b1679ffffff00000000000000000000000000000000000000000000007fffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffff603d54161780603d55604051907fe9e9058800000000000000000000000000000000000000000000000000000000602083015260b81c60020b602482015260248152611b77604482614cb5565b50346101c457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c45760405180916020601754928381520191601782527fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c15915b8181106130e4576109158561090981870382614cb5565b825473ffffffffffffffffffffffffffffffffffffffff168452602090930192600192830192016130cd565b50346101c457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c45760405180916020601854928381520191601882527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e915b81811061318d576109158561090981870382614cb5565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201613176565b50346101c457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c45760235460245460255460408051600285810b825260189590951c90940b60208501528301919091526060820152608090f35b50346101c45760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c4578073ffffffffffffffffffffffffffffffffffffffff61326b6109d3614bc8565b1678800000000000000000000000000000000000000000000000007fffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffff603d54161780603d55604051907fb70024f800000000000000000000000000000000000000000000000000000000602083015260b81c60020b602482015260248152611b77604482614cb5565b50346101c4577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360160c0811261137e5760a0136101c45760405161333881614c7d565b613340614bc8565b81526024359073ffffffffffffffffffffffffffffffffffffffff8216820361133b5760208101918252826044359262ffffff8416840361137e5760408301938452606435908160020b820361133b57606084019182526084359473ffffffffffffffffffffffffffffffffffffffff8616860361132d576080850195865260a43573ffffffffffffffffffffffffffffffffffffffff81168091036139d35773ffffffffffffffffffffffffffffffffffffffff906134159073fffd8963efd1fc6a506488495d951d5263988d259061545a565b1695848152835160020b617fff81135f146135a857505050505160020b604051907fb70024f8000000000000000000000000000000000000000000000000000000006020830152602482015260248152613470604482614cb5565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561137e57816134cb91604051809381927ff28dceb3000000000000000000000000000000000000000000000000000000008352602060048401526024830190614c3a565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156107a957613593575b5050602b54604080517f6276cbbe000000000000000000000000000000000000000000000000000000008152835173ffffffffffffffffffffffffffffffffffffffff9081166004830152602080860151821660248401529285015162ffffff166044830152606085015160020b60648301526080909401518416608482015293831660a485015291839160c49183918791165af180156107a95761077d575080f35b8161359d91614cb5565b61133b57825f6134f0565b600113156135f5575050505160020b604051907fe9e90588000000000000000000000000000000000000000000000000000000006020830152602482015260248152613470604482614cb5565b90919273ffffffffffffffffffffffffffffffffffffffff86511673ffffffffffffffffffffffffffffffffffffffff85511611155f146136925750505073ffffffffffffffffffffffffffffffffffffffff80845116915116604051917f6e6c98300000000000000000000000000000000000000000000000000000000060208401526024830152604482015260448152613470606482614cb5565b62ffffff8394929351166136a68187615e07565b6137045750505073ffffffffffffffffffffffffffffffffffffffff91505116604051907fe65af6a0000000000000000000000000000000000000000000000000000000006020830152602482015260248152613470604482614cb5565b6280000081949394141590816139c6575b50156137635750505062ffffff905116604051907f14002113000000000000000000000000000000000000000000000000000000006020830152602482015260248152613470604482614cb5565b90919293506137718661552d565b91737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156139c257876040517f491cc7c20000000000000000000000000000000000000000000000000000000081528181806137db60048201906001606060808401938281528260208201528260408201520152565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156107a9576139ad575b50507fdd466e674ea557f56295e2d0218a125ea4b4f0f6f3307b95f85e6110838d6438916138a660a08820948973ffffffffffffffffffffffffffffffffffffffff62ffffff81808d51169a51169a5116945160020b955116604051958695869373ffffffffffffffffffffffffffffffffffffffff608094819398979462ffffff60a089019a16885260020b602088015216604086015216606084015260020b910152565b0390a4602b54604080517f6276cbbe000000000000000000000000000000000000000000000000000000008152835173ffffffffffffffffffffffffffffffffffffffff9081166004830152602080860151821660248401529285015162ffffff166044830152606085015160020b606483015260808501518116608483015285811660a4830152909392849160c49183918991165af191821561202a5761123d9361397f73ffffffffffffffffffffffffffffffffffffffff9361398a9362ffffff96613990575b5060a085602b5416912090615c2b565b509491905016615d91565b16615d11565b6139a89060203d6020116107a2576107968183614cb5565b61396f565b816139b791614cb5565b6139c257875f613800565b8780fd5b620f42409150115f613715565b8480fd5b50346101c457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c457601e54613a1281614f06565b613a1f6040519182614cb5565b818152601e83526020810191837f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e350845b838310613b6d5786858760405192839260208401906020855251809152604084019160408260051b8601019392815b838310613a8b5786860387f35b9193957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc09086929496030183528551906020604082019273ffffffffffffffffffffffffffffffffffffffff81511683520151916040602083015282518091526060820190602060608260051b850101940192855b828110613b2457505050505060208060019297019301930190928695949293613a7e565b9091929394602080613b60837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa087600196030189528951614c3a565b9701950193929101613b00565b604051613b7981614c99565b73ffffffffffffffffffffffffffffffffffffffff8354168152600183018054613ba281614f06565b91613bb06040519384614cb5565b8183528a526020808b20908b9084015b838210613be6575050505060019282602092836002950152815201920192019190613a4f565b600160208192613bf586614f1e565b815201930191019091613bc0565b50346101c45760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c4578073ffffffffffffffffffffffffffffffffffffffff613c546109d3614bc8565b1673ffffffffffffffffffffffffffffffffffffffff60295416807fffffffffffffffffffffffff0000000000000000000000000000000000000000603d541617603d55611b7773ffffffffffffffffffffffffffffffffffffffff602a5416807fffffffffffffffffffffffff0000000000000000000000000000000000000000603c541617603c55611b4b6040519384927f6e6c98300000000000000000000000000000000000000000000000000000000060208501526024840190929173ffffffffffffffffffffffffffffffffffffffff60209181604085019616845216910152565b50346101c457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c45760405180916020601654928381520191601682527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b5124289915b818110613db8576109158561090981870382614cb5565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201613da1565b50346101c45760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c4578073ffffffffffffffffffffffffffffffffffffffff613e356109d3614bc8565b167fffffffffffffffffffffffff0000000000000000000000000000000000000000603c5416603c55613e678161552d565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156117c757604051917f491cc7c2000000000000000000000000000000000000000000000000000000008352838380613ed160048201906001606060808401938281528260208201528260408201520152565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af192831561202a57849361414f575b5060a0613f04614e6c565b20603c54603d54603e546040805160a084811c62ffffff16825260b885901c600290810b602084015273ffffffffffffffffffffffffffffffffffffffff9485169383019390935288841660608301529690910b608082015291811694921692917fdd466e674ea557f56295e2d0218a125ea4b4f0f6f3307b95f85e6110838d643891a4602073ffffffffffffffffffffffffffffffffffffffff602b541660c4604051809581937f6276cbbe0000000000000000000000000000000000000000000000000000000083526140496004840173ffffffffffffffffffffffffffffffffffffffff603c54168152603d5473ffffffffffffffffffffffffffffffffffffffff8116602083015262ffffff8160a01c16604083015260b81c60020b6060820152608073ffffffffffffffffffffffffffffffffffffffff603e5416910152565b8660a48401525af190811561135e5773ffffffffffffffffffffffffffffffffffffffff926140a692614132575b506140a162ffffff8261398a61409587602b541660a0610d5f614e6c565b50939198909816615d91565b61552d565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156117c757604051917ffe74f05b00000000000000000000000000000000000000000000000000000000835260020b600483015260020b60248201528181604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156107a9576141215750f35b8161412b91614cb5565b6101c45780f35b61414a9060203d6020116107a2576107968183614cb5565b614077565b8361415c91949294614cb5565b6117c75782915f613ef9565b9050346112a5575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126112a557615e828082019082821067ffffffffffffffff831117614b9b57602091839162007a0d83393081520301905ff08015614b905773ffffffffffffffffffffffffffffffffffffffff16807fffffffffffffffffffffffff0000000000000000000000000000000000000000602b541617602b5560405190611bb980830183811067ffffffffffffffff821117614b9b5760209284926201cc91843981520301905ff08015614b905773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000602f541617602f5573ffffffffffffffffffffffffffffffffffffffff602b541660405190610d6f80830183811067ffffffffffffffff821117614b9b5760209284926201f76c843981520301905ff08015614b905773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000602e541617602e5573ffffffffffffffffffffffffffffffffffffffff602b54166040519061183580830183811067ffffffffffffffff821117614b9b57602092849262015373843981520301905ff08015614b905773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000602c541617602c5573ffffffffffffffffffffffffffffffffffffffff602b54166040519061131580830183811067ffffffffffffffff821117614b9b57602092849262016ba8843981520301905ff08015614b905773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000602d541617602d5573ffffffffffffffffffffffffffffffffffffffff602b5416604051906112d280830183811067ffffffffffffffff821117614b9b576020928492620140a1843981520301905ff08015614b905773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000603054161760305573ffffffffffffffffffffffffffffffffffffffff602b541660405190610f2280830183811067ffffffffffffffff821117614b9b5760209284926201e84a843981520301905ff08015614b905773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000603154161760315573ffffffffffffffffffffffffffffffffffffffff602b541660405190610c3880830183811067ffffffffffffffff821117614b9b57602092849262013469843981520301905ff08015614b905773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000603354161760335573ffffffffffffffffffffffffffffffffffffffff602b541660405190614dd480830183811067ffffffffffffffff821117614b9b57602092849262017ebd843981520301905ff08015614b905773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff00000000000000000000000000000000000000006034541617603455604080516146688282614cb5565b600d8152602081017f666565436f6e74726f6c6c65720000000000000000000000000000000000000081528251600d6020820192835e5f602d820152600d81526146b3602d82614cb5565b5190208251907fffa186490000000000000000000000000000000000000000000000000000000082526004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115614b37575f91614b41575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156112a5575f73ffffffffffffffffffffffffffffffffffffffff61478492855193849283927fc657c71800000000000000000000000000000000000000000000000000000000845216958660048401528760248401526044830190614c3a565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015614b3757614b22575b507fffffffffffffffffffffffff0000000000000000000000000000000000000000603554161760355573ffffffffffffffffffffffffffffffffffffffff602b541681519061284b908183019183831067ffffffffffffffff841117614af5579183916020936200d88f8439815203019083f08015614aea5773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff000000000000000000000000000000000000000060325416176032558173ffffffffffffffffffffffffffffffffffffffff602b541673ffffffffffffffffffffffffffffffffffffffff60355416813b1561133b57829160248392865194859384927f2d77138900000000000000000000000000000000000000000000000000000000845260048401525af18015614add57614ac8575b50506148e8615ff9565b908273ffffffffffffffffffffffffffffffffffffffff80614908615ff9565b9416931680841015614aa95773ffffffffffffffffffffffffffffffffffffffff806080925b1694857fffffffffffffffffffffffff0000000000000000000000000000000000000000602a541617602a551692837fffffffffffffffffffffffff00000000000000000000000000000000000000006