UNPKG

@layerzerolabs/oft-alt-evm

Version:

LayerZero Labs reference EVM OmniChain Fungible Token (OFT) implementation

1 lines 1.06 MB
{"abi":[{"type":"receive","stateMutability":"payable"},{"type":"function","name":"DEFAULT_CHANNEL_ID","inputs":[],"outputs":[{"name":"","type":"uint32","internalType":"uint32"}],"stateMutability":"view"},{"type":"function","name":"EVM_COMPUTE_MAP_BPS","inputs":[],"outputs":[{"name":"","type":"uint16","internalType":"uint16"}],"stateMutability":"view"},{"type":"function","name":"EVM_COMPUTE_REDUCE_FEE_USD","inputs":[],"outputs":[{"name":"","type":"uint120","internalType":"uint120"}],"stateMutability":"view"},{"type":"function","name":"EVM_REQUEST_FEE_USD","inputs":[],"outputs":[{"name":"","type":"uint120","internalType":"uint120"}],"stateMutability":"view"},{"type":"function","name":"IS_TEST","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"MAP_REDUCE_COMPUTE_TYPES","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"NATIVE_TOKEN_PRICE_USD","inputs":[],"outputs":[{"name":"","type":"uint128","internalType":"uint128"}],"stateMutability":"view"},{"type":"function","name":"TREASURY_GAS_CAP","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"TREASURY_GAS_FOR_FEE_CAP","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"assertGuid","inputs":[{"name":"packetBytes","type":"bytes","internalType":"bytes"},{"name":"guid","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"createEndpoints","inputs":[{"name":"_endpointNum","type":"uint8","internalType":"uint8"},{"name":"_libraryType","type":"uint8","internalType":"enum TestHelperOz5.LibraryType"},{"name":"nativeTokenAddresses","type":"address[]","internalType":"address[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"decodeLzComposeOption","inputs":[{"name":"_option","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"index","type":"uint16","internalType":"uint16"},{"name":"gas","type":"uint128","internalType":"uint128"},{"name":"value","type":"uint128","internalType":"uint128"}],"stateMutability":"pure"},{"type":"function","name":"decodeLzReadOption","inputs":[{"name":"_option","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"gas","type":"uint128","internalType":"uint128"},{"name":"size","type":"uint32","internalType":"uint32"},{"name":"value","type":"uint128","internalType":"uint128"}],"stateMutability":"pure"},{"type":"function","name":"decodeLzReceiveOption","inputs":[{"name":"_option","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"gas","type":"uint128","internalType":"uint128"},{"name":"value","type":"uint128","internalType":"uint128"}],"stateMutability":"pure"},{"type":"function","name":"decodeNativeDropOption","inputs":[{"name":"_option","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"amount","type":"uint128","internalType":"uint128"},{"name":"receiver","type":"bytes32","internalType":"bytes32"}],"stateMutability":"pure"},{"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":"executorValueCap","inputs":[],"outputs":[{"name":"","type":"uint128","internalType":"uint128"}],"stateMutability":"view"},{"type":"function","name":"failed","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"getNextInflightPacket","inputs":[{"name":"_dstEid","type":"uint16","internalType":"uint16"},{"name":"_dstAddress","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"packetBytes","type":"bytes","internalType":"bytes"}],"stateMutability":"view"},{"type":"function","name":"hasPendingPackets","inputs":[{"name":"_dstEid","type":"uint16","internalType":"uint16"},{"name":"_dstAddress","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"flag","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"lzCompose","inputs":[{"name":"_dstEid","type":"uint32","internalType":"uint32"},{"name":"_from","type":"address","internalType":"address"},{"name":"_options","type":"bytes","internalType":"bytes"},{"name":"_guid","type":"bytes32","internalType":"bytes32"},{"name":"_to","type":"address","internalType":"address"},{"name":"_composerMsg","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"lzCompose","inputs":[{"name":"_packetBytes","type":"bytes","internalType":"bytes"},{"name":"_options","type":"bytes","internalType":"bytes"},{"name":"_guid","type":"bytes32","internalType":"bytes32"},{"name":"_composer","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"lzReadReceive","inputs":[{"name":"_packetBytes","type":"bytes","internalType":"bytes"},{"name":"_options","type":"bytes","internalType":"bytes"},{"name":"_resolvedPayload","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"lzReceive","inputs":[{"name":"_packetBytes","type":"bytes","internalType":"bytes"},{"name":"_options","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"nextExecutorOption","inputs":[{"name":"_options","type":"bytes","internalType":"bytes"},{"name":"_cursor","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"optionType","type":"uint8","internalType":"uint8"},{"name":"option","type":"bytes","internalType":"bytes"},{"name":"cursor","type":"uint256","internalType":"uint256"}],"stateMutability":"pure"},{"type":"function","name":"registerEndpoint","inputs":[{"name":"endpoint","type":"address","internalType":"contract EndpointV2Mock"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"schedulePacket","inputs":[{"name":"_packetBytes","type":"bytes","internalType":"bytes"},{"name":"_options","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setExecutorValueCap","inputs":[{"name":"_valueCap","type":"uint128","internalType":"uint128"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setUp","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setUpEndpoints","inputs":[{"name":"_endpointNum","type":"uint8","internalType":"uint8"},{"name":"_libraryType","type":"uint8","internalType":"enum TestHelperOz5.LibraryType"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setupOApps","inputs":[{"name":"_oappCreationCode","type":"bytes","internalType":"bytes"},{"name":"_startEid","type":"uint8","internalType":"uint8"},{"name":"_oappNum","type":"uint8","internalType":"uint8"}],"outputs":[{"name":"oapps","type":"address[]","internalType":"address[]"}],"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":"validatePacket","inputs":[{"name":"_packetBytes","type":"bytes","internalType":"bytes"},{"name":"_resolvedPayload","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"verifyPackets","inputs":[{"name":"_dstEid","type":"uint32","internalType":"uint32"},{"name":"_dstAddress","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"verifyPackets","inputs":[{"name":"_dstEid","type":"uint32","internalType":"uint32"},{"name":"_dstAddress","type":"bytes32","internalType":"bytes32"},{"name":"_packetAmount","type":"uint256","internalType":"uint256"},{"name":"_composer","type":"address","internalType":"address"},{"name":"_resolvedPayload","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"verifyPackets","inputs":[{"name":"_dstEid","type":"uint32","internalType":"uint32"},{"name":"_dstAddress","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"wireOApps","inputs":[{"name":"oapps","type":"address[]","internalType":"address[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"wireReadOApps","inputs":[{"name":"oapps","type":"address[]","internalType":"address[]"},{"name":"channels","type":"uint32[]","internalType":"uint32[]"}],"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},{"type":"error","name":"Executor_InvalidLzComposeOption","inputs":[]},{"type":"error","name":"Executor_InvalidLzReadOption","inputs":[]},{"type":"error","name":"Executor_InvalidLzReceiveOption","inputs":[]},{"type":"error","name":"Executor_InvalidNativeDropOption","inputs":[]}],"bytecode":{"object":"0x60806040819052600c8054600160ff199182168117909255601f805490911690911790556200002e906200009d565b604051809103905ff08015801562000048573d5f803e3d5ffd5b50601f80546001600160a01b039290921661010002610100600160a81b0319909216919091179055602480546001600160801b03191667016345785d8a000017905534801562000096575f80fd5b50620000ab565b610aa9806203368283390190565b620335c880620000ba5f395ff3fe6080604052600436106200032e575f3560e01c806382411c7711620001a6578063b752b72a11620000ee578063defd9da61162000092578063f93e1d61116200006a578063f93e1d6114620009e0578063fa7626d41462000a2e578063faed6c581462000a49575f80fd5b8063defd9da61462000951578063e20c9f7114620009b2578063ec53eaa014620009c9575f80fd5b8063ba414fa611620000c6578063ba414fa614620008fc578063baead19c1462000913578063d6d62497146200092d575f80fd5b8063b752b72a1462000875578063b76bada51462000899578063b954fdf614620008af575f80fd5b8063997cff1b1162000156578063b0464fdc116200012e578063b0464fdc1462000820578063b1dcf5c81462000837578063b5508aa9146200085e575f80fd5b8063997cff1b14620007c1578063a29c898414620007e5578063ae6ce40014620007fc575f80fd5b806385226c81116200018a57806385226c811462000718578063916a17c6146200073e5780639751ca861462000764575f80fd5b806382411c7714620003bd578063834bd15914620006f4575f80fd5b80633e5e3c23116200027657806365449eb0116200021a5780636e1775e311620001f25780636e1775e31462000667578063703ca254146200069d5780637982cf4214620006c1575f80fd5b806365449eb014620005ff57806366d9a9a01462000623578063699cbade1462000649575f80fd5b806351aa318b116200024e57806351aa318b14620005785780635ea0fefe14620005a65780636019788914620005db575f80fd5b80633e5e3c2314620004f25780633f7286f41462000509578063518e8ab01462000520575f80fd5b80631cc4652511620002de5780632a35d25011620002b65780632a35d25014620004915780632ade388014620004b55780633bbd6a9414620004db575f80fd5b80631cc4652514620003fb5780631ed7831c146200041f5780632113ce621462000445575f80fd5b80630a9254e411620003125780630a9254e414620003775780630afba868146200038e5780631766f5a414620003bd575f80fd5b8063090852b6146200033a5780630a69faa91462000360575f80fd5b366200033657005b5f80fd5b34801562000346575f80fd5b506200035e6200035836600462006c1c565b62000a6d565b005b6200035e6200037136600462006da8565b62000a99565b34801562000383575f80fd5b506200035e62000bf0565b3480156200039a575f80fd5b50620003a561271081565b60405161ffff90911681526020015b60405180910390f35b348015620003c9575f80fd5b50620003da670de0b6b3a764000081565b6040516effffffffffffffffffffffffffffff9091168152602001620003b4565b34801562000407575f80fd5b506200035e6200041936600462006e5d565b62000bfc565b3480156200042b575f80fd5b506200043662000c52565b604051620003b4919062006ed1565b34801562000451575f80fd5b506024546200046f906fffffffffffffffffffffffffffffffff1681565b6040516fffffffffffffffffffffffffffffffff9091168152602001620003b4565b3480156200049d575f80fd5b5062000436620004af36600462006ee5565b62000cb4565b348015620004c1575f80fd5b50620004cc62000dcd565b604051620003b4919062006ffa565b6200035e620004ec36600462007099565b62000f15565b348015620004fe575f80fd5b506200043662000fd0565b34801562000515575f80fd5b506200043662001030565b3480156200052c575f80fd5b50620005446200053e3660046200714d565b62001090565b6040805161ffff90941684526fffffffffffffffffffffffffffffffff9283166020850152911690820152606001620003b4565b34801562000584575f80fd5b50620005906201117181565b60405163ffffffff9091168152602001620003b4565b348015620005b2575f80fd5b50620005ca620005c4366004620071a0565b620010ac565b6040519015158152602001620003b4565b348015620005e7575f80fd5b506200035e620005f9366004620071cd565b6200110c565b3480156200060b575f80fd5b506200035e6200061d366004620072d7565b62001ebb565b3480156200062f575f80fd5b506200063a62001fb1565b604051620003b49190620073f6565b34801562000655575f80fd5b506200046f68056bc75e2d6310000081565b34801562000673575f80fd5b506200068b6200068536600462007491565b62002136565b604051620003b4949392919062007506565b348015620006a9575f80fd5b506200035e620006bb36600462007535565b62002158565b348015620006cd575f80fd5b50620006e5620006df366004620071a0565b62002329565b604051620003b4919062007573565b34801562000700575f80fd5b506200035e6200071236600462007587565b6200243e565b34801562000724575f80fd5b506200072f62002a4f565b604051620003b4919062007600565b3480156200074a575f80fd5b506200075562002b24565b604051620003b4919062007614565b34801562000770575f80fd5b5062000788620007823660046200714d565b62002c1e565b604080516fffffffffffffffffffffffffffffffff948516815263ffffffff9093166020840152921691810191909152606001620003b4565b348015620007cd575f80fd5b506200035e620007df36600462007491565b62002c2d565b6200035e620007f6366004620076a5565b62002cad565b34801562000808575f80fd5b506200035e6200081a36600462007730565b62002d34565b3480156200082c575f80fd5b506200075562002de9565b34801562000843575f80fd5b506200084f620186a081565b604051908152602001620003b4565b3480156200086a575f80fd5b506200072f62002ee3565b34801562000881575f80fd5b506200035e620008933660046200774e565b62002fb8565b348015620008a5575f80fd5b506200084f600381565b348015620008bb575f80fd5b50620008d3620008cd3660046200714d565b62002fd5565b604080516fffffffffffffffffffffffffffffffff9093168352602083019190915201620003b4565b34801562000908575f80fd5b50620005ca62002fef565b3480156200091f575f80fd5b506200084f64e8d4a5100081565b34801562000939575f80fd5b506200035e6200094b3660046200776d565b620030c3565b3480156200095d575f80fd5b506200035e6200096f366004620077e5565b602480547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b348015620009be575f80fd5b506200043662005352565b6200035e620009da366004620071cd565b620053b2565b348015620009ec575f80fd5b5062000a04620009fe3660046200714d565b620054e5565b604080516fffffffffffffffffffffffffffffffff938416815292909116602083015201620003b4565b34801562000a3a575f80fd5b50601f54620005ca9060ff1681565b34801562000a55575f80fd5b506200035e62000a6736600462007803565b620054f3565b62000a9582826001600160a01b03165f1b5f8060405180602001604052805f8152506200243e565b5050565b5f60235f62000aa987876200557e565b63ffffffff16815260208101919091526040015f908120546001600160a01b031691508062000ad885620055a4565b92505091505f604051806060016040528062000af58a8a620056d8565b63ffffffff16815260200162000b0c8a8a620056e9565b815260200162000b1d8a8a62005705565b67ffffffffffffffff16905290506001600160a01b038416630c0c389e6fffffffffffffffffffffffffffffffff8581169085168462000b5e8d8d6200572b565b62000b6a8e8e6200573f565b604080516020810182525f815290517fffffffff0000000000000000000000000000000000000000000000000000000060e089901b16815262000bb5949392918e9160040162007871565b5f604051808303818589803b15801562000bcd575f80fd5b5088f115801562000be0573d5f803e3d5ffd5b5050505050505050505050505050565b62000bfa62005750565b565b62000a9582828460ff1667ffffffffffffffff81111562000c215762000c2162006c99565b60405190808252806020026020018201604052801562000c4b578160200160208202803683370190505b50620030c3565b6060601680548060200260200160405190810160405280929190818152602001828054801562000caa57602002820191905f5260205f20905b81546001600160a01b0316815260019091019060200180831162000c8b575b5050505050905090565b60608160ff1667ffffffffffffffff81111562000cd55762000cd562006c99565b60405190808252806020026020018201604052801562000cff578160200160208202803683370190505b509050825b62000d10838562007912565b60ff168160ff16101562000dba5760ff81165f9081526023602090815260408083205481516001600160a01b039091169281019290925230908201526001606082015262000d72908790608001604051602081830303815290604052620057a1565b9050808362000d8287856200792e565b60ff168151811062000d985762000d986200794a565b6001600160a01b03909216602092830291909101909101525060010162000d04565b5062000dc68162002158565b9392505050565b6060601e805480602002602001604051908101604052809291908181526020015f905b8282101562000f0c575f84815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b8282101562000ef4578382905f5260205f2001805462000e629062007977565b80601f016020809104026020016040519081016040528092919081815260200182805462000e909062007977565b801562000edf5780601f1062000eb55761010080835404028352916020019162000edf565b820191905f5260205f20905b81548152906001019060200180831162000ec157829003601f168201915b50505050508152602001906001019062000e42565b50505050815250508152602001906001019062000df0565b50505050905090565b63ffffffff87165f908152602360205260408120546001600160a01b031690808062000f4189620057fd565b925092509250836001600160a01b03166391d20fa18284908d8b8d898d8d60405180602001604052805f8152506040518a63ffffffff1660e01b815260040162000f929796959493929190620079ca565b5f604051808303818589803b15801562000faa575f80fd5b5088f115801562000fbd573d5f803e3d5ffd5b5050505050505050505050505050505050565b6060601880548060200260200160405190810160405280929190818152602001828054801562000caa57602002820191905f5260205f209081546001600160a01b0316815260019091019060200180831162000c8b575050505050905090565b6060601780548060200260200160405190810160405280929190818152602001828054801562000caa57602002820191905f5260205f209081546001600160a01b0316815260019091019060200180831162000c8b575050505050905090565b5f805f6200109f858562005945565b9250925092509250925092565b61ffff82165f908152602080805260408083208484529091528120816200110182546fffffffffffffffffffffffffffffffff8082167001000000000000000000000000000000009092048116919091031690565b119150505b92915050565b5f6200111984846200557e565b63ffffffff81165f908152602360205260408120549192506001600160a01b03909116908163402f84686200114f88886200572b565b6200115b8989620056d8565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03909216600483015263ffffffff1660248201526044016040805180830381865afa158015620011c0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620011e6919062007a37565b5090505f620011f68787620059d9565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920182905250604080517f54fd4d50000000000000000000000000000000000000000000000000000000008152905195965090946001600160a01b03881694506354fd4d509350600480830193506060928290030181865afa15801562001288573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620012ae919062007a91565b505090508067ffffffffffffffff166003036200182b57825f6001600160a01b038216639c33abf7620012e28c8c620056d8565b620012ee8d8d6200572b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815263ffffffff9290921660048301526001600160a01b03166024820152600260448201526064015f60405180830381865afa1580156200135b573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405262001384919081019062007b1d565b90505f818060200190518101906200139d919062007bc1565b608001515f81518110620013b557620013b56200794a565b602002602001015190505f620013cc8c8c620059ea565b604051620013dc92919062007ca3565b6040518091039020905060605f630223536e60e01b88846064604051602401620014099392919062007cb2565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505f6001600160a01b03851663f010cb238d89856200148b426103e862007cdf565b6040518563ffffffff1660e01b8152600401620014ac949392919062007cf5565b602060405180830381865afa158015620014c8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620014ee919062007d35565b9050620014fb81620059fb565b6040805160018082528183019092529194505f9250816020015b6040805160a0810182525f808252602082018190526060928201839052828201526080810191909152815260200190600190039081620015155790505090506040518060a001604052808d63ffffffff168152602001886001600160a01b03168152602001838152602001426103e862001590919062007cdf565b815260200184815250815f81518110620015ae57620015ae6200794a565b60209081029190910101526040517fb143044b0000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063b143044b906200160090849060040162007d4d565b5f604051808303815f87803b15801562001618575f80fd5b505af11580156200162b573d5f803e3d5ffd5b505050505f630894edf160e01b8a866040516024016200164d92919062007e19565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505f6001600160a01b03871663f010cb238f8b85620016cf426103e862007cdf565b6040518563ffffffff1660e01b8152600401620016f0949392919062007cf5565b602060405180830381865afa1580156200170c573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062001732919062007d35565b90506200173f81620059fb565b9450506040518060a001604052808e63ffffffff168152602001896001600160a01b03168152602001828152602001426103e86200177e919062007cdf565b815260200185815250825f815181106200179c576200179c6200794a565b60209081029190910101526040517fb143044b0000000000000000000000000000000000000000000000000000000081526001600160a01b0387169063b143044b90620017ee90859060040162007d4d565b5f604051808303815f87803b15801562001806575f80fd5b505af115801562001819573d5f803e3d5ffd5b50505050505050505050505062001eb1565b8067ffffffffffffffff16600a0362001e3857825f6001600160a01b038216639c33abf76200185b8c8c620056d8565b620018678d8d6200572b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815263ffffffff9290921660048301526001600160a01b03166024820152600160448201526064015f60405180830381865afa158015620018d4573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052620018fd919081019062007b1d565b90505f8180602001905181019062001916919062007e3c565b608001515f815181106200192e576200192e6200794a565b602002602001015190505f620019458c8c62005b42565b6040516200195592919062007ca3565b604051809103902090505f6200196c8d8d6200573f565b8b6040516020016200198092919062007e8e565b60405160208183030381529060405280519060200120905060605f63ab750e7560e01b898585604051602401620019ba9392919062007eb5565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505f6001600160a01b03861663f010cb238e8a8562001a3c426103e862007cdf565b6040518563ffffffff1660e01b815260040162001a5d949392919062007cf5565b602060405180830381865afa15801562001a79573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062001a9f919062007d35565b905062001aac81620059fb565b6040805160018082528183019092529194505f9190816020015b6040805160a0810182525f80825260208201819052606092820183905282820152608081019190915281526020019060019003908162001ac65790505090506040518060a001604052808f63ffffffff1681526020018a6001600160a01b03168152602001848152602001426103e862001b41919062007cdf565b815260200185815250815f8151811062001b5f5762001b5f6200794a565b60209081029190910101526040517fb143044b0000000000000000000000000000000000000000000000000000000081526001600160a01b0388169063b143044b9062001bb190849060040162007d4d565b5f604051808303815f87803b15801562001bc9575f80fd5b505af115801562001bdc573d5f803e3d5ffd5b505050505050505f63594924da60e01b89858560405160240162001c039392919062007eb5565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505f6001600160a01b03861663f010cb238e8a8562001c85426103e862007cdf565b6040518563ffffffff1660e01b815260040162001ca6949392919062007cf5565b602060405180830381865afa15801562001cc2573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062001ce8919062007d35565b905062001cf581620059fb565b6040805160018082528183019092529194505f9190816020015b6040805160a0810182525f80825260208201819052606092820183905282820152608081019190915281526020019060019003908162001d0f5790505090506040518060a001604052808f63ffffffff1681526020018a6001600160a01b03168152602001848152602001426103e862001d8a919062007cdf565b815260200185815250815f8151811062001da85762001da86200794a565b60209081029190910101526040517fb143044b0000000000000000000000000000000000000000000000000000000081526001600160a01b0388169063b143044b9062001dfa90849060040162007d4d565b5f604051808303815f87803b15801562001e12575f80fd5b505af115801562001e25573d5f803e3d5ffd5b5050505050505050505050505062001eb1565b6040517f12cc947f0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906312cc947f9062001e81908b908b9060040162007edb565b5f604051808303815f87803b15801562001e99575f80fd5b505af115801562001eac573d5f803e3d5ffd5b505050505b5050505050505050565b5f5b825181101562001fac575f83828151811062001edd5762001edd6200794a565b602002602001015190505f5b835181101562001fa157816001600160a01b031663f0a9e48185838151811062001f175762001f176200794a565b60209081029190910101516040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815263ffffffff9091166004820152600160248201526044015f604051808303815f87803b15801562001f7d575f80fd5b505af115801562001f90573d5f803e3d5ffd5b50506001909201915062001ee99050565b505060010162001ebd565b505050565b6060601b805480602002602001604051908101604052809291908181526020015f905b8282101562000f0c578382905f5260205f2090600202016040518060400160405290815f82018054620020079062007977565b80601f0160208091040260200160405190810160405280929190818152602001828054620020359062007977565b8015620020845780601f106200205a5761010080835404028352916020019162002084565b820191905f5260205f20905b8154815290600101906020018083116200206657829003601f168201915b50505050508152602001600182018054806020026020016040519081016040528092919081815260200182805480156200211d57602002820191905f5260205f20905f905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411620020c95790505b5050505050815250508152602001906001019062001fd4565b5f365f806200214787878762005b53565b935093509350935093509350935093565b80515f5b8181101562001fac575f8382815181106200217b576200217b6200794a565b602002602001015190505f5b838110156200231e5782811462002315575f858281518110620021ae57620021ae6200794a565b602002602001015190505f816001600160a01b0316635e280f116040518163ffffffff1660e01b8152600401602060405180830381865afa158015620021f6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200221c919062007ef0565b6001600160a01b031663416ecebf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002258573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200227e919062007f0e565b9050836001600160a01b0316633400288b82620022a1856001600160a01b031690565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815263ffffffff92909216600483015260248201526044015f604051808303815f87803b158015620022fb575f80fd5b505af11580156200230e573d5f803e3d5ffd5b5050505050505b60010162002187565b50506001016200215c565b61ffff82165f9081526020808052604080832084845290915281206060916200238082546fffffffffffffffffffffffffffffffff8082167001000000000000000000000000000000009092048116919091031690565b111562002437575f620023938262005bae565b5f818152602160205260409020805491925090620023b19062007977565b80601f0160208091040260200160405190810160405280929190818152602001828054620023df9062007977565b80156200242e5780601f1062002404576101008083540402835291602001916200242e565b820191905f5260205f20905b8154815290600101906020018083116200241057829003601f168201915b50505050509250505b5092915050565b63ffffffff85165f908152602360205260409020546001600160a01b0316620024c8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f656e64706f696e74206e6f74207965742072656769737465726564000000000060448201526064015b60405180910390fd5b63ffffffff85165f908152602080805260408083208784529091528120906200251f82546fffffffffffffffffffffffffffffffff8082167001000000000000000000000000000000009092048116919091031690565b90505f855f0362002563575081546fffffffffffffffffffffffffffffffff8082167001000000000000000000000000000000009092048116919091031662002577565b85821162002572578162002574565b855b90505b801562001eb157806200258a8162007f2c565b9150505f620025998462005c57565b5f81815260216020526040812080549293509091620025b89062007977565b80601f0160208091040260200160405190810160405280929190818152602001828054620025e69062007977565b8015620026355780601f106200260b5761010080835404028352916020019162002635565b820191905f5260205f20905b8154815290600101906020018083116200261757829003601f168201915b50506040517f997cff1b000000000000000000000000000000000000000000000000000000008152939450309363997cff1b93506200267d9250859150869060040162007e19565b5f6040518083038186803b15801562002694575f80fd5b505afa158015620026a7573d5f803e3d5ffd5b50506040517f6019788900000000000000000000000000000000000000000000000000000000815230925063601978899150620026eb9084908a9060040162007f63565b5f604051808303815f87803b15801562002703575f80fd5b505af115801562002716573d5f803e3d5ffd5b5050505f838152602260205260408120805491925090620027379062007977565b80601f0160208091040260200160405190810160405280929190818152602001828054620027659062007977565b8015620027b45780601f106200278a57610100808354040283529160200191620027b4565b820191905f5260205f20905b8154815290600101906020018083116200279657829003601f168201915b50505050509050620027c881600262005d03565b15620028a3575f80620027db8362005d18565b604051919350915081905f906001600160a01b0383169085908381818185875af1925050503d805f81146200282c576040519150601f19603f3d011682016040523d82523d5f602084013e62002831565b606091505b50509050806200289e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4661696c656420746f2073656e642045746865720000000000000000000000006044820152606401620024bf565b505050505b620028b081600162005d03565b1562002926576040517fec53eaa0000000000000000000000000000000000000000000000000000000008152309063ec53eaa090620028f6908590859060040162007f63565b5f604051808303815f87803b1580156200290e575f80fd5b505af115801562002921573d5f803e3d5ffd5b505050505b6200293381600562005d03565b15620029ab576040517f0a69faa90000000000000000000000000000000000000000000000000000000081523090630a69faa9906200297b90859085908c9060040162007f8b565b5f604051808303815f87803b15801562002993575f80fd5b505af1158015620029a6573d5f803e3d5ffd5b505050505b6001600160a01b03881615801590620029cc5750620029cc81600362005d03565b1562002a46576040517fa29c8984000000000000000000000000000000000000000000000000000000008152309063a29c89849062002a16908590859088908e9060040162007fd3565b5f604051808303815f87803b15801562002a2e575f80fd5b505af115801562002a41573d5f803e3d5ffd5b505050505b50505062002577565b6060601a805480602002602001604051908101604052809291908181526020015f905b8282101562000f0c578382905f5260205f2001805462002a929062007977565b80601f016020809104026020016040519081016040528092919081815260200182805462002ac09062007977565b801562002b0f5780601f1062002ae55761010080835404028352916020019162002b0f565b820191905f5260205f20905b81548152906001019060200180831162002af157829003601f168201915b50505050508152602001906001019062002a72565b6060601d805480602002602001604051908101604052809291908181526020015f905b8282101562000f0c575f8481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801562002c0557602002820191905f5260205f20905f905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841162002bb15790505b5050505050815250508152602001906001019062002b47565b5f805f6200109f858562005e5a565b5f62002c3a84846200573f565b905081811462002ca7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f67756964206e6f74206d617463680000000000000000000000000000000000006044820152606401620024bf565b50505050565b30633bbd6a9462002cbf87876200557e565b62002ccb88886200572b565b86868662002cda8c8c62005b42565b6040518863ffffffff1660e01b815260040162002cfe97969594939291906200801c565b5f604051808303815f87803b15801562002d16575f80fd5b505af115801562002d29573d5f803e3d5ffd5b505050505050505050565b8060235f836001600160a01b031663416ecebf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002d75573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062002d9b919062007f0e565b63ffffffff16815260208101919091526040015f2080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905550565b6060601c805480602002602001604051908101604052809291908181526020015f905b8282101562000f0c575f8481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801562002eca57602002820191905f5260205f20905f905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841162002e765790505b5050505050815250508152602001906001019062002e0c565b60606019805480602002602001604051908101604052809291908181526020015f905b8282101562000f0c578382905f5260205f2001805462002f269062007977565b80601f016020809104026020016040519081016040528092919081815260200182805462002f549062007977565b801562002fa35780601f1062002f795761010080835404028352916020019162002fa3565b820191905f5260205f20905b81548152906001019060200180831162002f8557829003601f168201915b50505050508152602001906001019062002f06565b62000a9582825f8060405180602001604052805f8152506200243e565b5f8062002fe3848462005ee5565b915091505b9250929050565b6008545f9060ff161562003007575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c6564000000000000000000000000000000000000000000000000000060248301525f9163667f9d7090604401602060405180830381865afa15801562003096573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620030bc919062007d35565b1415905090565b8260ff1667ffffffffffffffff811115620030e257620030e262006c99565b6040519080825280602002602001820160405280156200310c578160200160208202803683370190505b508051620031239160259160209091019062006900565b508260ff1667ffffffffffffffff81111562003143576200314362006c99565b6040519080825280602002602001820160405280156200316d578160200160208202803683370190505b508051620031849160269160209091019062006980565b508260ff1667ffffffffffffffff811115620031a457620031a462006c99565b604051908082528060200260200182016040528015620031ce578160200160208202803683370190505b508051620031e59160279160209091019062006900565b508260ff1667ffffffffffffffff81111562003205576200320562006c99565b6040519080825280602002602001820160405280156200322f578160200160208202803683370190505b508051620032469160289160209091019062006900565b508260ff1667ffffffffffffffff81111562003266576200326662006c99565b60405190808252806020026020018201604052801562003290578160200160208202803683370190505b508051620032a79160299160209091019062006900565b50604080516001808252818301909252906020808301908036833750508151620032d992602a92506020019062006900565b506040517fffa1864900000000000000000000000000000000000000000000000000000000815260016004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ffa1864990602401602060405180830381865afa15801562003342573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062003368919062007ef0565b602a80545f906200337d576200337d6200794a565b5f918252602082200180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0393909316929092179091555b8360ff168160ff161015620035d5575f620033db82600162007912565b60ff1690505f838360ff1681518110620033f957620033f96200794a565b602002602001015190508160256001018460ff16815481106200342057620034206200794a565b905f5260205f2090600891828204019190066004026101000a81548163ffffffff021916908363ffffffff1602179055505f6001600160a01b0316816001600160a01b031603620034fc5781306040516200347b9062006a2e565b63ffffffff90921682526001600160a01b03166020820152604001604051809103905ff080158015620034b0573d5f803e3d5ffd5b506025805460ff8616908110620034cb57620034cb6200794a565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555062003591565b8130826040516200350d9062006a3c565b63ffffffff90931683526001600160a01b039182166020840152166040820152606001604051809103905ff0801580156200354a573d5f803e3d5ffd5b506025805460ff86169081106200356557620035656200794a565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055505b620035ca60255f018460ff1681548110620035b057620035b06200794a565b5f918252602090912001546001600160a01b031662002d34565b5050600101620033be565b5030604051620035e59062006a4a565b6001600160a01b039091168152602001604051809103905ff0801580156200360f573d5f803e3d5ffd5b50602b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790555f5b8360ff168160ff16101562004fe0575f8360018111156200366f576200366f6200807e565b0362004db2575f60255f018260ff16815481106200369157620036916200794a565b905f5260205f20015f9054906101000a90046001600160a01b03169050308164e8d4a51000620186a0604051620036c89062006a58565b6001600160a01b03948516815293909216602084015260408301526060820152608001604051809103905ff08015801562003705573d5f803e3d5ffd5b50602c80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905560405181906200374e9062006a66565b6001600160a01b039091168152602001604051809103905ff08015801562003778573d5f803e3d5ffd5b50602c6001015f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550308164e8d4a51000620186a0604051620037bb9062006a74565b6001600160a01b03948516815293909216602084015260408301526060820152608001604051809103905ff080158015620037f8573d5f803e3d5ffd5b50602e80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556025805460ff84169081106200384b576200384b6200794a565b5f91825260209091200154602c546040517fe8964e810000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169063e8964e81906024015f604051808303815f87803b158015620038b3575f80fd5b505af1158015620038c6573d5f803e3d5ffd5b5050505060255f018260ff1681548110620038e557620038e56200794a565b5f91825260209091200154602d546040517fe8964e810000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169063e8964e81906024015f604051808303815f87803b1580156200394d575f80fd5b505af115801562003960573d5f803e3d5ffd5b5050505060255f018260ff16815481106200397f576200397f6200794a565b5f91825260209091200154602e546040517fe8964e810000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169063e8964e81906024015f604051808303815f87803b158015620039e7575f80fd5b505af1158015620039fa573d5f803e3d5ffd5b5050602c54602780546001600160a01b039092169350915060ff851690811062003a285762003a286200794a565b5f91825260209091200180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055602d546028805491909216919060ff851690811062003a875762003a876200794a565b5f91825260209091200180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055602e546029805491909216919060ff851690811062003ae65762003ae66200794a565b5f918252602082200180546001600160a01b03939093167fffffffffffffffffffffffff0000000000000000000000000000000000000000909316929092179091556040805160018082528183019092529081602001602082028036833701905050905030815f8151811062003b605762003b606200794a565b6001600160a01b0392909216602092830291909101820152604080516003808252608082019092525f9290919082016060803683375050602c5482519293506001600160a01b0316918391505f9062003bbd5762003bbd6200794a565b6001600160a01b039283166020918202929092010152602d5482519116908290600190811062003bf15762003bf16200794a565b6001600160a01b039283166020918202929092010152602e5482519116908290600290811062003c255762003c256200794a565b6001600160a01b039283166020918202929092010152602b5460405185925f9285929116903090879062003c599062006a82565b62003c6a96959493929190620080ab565b604051809103905ff08015801562003c84573d5f803e3d5ffd5b50602f80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556026805460ff861690811062003cd75762003cd76200794a565b905f5260205f2090600891828204019190066004029054906101000a900463ffffffff1660405162003d099062006a90565b63ffffffff9091168152602001604051809103905ff08015801562003d30573d5f803e3d5ffd5b50603180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602f546040517fc7b2370b00000000000000000000000000000000000000000000000000000000815260048101929092529091169063c7b2370b906024015f604051808303815f87803b15801562003dbe575f80fd5b505af115801562003dd1573d5f803e3d5ffd5b5050505060256001018460ff168154811062003df15762003df16200794a565b5f918252602090912060088204015460079091166004026101000a900463ffffffff1662003e2185600162007912565b602b5460405184916001600160a01b031690602a90600190889062003e469062006a9e565b62003e589796959493929190620080fb565b604051809103905ff08015801562003e72573d5f803e3d5ffd5b50603080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556026805460ff861690811062003ec55762003ec56200794a565b905f5260205f2090600891828204019190066004029054906101000a900463ffffffff16670de0b6b3a764000060405162003f009062006aac565b63ffffffff90921682526020820152604001604051809103905ff08015801562003f2c573d5f803e3d5ffd5b50603280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691821790556040517f39f26dfc000000000000000000000000000000000000000000000000000000008152670de0b6b3a764000060048201819052602482015261271060448201526339f26dfc906064015f604051808303815f87803b15801562003fc8575f80fd5b505af115801562003fdb573d5f803e3d5ffd5b50506030546032546040517fc7b2370b0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063c7b2370b91506024015f604051808303815f87803b1580156200403f575f80fd5b505af115801562004052573d5f803e3d5ffd5b5050505050506200407d60405180606001604052806060815260200160608152602001606081525090565b6200408a86600162007912565b60ff1667ffffffffffffffff811115620040a857620040a862006c99565b6040519080825280602002602001820160405280156200412757816020015b6040805160c0810182525f8082526020808301829052928201819052606082018190526080820181905260a082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181620040c75790505b5081526200413786600162007912565b60ff1667ffffffffffffffff81111562004155576200415562006c99565b604051908082528060200260200182016040528015620041c657816020015b604080516080810182525f8082526020808301829052928201819052606082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181620041745790505b506020820152620041d986600162007912565b60ff1667ffffffffffffffff811115620041f757620041f762006c99565b6040519080825280602002602001820160405280156200423d57816020015b604080518082019091525f8082526020820152815260200190600190039081620042165790505b50604082810191909152805160018082528183019092525f91602080830190803683375050604080515f80825260208201909252603054845194955090936001600160a01b0390911692508491906200429a576200429a6200794a565b60200260200101906001600160a01b031690816001600160a01b0316815250505f5b8860ff168160ff1610156200494c578060ff168660ff16031562004943575f620042e882600162007912565b60408051600180825281830190925260ff9290921692505f9190816020015b6200431162006aba565b815260200190600190039081620043075790505090505f6040518060c00160405280606467ffffffffffffffff168152602001875160ff168152602001865160ff1681526020015f60ff16815260200187815260200186815250905060405180604001604052808463ffffffff16815260200182