From 7437e46adb4b4f4692fd5d104b57ed0ea439c779 Mon Sep 17 00:00:00 2001 From: Bartek Tofel Date: Thu, 31 Oct 2024 17:12:26 +0100 Subject: [PATCH] [TT-1824] decode all events in all contracts (#1287) --- seth/.changeset/v1.50.8.md | 1 + seth/Makefile | 11 +- seth/client.go | 38 +- seth/client_main_test.go | 4 +- seth/client_trace_test.go | 77 +++- seth/contract_store.go | 13 + seth/contract_store_test.go | 8 +- seth/contracts/AbstractContractWithEvent.sol | 6 + seth/contracts/NetworkDebugContract.sol | 6 + seth/contracts/NetworkDebugSubContract.sol | 5 + seth/contracts/TestContractOne.sol | 11 + seth/contracts/TestContractTwo.sol | 11 + .../abi/AbstractContractWithEvent.abi | 1 + seth/contracts/abi/NetworkDebugContract.abi | 2 +- .../contracts/abi/NetworkDebugSubContract.abi | 2 +- seth/contracts/abi/TestContractOne.abi | 1 + seth/contracts/abi/TestContractTwo.abi | 1 + .../bin/AbstractContractWithEvent.bin | 0 seth/contracts/bin/NetworkDebugContract.bin | 2 +- .../contracts/bin/NetworkDebugSubContract.bin | 2 +- seth/contracts/bin/TestContractOne.bin | 1 + seth/contracts/bin/TestContractTwo.bin | 1 + .../NetworkDebugContract.go | 160 +++++++- .../NetworkDebugSubContract.go | 160 +++++++- .../bind/TestContractOne/TestContractOne.go | 377 ++++++++++++++++++ .../bind/TestContractTwo/TestContractTwo.go | 377 ++++++++++++++++++ seth/decode.go | 10 +- seth/examples_wasp/client_main_test.go | 4 +- seth/tracing.go | 2 +- seth/util.go | 4 +- seth/util_test.go | 2 +- 31 files changed, 1257 insertions(+), 43 deletions(-) create mode 100644 seth/.changeset/v1.50.8.md create mode 100644 seth/contracts/AbstractContractWithEvent.sol create mode 100644 seth/contracts/TestContractOne.sol create mode 100644 seth/contracts/TestContractTwo.sol create mode 100644 seth/contracts/abi/AbstractContractWithEvent.abi create mode 100644 seth/contracts/abi/TestContractOne.abi create mode 100644 seth/contracts/abi/TestContractTwo.abi create mode 100644 seth/contracts/bin/AbstractContractWithEvent.bin create mode 100644 seth/contracts/bin/TestContractOne.bin create mode 100644 seth/contracts/bin/TestContractTwo.bin rename seth/contracts/bind/{debug => NetworkDebugContract}/NetworkDebugContract.go (74%) rename seth/contracts/bind/{sub => NetworkDebugSubContract}/NetworkDebugSubContract.go (82%) create mode 100644 seth/contracts/bind/TestContractOne/TestContractOne.go create mode 100644 seth/contracts/bind/TestContractTwo/TestContractTwo.go diff --git a/seth/.changeset/v1.50.8.md b/seth/.changeset/v1.50.8.md new file mode 100644 index 000000000..aa2d5d83e --- /dev/null +++ b/seth/.changeset/v1.50.8.md @@ -0,0 +1 @@ +- Fix a bug, which resulted in not decoding events emitted from contracts other than the the transaction entrypoint, even if we had their ABIs diff --git a/seth/Makefile b/seth/Makefile index 1485bc329..bb9ab79d9 100644 --- a/seth/Makefile +++ b/seth/Makefile @@ -2,10 +2,17 @@ build: solc --abi --overwrite -o contracts/abi contracts/NetworkDebugContract.sol solc --bin --overwrite -o contracts/bin contracts/NetworkDebugContract.sol - abigen --bin=contracts/bin/NetworkDebugContract.bin --abi=contracts/abi/NetworkDebugContract.abi --pkg=network_debug_contract --out=contracts/bind/debug/NetworkDebugContract.go + abigen --bin=contracts/bin/NetworkDebugContract.bin --abi=contracts/abi/NetworkDebugContract.abi --pkg=network_debug_contract --out=contracts/bind/NetworkDebugContract/NetworkDebugContract.go solc --abi --overwrite -o contracts/abi contracts/NetworkDebugSubContract.sol solc --bin --overwrite -o contracts/bin contracts/NetworkDebugSubContract.sol - abigen --bin=contracts/bin/NetworkDebugSubContract.bin --abi=contracts/abi/NetworkDebugSubContract.abi --pkg=network_debug_sub_contract --out=contracts/bind/sub/NetworkDebugSubContract.go + abigen --bin=contracts/bin/NetworkDebugSubContract.bin --abi=contracts/abi/NetworkDebugSubContract.abi --pkg=network_debug_sub_contract --out=contracts/bind/NetworkDebugSubContract/NetworkDebugSubContract.go + + solc --abi --overwrite -o contracts/abi contracts/TestContractOne.sol + solc --bin --overwrite -o contracts/bin contracts/TestContractOne.sol + abigen --bin=contracts/bin/TestContractOne.bin --abi=contracts/abi/TestContractOne.abi --pkg=unique_event_one --out=contracts/bind/TestContractOne/TestContractOne.go + solc --abi --overwrite -o contracts/abi contracts/TestContractTwo.sol + solc --bin --overwrite -o contracts/bin contracts/TestContractTwo.sol + abigen --bin=contracts/bin/TestContractTwo.bin --abi=contracts/abi/TestContractTwo.abi --pkg=unique_event_two --out=contracts/bind/TestContractTwo/TestContractTwo.go .PHONY: AnvilSync AnvilSync: diff --git a/seth/client.go b/seth/client.go index 95d929b7f..e81665de3 100644 --- a/seth/client.go +++ b/seth/client.go @@ -1222,25 +1222,29 @@ func (t TransactionLog) GetData() []byte { return t.Data } -func (m *Client) decodeContractLogs(l zerolog.Logger, logs []types.Log, a abi.ABI) ([]DecodedTransactionLog, error) { - l.Trace().Msg("Decoding events") +func (m *Client) decodeContractLogs(l zerolog.Logger, logs []types.Log, allABIs []*abi.ABI) ([]DecodedTransactionLog, error) { + l.Trace().Msg("Decoding ALL events") var eventsParsed []DecodedTransactionLog for _, lo := range logs { - for _, evSpec := range a.Events { - if evSpec.ID.Hex() == lo.Topics[0].Hex() { - d := TransactionLog{lo.Topics, lo.Data} - l.Trace().Str("Name", evSpec.RawName).Str("Signature", evSpec.Sig).Msg("Unpacking event") - eventsMap, topicsMap, err := decodeEventFromLog(l, a, evSpec, d) - if err != nil { - return nil, errors.Wrap(err, ErrDecodeLog) - } - parsedEvent := decodedLogFromMaps(&DecodedTransactionLog{}, eventsMap, topicsMap) - if decodedTransactionLog, ok := parsedEvent.(*DecodedTransactionLog); ok { - decodedTransactionLog.Signature = evSpec.Sig - m.mergeLogMeta(decodedTransactionLog, lo) - eventsParsed = append(eventsParsed, *decodedTransactionLog) - l.Trace().Interface("Log", parsedEvent).Msg("Transaction log") - } else { + ABI_LOOP: + for _, a := range allABIs { + for _, evSpec := range a.Events { + if evSpec.ID.Hex() == lo.Topics[0].Hex() { + d := TransactionLog{lo.Topics, lo.Data} + l.Trace().Str("Name", evSpec.RawName).Str("Signature", evSpec.Sig).Msg("Unpacking event") + eventsMap, topicsMap, err := decodeEventFromLog(l, *a, evSpec, d) + if err != nil { + return nil, errors.Wrap(err, ErrDecodeLog) + } + parsedEvent := decodedLogFromMaps(&DecodedTransactionLog{}, eventsMap, topicsMap) + decodedTransactionLog, ok := parsedEvent.(*DecodedTransactionLog) + if ok { + decodedTransactionLog.Signature = evSpec.Sig + m.mergeLogMeta(decodedTransactionLog, lo) + eventsParsed = append(eventsParsed, *decodedTransactionLog) + l.Trace().Interface("Log", parsedEvent).Msg("Transaction log") + break ABI_LOOP + } l.Trace(). Str("Actual type", fmt.Sprintf("%T", decodedTransactionLog)). Msg("Failed to cast decoded event to DecodedCommonLog") diff --git a/seth/client_main_test.go b/seth/client_main_test.go index 55063257c..269753dab 100644 --- a/seth/client_main_test.go +++ b/seth/client_main_test.go @@ -12,9 +12,9 @@ import ( "github.com/stretchr/testify/require" "github.com/smartcontractkit/chainlink-testing-framework/seth" - network_debug_contract "github.com/smartcontractkit/chainlink-testing-framework/seth/contracts/bind/debug" + network_debug_contract "github.com/smartcontractkit/chainlink-testing-framework/seth/contracts/bind/NetworkDebugContract" + network_sub_contract "github.com/smartcontractkit/chainlink-testing-framework/seth/contracts/bind/NetworkDebugSubContract" link_token "github.com/smartcontractkit/chainlink-testing-framework/seth/contracts/bind/link" - network_sub_contract "github.com/smartcontractkit/chainlink-testing-framework/seth/contracts/bind/sub" ) /* diff --git a/seth/client_trace_test.go b/seth/client_trace_test.go index 018f1e79d..fbb44d6e8 100644 --- a/seth/client_trace_test.go +++ b/seth/client_trace_test.go @@ -17,7 +17,9 @@ import ( "github.com/stretchr/testify/require" "github.com/smartcontractkit/chainlink-testing-framework/seth" - network_debug_contract "github.com/smartcontractkit/chainlink-testing-framework/seth/contracts/bind/debug" + network_debug_contract "github.com/smartcontractkit/chainlink-testing-framework/seth/contracts/bind/NetworkDebugContract" + "github.com/smartcontractkit/chainlink-testing-framework/seth/contracts/bind/TestContractOne" + "github.com/smartcontractkit/chainlink-testing-framework/seth/contracts/bind/TestContractTwo" link_token "github.com/smartcontractkit/chainlink-testing-framework/seth/contracts/bind/link" "github.com/smartcontractkit/chainlink-testing-framework/seth/contracts/bind/link_token_interface" "github.com/smartcontractkit/chainlink-testing-framework/seth/test_utils" @@ -1786,6 +1788,79 @@ func TestTraceVariousCallTypesAndNestingLevels(t *testing.T) { require.Equal(t, 4, c.Tracer.GetDecodedCalls(decodedTx.Hash)[8].NestingLevel, "expected nesting level to be 4") } +func TestNestedEvents(t *testing.T) { + c := newClientWithContractMapFromEnv(t) + SkipAnvil(t, c) + + tx, txErr := TestEnv.DebugContract.TraceNestedEvents(c.NewTXOpts()) + require.NoError(t, txErr, "transaction should have succeeded") + decoded, decodeErr := c.Decode(tx, txErr) + require.NoError(t, decodeErr, "transaction should have succeeded") + + expectedLogs := []seth.DecodedCommonLog{ + { + Signature: "UniqueSubDebugEvent()", + Address: TestEnv.DebugSubContractAddress, + EventData: map[string]interface{}{}, + Topics: []string{"0xe0b03c5e88196d907268b0babc690e041bdc7fcc1abf4bbf1e363e28c17e6b9b"}, + }, + { + Signature: "UniqueDebugEvent()", + Address: TestEnv.DebugContractAddress, + EventData: map[string]interface{}{}, + Topics: []string{"0xa0f7c7c1fff15178b5db3e56860767f0889c56b591bd2d9ba3121b491347d74c"}, + }, + } + + require.Equal(t, 2, len(decoded.Events), "expected 2 events") + var actualEvents []seth.DecodedCommonLog + for _, event := range decoded.Events { + actualEvents = append(actualEvents, event.DecodedCommonLog) + } + + require.EqualValues(t, expectedLogs, actualEvents, "decoded events do not match") +} + +func TestSameEventTwoABIs(t *testing.T) { + c := newClientWithContractMapFromEnv(t) + SkipAnvil(t, c) + + contractAbi, err := TestContractOne.UniqueEventOneMetaData.GetAbi() + require.NoError(t, err, "failed to get contract ABI") + oneData, err := c.DeployContract(c.NewTXOpts(), "TestContractOne", *contractAbi, common.FromHex(TestContractOne.UniqueEventOneMetaData.Bin)) + require.NoError(t, err, "failed to deploy contract") + + contractAbi, err = TestContractTwo.UniqueEventTwoMetaData.GetAbi() + require.NoError(t, err, "failed to get contract ABI") + _, err = c.DeployContract(c.NewTXOpts(), "TestContractTwo", *contractAbi, common.FromHex(TestContractTwo.UniqueEventTwoMetaData.Bin)) + require.NoError(t, err, "failed to deploy contract") + + oneInstance, err := TestContractOne.NewUniqueEventOne(oneData.Address, c.Client) + require.NoError(t, err, "failed to create contract instance") + decoded, txErr := c.Decode(oneInstance.ExecuteFirstOperation(c.NewTXOpts(), big.NewInt(1), big.NewInt(2))) + require.NoError(t, txErr, "transaction should have succeeded") + + expectedLogs := []seth.DecodedCommonLog{ + { + Signature: "NonUniqueEvent(int256,int256)", + Address: oneData.Address, + EventData: map[string]interface{}{ + "a": big.NewInt(1), + "b": big.NewInt(2), + }, + Topics: []string{"0x192aedde7837c0cbfb2275e082ba2391de36cf5a893681e9dac2cced6947614e", "0x0000000000000000000000000000000000000000000000000000000000000001", "0x0000000000000000000000000000000000000000000000000000000000000002"}, + }, + } + + require.Equal(t, 1, len(decoded.Events), "expected 1 event") + var actualEvents []seth.DecodedCommonLog + for _, event := range decoded.Events { + actualEvents = append(actualEvents, event.DecodedCommonLog) + } + + require.EqualValues(t, expectedLogs, actualEvents, "decoded events do not match") +} + func removeGasDataFromDecodedCalls(decodedCall map[string][]*seth.DecodedCall) { for _, decodedCalls := range decodedCall { for _, call := range decodedCalls { diff --git a/seth/contract_store.go b/seth/contract_store.go index 7e638051c..9d14348e4 100644 --- a/seth/contract_store.go +++ b/seth/contract_store.go @@ -44,6 +44,19 @@ func (c *ContractStore) GetABI(name string) (*abi.ABI, bool) { return &abi, ok } +func (c *ContractStore) GetAllABIs() []*abi.ABI { + c.mu.Lock() + defer c.mu.Unlock() + + var allABIs []*abi.ABI + for _, a := range c.ABIs { + alias := a + allABIs = append(allABIs, &alias) + } + + return allABIs +} + func (c *ContractStore) AddABI(name string, abi abi.ABI) { if !strings.HasSuffix(name, ".abi") { name = name + ".abi" diff --git a/seth/contract_store_test.go b/seth/contract_store_test.go index 78248751a..f9436e971 100644 --- a/seth/contract_store_test.go +++ b/seth/contract_store_test.go @@ -22,23 +22,23 @@ func TestSmokeContractABIStore(t *testing.T) { { name: "can load the ABI only from ABI files", abiPath: "./contracts/abi", - expectedABICount: 5, + expectedABICount: 8, }, { name: "can load the ABI from ABI files and from gethwrappers", abiPath: "./contracts/abi", gethWrappersPaths: []string{"./contracts/bind"}, - expectedABICount: 10, + expectedABICount: 11, }, { name: "can load the ABI only from gethwrappers", gethWrappersPaths: []string{"./contracts/bind"}, - expectedABICount: 5, + expectedABICount: 7, }, { name: "can load the ABI from 2 gethwrappers folders", gethWrappersPaths: []string{"./contracts/bind", "./contracts/bind2"}, - expectedABICount: 6, + expectedABICount: 8, }, { name: "can't open the ABI path", diff --git a/seth/contracts/AbstractContractWithEvent.sol b/seth/contracts/AbstractContractWithEvent.sol new file mode 100644 index 000000000..9d74b34c3 --- /dev/null +++ b/seth/contracts/AbstractContractWithEvent.sol @@ -0,0 +1,6 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.19; + +abstract contract AbstractContractWithEvent { + event NonUniqueEvent(int256 indexed a, int256 indexed b); +} diff --git a/seth/contracts/NetworkDebugContract.sol b/seth/contracts/NetworkDebugContract.sol index c9e3d650d..598697b30 100644 --- a/seth/contracts/NetworkDebugContract.sol +++ b/seth/contracts/NetworkDebugContract.sol @@ -31,6 +31,7 @@ contract NetworkDebugContract { event ThreeIndexEvent(uint256 indexed roundId, address indexed startedBy, uint256 indexed startedAt); event ThreeIndexAndOneNonIndexedEvent(uint256 indexed roundId, address indexed startedBy, uint256 indexed startedAt, string dataId); event CallbackEvent(int256 indexed a); + event UniqueDebugEvent(); /* Struct events */ @@ -113,6 +114,11 @@ contract NetworkDebugContract { return x + y; } + function traceNestedEvents() public { + subContract.traceUniqueEvent(); + emit UniqueDebugEvent(); + } + /* Events */ function emitNoIndexEventString() public { diff --git a/seth/contracts/NetworkDebugSubContract.sol b/seth/contracts/NetworkDebugSubContract.sol index 58049ccc3..a923d5b17 100644 --- a/seth/contracts/NetworkDebugSubContract.sol +++ b/seth/contracts/NetworkDebugSubContract.sol @@ -18,6 +18,7 @@ contract NetworkDebugSubContract { event OneIndexEvent(uint indexed a); event TwoIndexEvent(uint256 indexed roundId, address indexed startedBy); event ThreeIndexEvent(uint256 indexed roundId, address indexed startedBy, uint256 startedAt); + event UniqueSubDebugEvent(); /* Struct events */ @@ -50,6 +51,10 @@ contract NetworkDebugSubContract { return x + 3; } + function traceUniqueEvent() public { + emit UniqueSubDebugEvent(); + } + function alwaysRevertsCustomError(uint256 x, uint256 y) public { revert CustomErr({ available: x, diff --git a/seth/contracts/TestContractOne.sol b/seth/contracts/TestContractOne.sol new file mode 100644 index 000000000..539b81b32 --- /dev/null +++ b/seth/contracts/TestContractOne.sol @@ -0,0 +1,11 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.19; + +import "./AbstractContractWithEvent.sol"; + +contract unique_event_two is AbstractContractWithEvent { + function executeFirstOperation(int256 x, int256 y) public returns (int256) { + emit NonUniqueEvent(x, y); + return x + y; + } +} diff --git a/seth/contracts/TestContractTwo.sol b/seth/contracts/TestContractTwo.sol new file mode 100644 index 000000000..af6cd6d2d --- /dev/null +++ b/seth/contracts/TestContractTwo.sol @@ -0,0 +1,11 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.19; + +import "./AbstractContractWithEvent.sol"; + +contract TestContractTwo is AbstractContractWithEvent { + function executeSecondOperation(int256 x, int256 y) public returns (int256) { + emit NonUniqueEvent(x, y); + return x + y; + } +} diff --git a/seth/contracts/abi/AbstractContractWithEvent.abi b/seth/contracts/abi/AbstractContractWithEvent.abi new file mode 100644 index 000000000..8612f53de --- /dev/null +++ b/seth/contracts/abi/AbstractContractWithEvent.abi @@ -0,0 +1 @@ +[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"int256","name":"a","type":"int256"},{"indexed":true,"internalType":"int256","name":"b","type":"int256"}],"name":"NonUniqueEvent","type":"event"}] \ No newline at end of file diff --git a/seth/contracts/abi/NetworkDebugContract.abi b/seth/contracts/abi/NetworkDebugContract.abi index b7cf1bd7a..81e0b7cb3 100644 --- a/seth/contracts/abi/NetworkDebugContract.abi +++ b/seth/contracts/abi/NetworkDebugContract.abi @@ -1 +1 @@ -[{"inputs":[{"internalType":"address","name":"subAddr","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"available","type":"uint256"},{"internalType":"uint256","name":"required","type":"uint256"}],"name":"CustomErr","type":"error"},{"inputs":[],"name":"CustomErrNoValues","type":"error"},{"inputs":[{"internalType":"string","name":"message","type":"string"}],"name":"CustomErrWithMessage","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"length","type":"uint256"}],"name":"CallDataLength","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"int256","name":"a","type":"int256"}],"name":"CallbackEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"enum NetworkDebugContract.Status","name":"status","type":"uint8"}],"name":"CurrentStatus","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EtherReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"success","type":"bool"}],"name":"IsValidEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"}],"name":"NoIndexEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"str","type":"string"}],"name":"NoIndexEventString","type":"event"},{"anonymous":false,"inputs":[{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint64","name":"balance","type":"uint64"},{"internalType":"uint256","name":"dailyLimit","type":"uint256"}],"indexed":false,"internalType":"struct NetworkDebugContract.Account","name":"a","type":"tuple"}],"name":"NoIndexStructEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"a","type":"uint256"}],"name":"OneIndexEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"string","name":"message","type":"string"}],"name":"Received","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"roundId","type":"uint256"},{"indexed":true,"internalType":"address","name":"startedBy","type":"address"},{"indexed":true,"internalType":"uint256","name":"startedAt","type":"uint256"},{"indexed":false,"internalType":"string","name":"dataId","type":"string"}],"name":"ThreeIndexAndOneNonIndexedEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"roundId","type":"uint256"},{"indexed":true,"internalType":"address","name":"startedBy","type":"address"},{"indexed":true,"internalType":"uint256","name":"startedAt","type":"uint256"}],"name":"ThreeIndexEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"roundId","type":"uint256"},{"indexed":true,"internalType":"address","name":"startedBy","type":"address"}],"name":"TwoIndexEvent","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"int256","name":"idx","type":"int256"},{"internalType":"int256","name":"x","type":"int256"}],"name":"addCounter","outputs":[{"internalType":"int256","name":"value","type":"int256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"alwaysRevertsAssert","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"alwaysRevertsCustomError","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"alwaysRevertsCustomErrorNoValues","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"alwaysRevertsRequire","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"name":"callRevertFunctionInSubContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"callRevertFunctionInTheContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"int256","name":"x","type":"int256"}],"name":"callbackMethod","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"int256","name":"","type":"int256"}],"name":"counterMap","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentStatus","outputs":[{"internalType":"enum NetworkDebugContract.Status","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"emitAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"input","type":"bytes32"}],"name":"emitBytes32","outputs":[{"internalType":"bytes32","name":"output","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emitFourParamMixedEvent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"inputVal1","type":"uint256"},{"internalType":"string","name":"inputVal2","type":"string"}],"name":"emitInputs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"inputVal1","type":"uint256"},{"internalType":"string","name":"inputVal2","type":"string"}],"name":"emitInputsOutputs","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"string","name":"","type":"string"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"int256","name":"first","type":"int256"},{"internalType":"int128","name":"second","type":"int128"},{"internalType":"uint256","name":"third","type":"uint256"}],"name":"emitInts","outputs":[{"internalType":"int256","name":"","type":"int256"},{"internalType":"int128","name":"outputVal1","type":"int128"},{"internalType":"uint256","name":"outputVal2","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"inputVal1","type":"uint256"},{"internalType":"string","name":"inputVal2","type":"string"}],"name":"emitNamedInputsOutputs","outputs":[{"internalType":"uint256","name":"outputVal1","type":"uint256"},{"internalType":"string","name":"outputVal2","type":"string"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emitNamedOutputs","outputs":[{"internalType":"uint256","name":"outputVal1","type":"uint256"},{"internalType":"string","name":"outputVal2","type":"string"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emitNoIndexEvent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emitNoIndexEventString","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emitNoIndexStructEvent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emitOneIndexEvent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emitOutputs","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"string","name":"","type":"string"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emitThreeIndexEvent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emitTwoIndexEvent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"get","outputs":[{"internalType":"int256","name":"data","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"int256","name":"idx","type":"int256"}],"name":"getCounter","outputs":[{"internalType":"int256","name":"data","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getData","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMap","outputs":[{"internalType":"int256","name":"data","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"onTokenTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pay","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"performStaticCall","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"input","type":"address[]"}],"name":"processAddressArray","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"internalType":"struct NetworkDebugContract.Data","name":"data","type":"tuple"}],"name":"processDynamicData","outputs":[{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"internalType":"struct NetworkDebugContract.Data","name":"","type":"tuple"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"internalType":"struct NetworkDebugContract.Data[3]","name":"data","type":"tuple[3]"}],"name":"processFixedDataArray","outputs":[{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"internalType":"struct NetworkDebugContract.Data[2]","name":"","type":"tuple[2]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"internalType":"struct NetworkDebugContract.Data","name":"data","type":"tuple"},{"internalType":"bytes","name":"dynamicBytes","type":"bytes"}],"internalType":"struct NetworkDebugContract.NestedData","name":"data","type":"tuple"}],"name":"processNestedData","outputs":[{"components":[{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"internalType":"struct NetworkDebugContract.Data","name":"data","type":"tuple"},{"internalType":"bytes","name":"dynamicBytes","type":"bytes"}],"internalType":"struct NetworkDebugContract.NestedData","name":"","type":"tuple"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"internalType":"struct NetworkDebugContract.Data","name":"data","type":"tuple"}],"name":"processNestedData","outputs":[{"components":[{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"internalType":"struct NetworkDebugContract.Data","name":"data","type":"tuple"},{"internalType":"bytes","name":"dynamicBytes","type":"bytes"}],"internalType":"struct NetworkDebugContract.NestedData","name":"","type":"tuple"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"input","type":"uint256[]"}],"name":"processUintArray","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"int256","name":"idx","type":"int256"}],"name":"resetCounter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"int256","name":"x","type":"int256"}],"name":"set","outputs":[{"internalType":"int256","name":"value","type":"int256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"int256","name":"x","type":"int256"}],"name":"setMap","outputs":[{"internalType":"int256","name":"value","type":"int256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum NetworkDebugContract.Status","name":"status","type":"uint8"}],"name":"setStatus","outputs":[{"internalType":"enum NetworkDebugContract.Status","name":"","type":"uint8"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"storedData","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"storedDataMap","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"subContract","outputs":[{"internalType":"contract NetworkDebugSubContract","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"int256","name":"x","type":"int256"},{"internalType":"int256","name":"y","type":"int256"}],"name":"trace","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"int256","name":"x","type":"int256"},{"internalType":"int256","name":"y","type":"int256"}],"name":"traceDifferent","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"int256","name":"x","type":"int256"},{"internalType":"int256","name":"y","type":"int256"}],"name":"traceSubWithCallback","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"int256","name":"x","type":"int256"},{"internalType":"int256","name":"y","type":"int256"}],"name":"traceWithValidate","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"int256","name":"x","type":"int256"},{"internalType":"int256","name":"y","type":"int256"}],"name":"traceYetDifferent","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"int256","name":"x","type":"int256"},{"internalType":"int256","name":"y","type":"int256"}],"name":"validate","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}] \ No newline at end of file +[{"inputs":[{"internalType":"address","name":"subAddr","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"available","type":"uint256"},{"internalType":"uint256","name":"required","type":"uint256"}],"name":"CustomErr","type":"error"},{"inputs":[],"name":"CustomErrNoValues","type":"error"},{"inputs":[{"internalType":"string","name":"message","type":"string"}],"name":"CustomErrWithMessage","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"length","type":"uint256"}],"name":"CallDataLength","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"int256","name":"a","type":"int256"}],"name":"CallbackEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"enum NetworkDebugContract.Status","name":"status","type":"uint8"}],"name":"CurrentStatus","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EtherReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"success","type":"bool"}],"name":"IsValidEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"}],"name":"NoIndexEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"str","type":"string"}],"name":"NoIndexEventString","type":"event"},{"anonymous":false,"inputs":[{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint64","name":"balance","type":"uint64"},{"internalType":"uint256","name":"dailyLimit","type":"uint256"}],"indexed":false,"internalType":"struct NetworkDebugContract.Account","name":"a","type":"tuple"}],"name":"NoIndexStructEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"a","type":"uint256"}],"name":"OneIndexEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"string","name":"message","type":"string"}],"name":"Received","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"roundId","type":"uint256"},{"indexed":true,"internalType":"address","name":"startedBy","type":"address"},{"indexed":true,"internalType":"uint256","name":"startedAt","type":"uint256"},{"indexed":false,"internalType":"string","name":"dataId","type":"string"}],"name":"ThreeIndexAndOneNonIndexedEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"roundId","type":"uint256"},{"indexed":true,"internalType":"address","name":"startedBy","type":"address"},{"indexed":true,"internalType":"uint256","name":"startedAt","type":"uint256"}],"name":"ThreeIndexEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"roundId","type":"uint256"},{"indexed":true,"internalType":"address","name":"startedBy","type":"address"}],"name":"TwoIndexEvent","type":"event"},{"anonymous":false,"inputs":[],"name":"UniqueDebugEvent","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"int256","name":"idx","type":"int256"},{"internalType":"int256","name":"x","type":"int256"}],"name":"addCounter","outputs":[{"internalType":"int256","name":"value","type":"int256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"alwaysRevertsAssert","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"alwaysRevertsCustomError","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"alwaysRevertsCustomErrorNoValues","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"alwaysRevertsRequire","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"name":"callRevertFunctionInSubContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"callRevertFunctionInTheContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"int256","name":"x","type":"int256"}],"name":"callbackMethod","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"int256","name":"","type":"int256"}],"name":"counterMap","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentStatus","outputs":[{"internalType":"enum NetworkDebugContract.Status","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"emitAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"input","type":"bytes32"}],"name":"emitBytes32","outputs":[{"internalType":"bytes32","name":"output","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emitFourParamMixedEvent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"inputVal1","type":"uint256"},{"internalType":"string","name":"inputVal2","type":"string"}],"name":"emitInputs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"inputVal1","type":"uint256"},{"internalType":"string","name":"inputVal2","type":"string"}],"name":"emitInputsOutputs","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"string","name":"","type":"string"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"int256","name":"first","type":"int256"},{"internalType":"int128","name":"second","type":"int128"},{"internalType":"uint256","name":"third","type":"uint256"}],"name":"emitInts","outputs":[{"internalType":"int256","name":"","type":"int256"},{"internalType":"int128","name":"outputVal1","type":"int128"},{"internalType":"uint256","name":"outputVal2","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"inputVal1","type":"uint256"},{"internalType":"string","name":"inputVal2","type":"string"}],"name":"emitNamedInputsOutputs","outputs":[{"internalType":"uint256","name":"outputVal1","type":"uint256"},{"internalType":"string","name":"outputVal2","type":"string"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emitNamedOutputs","outputs":[{"internalType":"uint256","name":"outputVal1","type":"uint256"},{"internalType":"string","name":"outputVal2","type":"string"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emitNoIndexEvent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emitNoIndexEventString","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emitNoIndexStructEvent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emitOneIndexEvent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emitOutputs","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"string","name":"","type":"string"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emitThreeIndexEvent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emitTwoIndexEvent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"get","outputs":[{"internalType":"int256","name":"data","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"int256","name":"idx","type":"int256"}],"name":"getCounter","outputs":[{"internalType":"int256","name":"data","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getData","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMap","outputs":[{"internalType":"int256","name":"data","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"onTokenTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pay","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"performStaticCall","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"input","type":"address[]"}],"name":"processAddressArray","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"internalType":"struct NetworkDebugContract.Data","name":"data","type":"tuple"}],"name":"processDynamicData","outputs":[{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"internalType":"struct NetworkDebugContract.Data","name":"","type":"tuple"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"internalType":"struct NetworkDebugContract.Data[3]","name":"data","type":"tuple[3]"}],"name":"processFixedDataArray","outputs":[{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"internalType":"struct NetworkDebugContract.Data[2]","name":"","type":"tuple[2]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"internalType":"struct NetworkDebugContract.Data","name":"data","type":"tuple"},{"internalType":"bytes","name":"dynamicBytes","type":"bytes"}],"internalType":"struct NetworkDebugContract.NestedData","name":"data","type":"tuple"}],"name":"processNestedData","outputs":[{"components":[{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"internalType":"struct NetworkDebugContract.Data","name":"data","type":"tuple"},{"internalType":"bytes","name":"dynamicBytes","type":"bytes"}],"internalType":"struct NetworkDebugContract.NestedData","name":"","type":"tuple"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"internalType":"struct NetworkDebugContract.Data","name":"data","type":"tuple"}],"name":"processNestedData","outputs":[{"components":[{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"internalType":"struct NetworkDebugContract.Data","name":"data","type":"tuple"},{"internalType":"bytes","name":"dynamicBytes","type":"bytes"}],"internalType":"struct NetworkDebugContract.NestedData","name":"","type":"tuple"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"input","type":"uint256[]"}],"name":"processUintArray","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"int256","name":"idx","type":"int256"}],"name":"resetCounter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"int256","name":"x","type":"int256"}],"name":"set","outputs":[{"internalType":"int256","name":"value","type":"int256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"int256","name":"x","type":"int256"}],"name":"setMap","outputs":[{"internalType":"int256","name":"value","type":"int256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum NetworkDebugContract.Status","name":"status","type":"uint8"}],"name":"setStatus","outputs":[{"internalType":"enum NetworkDebugContract.Status","name":"","type":"uint8"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"storedData","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"storedDataMap","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"subContract","outputs":[{"internalType":"contract NetworkDebugSubContract","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"int256","name":"x","type":"int256"},{"internalType":"int256","name":"y","type":"int256"}],"name":"trace","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"int256","name":"x","type":"int256"},{"internalType":"int256","name":"y","type":"int256"}],"name":"traceDifferent","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"traceNestedEvents","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"int256","name":"x","type":"int256"},{"internalType":"int256","name":"y","type":"int256"}],"name":"traceSubWithCallback","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"int256","name":"x","type":"int256"},{"internalType":"int256","name":"y","type":"int256"}],"name":"traceWithValidate","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"int256","name":"x","type":"int256"},{"internalType":"int256","name":"y","type":"int256"}],"name":"traceYetDifferent","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"int256","name":"x","type":"int256"},{"internalType":"int256","name":"y","type":"int256"}],"name":"validate","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}] \ No newline at end of file diff --git a/seth/contracts/abi/NetworkDebugSubContract.abi b/seth/contracts/abi/NetworkDebugSubContract.abi index a06fc6200..cc070ae2b 100644 --- a/seth/contracts/abi/NetworkDebugSubContract.abi +++ b/seth/contracts/abi/NetworkDebugSubContract.abi @@ -1 +1 @@ -[{"inputs":[{"internalType":"uint256","name":"available","type":"uint256"},{"internalType":"uint256","name":"required","type":"uint256"}],"name":"CustomErr","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"}],"name":"NoIndexEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"str","type":"string"}],"name":"NoIndexEventString","type":"event"},{"anonymous":false,"inputs":[{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint64","name":"balance","type":"uint64"},{"internalType":"uint256","name":"dailyLimit","type":"uint256"}],"indexed":false,"internalType":"struct NetworkDebugSubContract.Account","name":"a","type":"tuple"}],"name":"NoIndexStructEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"a","type":"uint256"}],"name":"OneIndexEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"roundId","type":"uint256"},{"indexed":true,"internalType":"address","name":"startedBy","type":"address"},{"indexed":false,"internalType":"uint256","name":"startedAt","type":"uint256"}],"name":"ThreeIndexEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"roundId","type":"uint256"},{"indexed":true,"internalType":"address","name":"startedBy","type":"address"}],"name":"TwoIndexEvent","type":"event"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"name":"alwaysRevertsCustomError","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pay","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"int256","name":"x","type":"int256"},{"internalType":"int256","name":"y","type":"int256"}],"name":"trace","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"int256","name":"x","type":"int256"}],"name":"traceOneInt","outputs":[{"internalType":"int256","name":"r","type":"int256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"int256","name":"x","type":"int256"},{"internalType":"int256","name":"y","type":"int256"}],"name":"traceWithCallback","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"nonpayable","type":"function"}] \ No newline at end of file +[{"inputs":[{"internalType":"uint256","name":"available","type":"uint256"},{"internalType":"uint256","name":"required","type":"uint256"}],"name":"CustomErr","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"}],"name":"NoIndexEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"str","type":"string"}],"name":"NoIndexEventString","type":"event"},{"anonymous":false,"inputs":[{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint64","name":"balance","type":"uint64"},{"internalType":"uint256","name":"dailyLimit","type":"uint256"}],"indexed":false,"internalType":"struct NetworkDebugSubContract.Account","name":"a","type":"tuple"}],"name":"NoIndexStructEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"a","type":"uint256"}],"name":"OneIndexEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"roundId","type":"uint256"},{"indexed":true,"internalType":"address","name":"startedBy","type":"address"},{"indexed":false,"internalType":"uint256","name":"startedAt","type":"uint256"}],"name":"ThreeIndexEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"roundId","type":"uint256"},{"indexed":true,"internalType":"address","name":"startedBy","type":"address"}],"name":"TwoIndexEvent","type":"event"},{"anonymous":false,"inputs":[],"name":"UniqueSubDebugEvent","type":"event"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"name":"alwaysRevertsCustomError","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pay","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"int256","name":"x","type":"int256"},{"internalType":"int256","name":"y","type":"int256"}],"name":"trace","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"int256","name":"x","type":"int256"}],"name":"traceOneInt","outputs":[{"internalType":"int256","name":"r","type":"int256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"traceUniqueEvent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"int256","name":"x","type":"int256"},{"internalType":"int256","name":"y","type":"int256"}],"name":"traceWithCallback","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"nonpayable","type":"function"}] \ No newline at end of file diff --git a/seth/contracts/abi/TestContractOne.abi b/seth/contracts/abi/TestContractOne.abi new file mode 100644 index 000000000..d92a520b2 --- /dev/null +++ b/seth/contracts/abi/TestContractOne.abi @@ -0,0 +1 @@ +[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"int256","name":"a","type":"int256"},{"indexed":true,"internalType":"int256","name":"b","type":"int256"}],"name":"NonUniqueEvent","type":"event"},{"inputs":[{"internalType":"int256","name":"x","type":"int256"},{"internalType":"int256","name":"y","type":"int256"}],"name":"executeFirstOperation","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"nonpayable","type":"function"}] \ No newline at end of file diff --git a/seth/contracts/abi/TestContractTwo.abi b/seth/contracts/abi/TestContractTwo.abi new file mode 100644 index 000000000..eee3cf6a4 --- /dev/null +++ b/seth/contracts/abi/TestContractTwo.abi @@ -0,0 +1 @@ +[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"int256","name":"a","type":"int256"},{"indexed":true,"internalType":"int256","name":"b","type":"int256"}],"name":"NonUniqueEvent","type":"event"},{"inputs":[{"internalType":"int256","name":"x","type":"int256"},{"internalType":"int256","name":"y","type":"int256"}],"name":"executeSecondOperation","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"nonpayable","type":"function"}] \ No newline at end of file diff --git a/seth/contracts/bin/AbstractContractWithEvent.bin b/seth/contracts/bin/AbstractContractWithEvent.bin new file mode 100644 index 000000000..e69de29bb diff --git a/seth/contracts/bin/NetworkDebugContract.bin b/seth/contracts/bin/NetworkDebugContract.bin index 4ee99e999..abe1dec9b 100644 --- a/seth/contracts/bin/NetworkDebugContract.bin +++ b/seth/contracts/bin/NetworkDebugContract.bin @@ -1 +1 @@ -60806040523480156200001157600080fd5b5060405162004015380380620040158339818101604052810190620000379190620000f2565b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506101006004819055505062000124565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000ba826200008d565b9050919050565b620000cc81620000ad565b8114620000d857600080fd5b50565b600081519050620000ec81620000c1565b92915050565b6000602082840312156200010b576200010a62000088565b5b60006200011b84828501620000db565b91505092915050565b613ee180620001346000396000f3fe6080604052600436106102e85760003560e01c8063788c477211610190578063b1ae9d85116100dc578063e5c19b2d11610095578063ef8a92351161006f578063ef8a923514610bc8578063f3396bd914610bf3578063f499af2a14610c1c578063fbcb8d0714610c5957610328565b8063e5c19b2d14610b11578063e8116e2814610b4e578063ec5c3ede14610b8b57610328565b8063b1ae9d8514610a0d578063b600141f14610a3d578063c0d06d8914610a54578063c2124b2214610a7f578063d7a8020514610a96578063e1111f7914610ad457610328565b80639349d00b116101495780639e099652116101235780639e09965214610963578063a4c0ed36146109a2578063aa3fdcf4146109cb578063ad3de14c146109e257610328565b80639349d00b146108f857806395a81a4c1461090f57806399adad2e1461092657610328565b8063788c4772146107fb5780637f12881c146108125780637fdc8fe11461084f57806381b375a01461088c5780638db611be146108b55780638f856296146108e157610328565b806333311ef31161024f57806358379d71116102085780636284117d116101e25780636284117d1461075057806362c270e11461078d5780636d4ce63c146107a45780637014c81d146107cf57610328565b806358379d71146106bf5780635921483f146106fc5780635e9c80d61461073957610328565b806333311ef3146105625780633837a75e1461059f5780633bc5de30146105dc5780633e41f1351461060757806345f0c9e61461064457806348ad9fe81461068257610328565b806323515760116102a1578063235157601461043e578063256560d51461047b5780632a1afcd9146104925780632e49d78b146104bd57806330985bcc146104fa5780633170428e1461053757610328565b806304d8215b1461036357806306595f75146103a057806311b3c478146103b757806312d91233146103e05780631b9265b81461041d5780631e31d0a81461042757610328565b36610328577f59e04c3f0d44b7caf6e8ef854b61d9a51cf1960d7a88ff6356cc5e946b4b5832333460405161031e9291906120c3565b60405180910390a1005b7f1e57e3bb474320be3d2c77138f75b7c3941292d647f5f9634e33a8e94e0e069b33346040516103599291906120ff565b60405180910390a1005b34801561036f57600080fd5b5061038a60048036038101906103859190612172565b610c96565b60405161039791906121cd565b60405180910390f35b3480156103ac57600080fd5b506103b5610cdc565b005b3480156103c357600080fd5b506103de60048036038101906103d99190612214565b610d1f565b005b3480156103ec57600080fd5b50610407600480360381019061040291906123ad565b610db2565b60405161041491906124b4565b60405180910390f35b610425610e71565b005b34801561043357600080fd5b5061043c610e73565b005b34801561044a57600080fd5b5061046560048036038101906104609190612172565b610eba565b60405161047291906124e5565b60405180910390f35b34801561048757600080fd5b50610490610eef565b005b34801561049e57600080fd5b506104a7610f00565b6040516104b491906124e5565b60405180910390f35b3480156104c957600080fd5b506104e460048036038101906104df9190612525565b610f06565b6040516104f191906125c9565b60405180910390f35b34801561050657600080fd5b50610521600480360381019061051c9190612172565b610f88565b60405161052e91906124e5565b60405180910390f35b34801561054357600080fd5b5061054c61106a565b60405161055991906125e4565b60405180910390f35b34801561056e57600080fd5b5061058960048036038101906105849190612635565b6111a9565b6040516105969190612671565b60405180910390f35b3480156105ab57600080fd5b506105c660048036038101906105c19190612172565b6111b3565b6040516105d391906124e5565b60405180910390f35b3480156105e857600080fd5b506105f16112be565b6040516105fe91906125e4565b60405180910390f35b34801561061357600080fd5b5061062e60048036038101906106299190612172565b6112c8565b60405161063b91906124e5565b60405180910390f35b34801561065057600080fd5b5061066b60048036038101906106669190612741565b6113c3565b60405161067992919061280b565b60405180910390f35b34801561068e57600080fd5b506106a960048036038101906106a49190612867565b6113d4565b6040516106b691906124e5565b60405180910390f35b3480156106cb57600080fd5b506106e660048036038101906106e19190612172565b6113ec565b6040516106f391906124e5565b60405180910390f35b34801561070857600080fd5b50610723600480360381019061071e9190612894565b6114e7565b60405161073091906124e5565b60405180910390f35b34801561074557600080fd5b5061074e611504565b005b34801561075c57600080fd5b5061077760048036038101906107729190612894565b611545565b60405161078491906124e5565b60405180910390f35b34801561079957600080fd5b506107a261155d565b005b3480156107b057600080fd5b506107b96115f1565b6040516107c691906124e5565b60405180910390f35b3480156107db57600080fd5b506107e46115fa565b6040516107f292919061280b565b60405180910390f35b34801561080757600080fd5b5061081061163f565b005b34801561081e57600080fd5b50610839600480360381019061083491906128e5565b611676565b6040516108469190612ac4565b60405180910390f35b34801561085b57600080fd5b5061087660048036038101906108719190612b05565b61168f565b6040516108839190612d12565b60405180910390f35b34801561089857600080fd5b506108b360048036038101906108ae9190612741565b611698565b005b3480156108c157600080fd5b506108ca61169c565b6040516108d892919061280b565b60405180910390f35b3480156108ed57600080fd5b506108f66116e1565b005b34801561090457600080fd5b5061090d611711565b005b34801561091b57600080fd5b5061092461171b565b005b34801561093257600080fd5b5061094d60048036038101906109489190612d56565b611754565b60405161095a9190612e55565b60405180910390f35b34801561096f57600080fd5b5061098a60048036038101906109859190612eb0565b6117ff565b60405161099993929190612f12565b60405180910390f35b3480156109ae57600080fd5b506109c960048036038101906109c49190612fa4565b611816565b005b3480156109d757600080fd5b506109e0611b02565b005b3480156109ee57600080fd5b506109f7611b4b565b604051610a0491906124e5565b60405180910390f35b610a276004803603810190610a229190612172565b611b92565b604051610a3491906124e5565b60405180910390f35b348015610a4957600080fd5b50610a52611cdc565b005b348015610a6057600080fd5b50610a69611d0e565b604051610a769190613077565b60405180910390f35b348015610a8b57600080fd5b50610a94611d34565b005b348015610aa257600080fd5b50610abd6004803603810190610ab89190612741565b611d86565b604051610acb92919061280b565b60405180910390f35b348015610ae057600080fd5b50610afb6004803603810190610af69190613155565b611d97565b604051610b08919061325c565b60405180910390f35b348015610b1d57600080fd5b50610b386004803603810190610b339190612894565b611da1565b604051610b4591906124e5565b60405180910390f35b348015610b5a57600080fd5b50610b756004803603810190610b709190612894565b611db2565b604051610b8291906124e5565b60405180910390f35b348015610b9757600080fd5b50610bb26004803603810190610bad9190612867565b611e00565b604051610bbf919061327e565b60405180910390f35b348015610bd457600080fd5b50610bdd611e0a565b604051610bea91906125c9565b60405180910390f35b348015610bff57600080fd5b50610c1a6004803603810190610c159190612894565b611e1d565b005b348015610c2857600080fd5b50610c436004803603810190610c3e9190612b05565b611e39565b604051610c509190612ac4565b60405180910390f35b348015610c6557600080fd5b50610c806004803603810190610c7b9190612894565b611f6e565b604051610c8d91906124e5565b60405180910390f35b60007fdfac7500004753b91139af55816e7eade36d96faec68b343f77ed66b89912a7b828413604051610cc991906121cd565b60405180910390a1818313905092915050565b6000610d1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d14906132e5565b60405180910390fd5b565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166311abb00283836040518363ffffffff1660e01b8152600401610d7c929190613305565b600060405180830381600087803b158015610d9657600080fd5b505af1158015610daa573d6000803e3d6000fd5b505050505050565b60606000825167ffffffffffffffff811115610dd157610dd061226a565b5b604051908082528060200260200182016040528015610dff5781602001602082028036833780820191505090505b50905060005b8351811015610e67576001848281518110610e2357610e2261332e565b5b6020026020010151610e35919061338c565b828281518110610e4857610e4761332e565b5b6020026020010181815250508080610e5f906133c0565b915050610e05565b5080915050919050565b565b3373ffffffffffffffffffffffffffffffffffffffff1660017f33b47a1cd66813164ec00800d74296f57415217c22505ee380594a712936a0b560405160405180910390a3565b600081600260008581526020019081526020016000206000828254610edf9190613408565b9250508190555081905092915050565b6000610efe57610efd61344c565b5b565b60005481565b600081600560006101000a81548160ff02191690836003811115610f2d57610f2c612552565b5b0217905550600560009054906101000a900460ff166003811115610f5457610f53612552565b5b7fbea054406fdf249b05d1aef1b5f848d62d902d94389fca702b2d8337677c359a60405160405180910390a2819050919050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663047c4425836040518263ffffffff1660e01b8152600401610fe591906124e5565b6020604051808303816000875af1158015611004573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110289190613490565b50827feace1be0b97ec11f959499c07b9f60f0cc47bf610b28fda8fb0e970339cf3b3560405160405180910390a281836110629190613408565b905092915050565b6000803090506000808273ffffffffffffffffffffffffffffffffffffffff16633bc5de3060e01b604051602401604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405161110291906134f9565b600060405180830381855afa9150503d806000811461113d576040519150601f19603f3d011682016040523d82523d6000602084013e611142565b606091505b509150915081611187576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117e9061355c565b60405180910390fd5b60008180602001905181019061119d9190613591565b90508094505050505090565b6000819050919050565b60006002826111c29190613408565b9150600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fa8fca7a84846040518363ffffffff1660e01b81526004016112219291906135be565b6020604051808303816000875af1158015611240573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112649190613490565b503373ffffffffffffffffffffffffffffffffffffffff1660017f33b47a1cd66813164ec00800d74296f57415217c22505ee380594a712936a0b560405160405180910390a381836112b69190613408565b905092915050565b6000600454905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633e41f13584846040518363ffffffff1660e01b81526004016113279291906135be565b6020604051808303816000875af1158015611346573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061136a9190613490565b503373ffffffffffffffffffffffffffffffffffffffff16827f33b47a1cd66813164ec00800d74296f57415217c22505ee380594a712936a0b560405160405180910390a381836113bb9190613408565b905092915050565b600060608383915091509250929050565b60016020528060005260406000206000915090505481565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633e41f13584846040518363ffffffff1660e01b815260040161144b9291906135be565b6020604051808303816000875af115801561146a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148e9190613490565b503373ffffffffffffffffffffffffffffffffffffffff16827f33b47a1cd66813164ec00800d74296f57415217c22505ee380594a712936a0b560405160405180910390a381836114df9190613408565b905092915050565b600060026000838152602001908152602001600020549050919050565b600c60156040517f4a2eaf7e00000000000000000000000000000000000000000000000000000000815260040161153c92919061365d565b60405180910390fd5b60026020528060005260406000206000915090505481565b7febe3ff7e2071d351bf2e65b4fccd24e3ae99485f02468f1feecf7d64dc04418860405180606001604052806040518060400160405280600481526020017f4a6f686e000000000000000000000000000000000000000000000000000000008152508152602001600567ffffffffffffffff168152602001600a8152506040516115e791906136f9565b60405180910390a1565b60008054905090565b60006060617a696040518060400160405280600a81526020017f6f757470757456616c3100000000000000000000000000000000000000000000815250915091509091565b7f25b7adba1b046a19379db4bc06aa1f2e71604d7b599a0ee8783d58110f00e16a60405161166c90613767565b60405180910390a1565b61167e611fa5565b8161168890613942565b9050919050565b36819050919050565b5050565b60006060617a696040518060400160405280600a81526020017f6f757470757456616c3100000000000000000000000000000000000000000000815250915091509091565b60537feace1be0b97ec11f959499c07b9f60f0cc47bf610b28fda8fb0e970339cf3b3560405160405180910390a2565b611719611504565b565b7f33bc9bae48dbe1e057f264b3fc6a1dacdcceacb3ba28d937231c70e068a02f1c3360405161174a919061327e565b60405180910390a1565b61175c611fc5565b611764611fc5565b826000600381106117785761177761332e565b5b6020028101906117889190613964565b6117919061398c565b816000600281106117a5576117a461332e565b5b6020020181905250826001600381106117c1576117c061332e565b5b6020028101906117d19190613964565b6117da9061398c565b816001600281106117ee576117ed61332e565b5b602002018190525080915050919050565b600080600085858592509250925093509350939050565b7f962c5df4c8ad201a4f54a88f47715bb2cf291d019e350e2dff50ca6fc0f5d0ed8282905060405161184891906125e4565b60405180910390a16000828290500361189c57606360656040517f4a2eaf7e000000000000000000000000000000000000000000000000000000008152600401611893929190613a15565b60405180910390fd5b6000803073ffffffffffffffffffffffffffffffffffffffff1684846040516118c6929190613a63565b600060405180830381855af49150503d8060008114611901576040519150601f19603f3d011682016040523d82523d6000602084013e611906565b606091505b50915091508161195e576000815111156119235780518082602001fd5b6040517f2350eb5200000000000000000000000000000000000000000000000000000000815260040161195590613aee565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16633170428e6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119cd9190613591565b50600084846000906004926119e493929190613b18565b906119ef9190613b97565b90506358379d7160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603611a78576040517f2350eb52000000000000000000000000000000000000000000000000000000008152600401611a6f90613c42565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16633837a75e600160026040518363ffffffff1660e01b8152600401611ab5929190613cd8565b6020604051808303816000875af1158015611ad4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611af89190613490565b5050505050505050565b60033373ffffffffffffffffffffffffffffffffffffffff1660017f5660e8f93f0146f45abcd659e026b75995db50053cbbca4d7f365934ade68bf360405160405180910390a4565b6000600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905090565b6000611b9e8383610c96565b15611c9b57600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633e41f13584846040518363ffffffff1660e01b8152600401611c009291906135be565b6020604051808303816000875af1158015611c1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c439190613490565b503373ffffffffffffffffffffffffffffffffffffffff16827f33b47a1cd66813164ec00800d74296f57415217c22505ee380594a712936a0b560405160405180910390a38183611c949190613408565b9050611cd6565b6040517f2350eb52000000000000000000000000000000000000000000000000000000008152600401611ccd90613d73565b60405180910390fd5b92915050565b6040517fa0c2d2db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60033373ffffffffffffffffffffffffffffffffffffffff1660027f56c2ea44ba516098cee0c181dd9d8db262657368b6e911e83ae0ccfae806c73d604051611d7c90613ddf565b60405180910390a4565b600060608383915091509250929050565b6060819050919050565b600081600081905550819050919050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550819050919050565b6000819050919050565b600560009054906101000a900460ff1681565b6000600260008381526020019081526020016000208190555050565b611e41611fa5565b6000828060000190611e539190613dff565b604051602001611e64929190613e92565b6040516020818303038152906040528051906020012090506000602067ffffffffffffffff811115611e9957611e9861226a565b5b6040519080825280601f01601f191660200182016040528015611ecb5781602001600182028036833780820191505090505b50905060005b6020811015611f4657828160208110611eed57611eec61332e565b5b1a60f81b828281518110611f0457611f0361332e565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080611f3e906133c0565b915050611ed1565b50604051806040016040528085611f5c9061398c565b81526020018281525092505050919050565b6000817fb16dba9242e1aa07ccc47228094628f72c8cc9699ee45d5bc8d67b84d3038c6860405160405180910390a2819050919050565b6040518060400160405280611fb8611ff2565b8152602001606081525090565b60405180604001604052806002905b611fdc611ff2565b815260200190600190039081611fd45790505090565b604051806040016040528060608152602001606081525090565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006120378261200c565b9050919050565b6120478161202c565b82525050565b6000819050919050565b6120608161204d565b82525050565b600082825260208201905092915050565b7f5265636569766564204574686572000000000000000000000000000000000000600082015250565b60006120ad600e83612066565b91506120b882612077565b602082019050919050565b60006060820190506120d8600083018561203e565b6120e56020830184612057565b81810360408301526120f6816120a0565b90509392505050565b6000604082019050612114600083018561203e565b6121216020830184612057565b9392505050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b61214f8161213c565b811461215a57600080fd5b50565b60008135905061216c81612146565b92915050565b6000806040838503121561218957612188612132565b5b60006121978582860161215d565b92505060206121a88582860161215d565b9150509250929050565b60008115159050919050565b6121c7816121b2565b82525050565b60006020820190506121e260008301846121be565b92915050565b6121f18161204d565b81146121fc57600080fd5b50565b60008135905061220e816121e8565b92915050565b6000806040838503121561222b5761222a612132565b5b6000612239858286016121ff565b925050602061224a858286016121ff565b9150509250929050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6122a282612259565b810181811067ffffffffffffffff821117156122c1576122c061226a565b5b80604052505050565b60006122d4612128565b90506122e08282612299565b919050565b600067ffffffffffffffff821115612300576122ff61226a565b5b602082029050602081019050919050565b600080fd5b6000612329612324846122e5565b6122ca565b9050808382526020820190506020840283018581111561234c5761234b612311565b5b835b81811015612375578061236188826121ff565b84526020840193505060208101905061234e565b5050509392505050565b600082601f83011261239457612393612254565b5b81356123a4848260208601612316565b91505092915050565b6000602082840312156123c3576123c2612132565b5b600082013567ffffffffffffffff8111156123e1576123e0612137565b5b6123ed8482850161237f565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61242b8161204d565b82525050565b600061243d8383612422565b60208301905092915050565b6000602082019050919050565b6000612461826123f6565b61246b8185612401565b935061247683612412565b8060005b838110156124a757815161248e8882612431565b975061249983612449565b92505060018101905061247a565b5085935050505092915050565b600060208201905081810360008301526124ce8184612456565b905092915050565b6124df8161213c565b82525050565b60006020820190506124fa60008301846124d6565b92915050565b6004811061250d57600080fd5b50565b60008135905061251f81612500565b92915050565b60006020828403121561253b5761253a612132565b5b600061254984828501612510565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6004811061259257612591612552565b5b50565b60008190506125a382612581565b919050565b60006125b382612595565b9050919050565b6125c3816125a8565b82525050565b60006020820190506125de60008301846125ba565b92915050565b60006020820190506125f96000830184612057565b92915050565b6000819050919050565b612612816125ff565b811461261d57600080fd5b50565b60008135905061262f81612609565b92915050565b60006020828403121561264b5761264a612132565b5b600061265984828501612620565b91505092915050565b61266b816125ff565b82525050565b60006020820190506126866000830184612662565b92915050565b600080fd5b600067ffffffffffffffff8211156126ac576126ab61226a565b5b6126b582612259565b9050602081019050919050565b82818337600083830152505050565b60006126e46126df84612691565b6122ca565b905082815260208101848484011115612700576126ff61268c565b5b61270b8482856126c2565b509392505050565b600082601f83011261272857612727612254565b5b81356127388482602086016126d1565b91505092915050565b6000806040838503121561275857612757612132565b5b6000612766858286016121ff565b925050602083013567ffffffffffffffff81111561278757612786612137565b5b61279385828601612713565b9150509250929050565b600081519050919050565b60005b838110156127c65780820151818401526020810190506127ab565b60008484015250505050565b60006127dd8261279d565b6127e78185612066565b93506127f78185602086016127a8565b61280081612259565b840191505092915050565b60006040820190506128206000830185612057565b818103602083015261283281846127d2565b90509392505050565b6128448161202c565b811461284f57600080fd5b50565b6000813590506128618161283b565b92915050565b60006020828403121561287d5761287c612132565b5b600061288b84828501612852565b91505092915050565b6000602082840312156128aa576128a9612132565b5b60006128b88482850161215d565b91505092915050565b600080fd5b6000604082840312156128dc576128db6128c1565b5b81905092915050565b6000602082840312156128fb576128fa612132565b5b600082013567ffffffffffffffff81111561291957612918612137565b5b612925848285016128c6565b91505092915050565b600082825260208201905092915050565b600061294a8261279d565b612954818561292e565b93506129648185602086016127a8565b61296d81612259565b840191505092915050565b600082825260208201905092915050565b6000612994826123f6565b61299e8185612978565b93506129a983612412565b8060005b838110156129da5781516129c18882612431565b97506129cc83612449565b9250506001810190506129ad565b5085935050505092915050565b60006040830160008301518482036000860152612a04828261293f565b91505060208301518482036020860152612a1e8282612989565b9150508091505092915050565b600081519050919050565b600082825260208201905092915050565b6000612a5282612a2b565b612a5c8185612a36565b9350612a6c8185602086016127a8565b612a7581612259565b840191505092915050565b60006040830160008301518482036000860152612a9d82826129e7565b91505060208301518482036020860152612ab78282612a47565b9150508091505092915050565b60006020820190508181036000830152612ade8184612a80565b905092915050565b600060408284031215612afc57612afb6128c1565b5b81905092915050565b600060208284031215612b1b57612b1a612132565b5b600082013567ffffffffffffffff811115612b3957612b38612137565b5b612b4584828501612ae6565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083356001602003843603038112612b7a57612b79612b58565b5b83810192508235915060208301925067ffffffffffffffff821115612ba257612ba1612b4e565b5b600182023603831315612bb857612bb7612b53565b5b509250929050565b6000612bcc838561292e565b9350612bd98385846126c2565b612be283612259565b840190509392505050565b60008083356001602003843603038112612c0a57612c09612b58565b5b83810192508235915060208301925067ffffffffffffffff821115612c3257612c31612b4e565b5b602082023603831315612c4857612c47612b53565b5b509250929050565b600080fd5b82818337505050565b6000612c6a8385612978565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831115612c9d57612c9c612c50565b5b602083029250612cae838584612c55565b82840190509392505050565b600060408301612ccd6000840184612b5d565b8583036000870152612ce0838284612bc0565b92505050612cf16020840184612bed565b8583036020870152612d04838284612c5e565b925050508091505092915050565b60006020820190508181036000830152612d2c8184612cba565b905092915050565b600081905082602060030282011115612d5057612d4f612311565b5b92915050565b600060208284031215612d6c57612d6b612132565b5b600082013567ffffffffffffffff811115612d8a57612d89612137565b5b612d9684828501612d34565b91505092915050565b600060029050919050565b600081905092915050565b6000819050919050565b6000612dcb83836129e7565b905092915050565b6000602082019050919050565b6000612deb82612d9f565b612df58185612daa565b935083602082028501612e0785612db5565b8060005b85811015612e435784840389528151612e248582612dbf565b9450612e2f83612dd3565b925060208a01995050600181019050612e0b565b50829750879550505050505092915050565b60006020820190508181036000830152612e6f8184612de0565b905092915050565b600081600f0b9050919050565b612e8d81612e77565b8114612e9857600080fd5b50565b600081359050612eaa81612e84565b92915050565b600080600060608486031215612ec957612ec8612132565b5b6000612ed78682870161215d565b9350506020612ee886828701612e9b565b9250506040612ef9868287016121ff565b9150509250925092565b612f0c81612e77565b82525050565b6000606082019050612f2760008301866124d6565b612f346020830185612f03565b612f416040830184612057565b949350505050565b600080fd5b60008083601f840112612f6457612f63612254565b5b8235905067ffffffffffffffff811115612f8157612f80612f49565b5b602083019150836001820283011115612f9d57612f9c612311565b5b9250929050565b60008060008060608587031215612fbe57612fbd612132565b5b6000612fcc87828801612852565b9450506020612fdd878288016121ff565b935050604085013567ffffffffffffffff811115612ffe57612ffd612137565b5b61300a87828801612f4e565b925092505092959194509250565b6000819050919050565b600061303d6130386130338461200c565b613018565b61200c565b9050919050565b600061304f82613022565b9050919050565b600061306182613044565b9050919050565b61307181613056565b82525050565b600060208201905061308c6000830184613068565b92915050565b600067ffffffffffffffff8211156130ad576130ac61226a565b5b602082029050602081019050919050565b60006130d16130cc84613092565b6122ca565b905080838252602082019050602084028301858111156130f4576130f3612311565b5b835b8181101561311d57806131098882612852565b8452602084019350506020810190506130f6565b5050509392505050565b600082601f83011261313c5761313b612254565b5b813561314c8482602086016130be565b91505092915050565b60006020828403121561316b5761316a612132565b5b600082013567ffffffffffffffff81111561318957613188612137565b5b61319584828501613127565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6131d38161202c565b82525050565b60006131e583836131ca565b60208301905092915050565b6000602082019050919050565b60006132098261319e565b61321381856131a9565b935061321e836131ba565b8060005b8381101561324f57815161323688826131d9565b9750613241836131f1565b925050600181019050613222565b5085935050505092915050565b6000602082019050818103600083015261327681846131fe565b905092915050565b6000602082019050613293600083018461203e565b92915050565b7f616c7761797320726576657274206572726f7200000000000000000000000000600082015250565b60006132cf601383612066565b91506132da82613299565b602082019050919050565b600060208201905081810360008301526132fe816132c2565b9050919050565b600060408201905061331a6000830185612057565b6133276020830184612057565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006133978261204d565b91506133a28361204d565b92508282019050808211156133ba576133b961335d565b5b92915050565b60006133cb8261204d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036133fd576133fc61335d565b5b600182019050919050565b60006134138261213c565b915061341e8361213c565b9250828201905082811215600083121683821260008412151617156134465761344561335d565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60008151905061348a81612146565b92915050565b6000602082840312156134a6576134a5612132565b5b60006134b48482850161347b565b91505092915050565b600081905092915050565b60006134d382612a2b565b6134dd81856134bd565b93506134ed8185602086016127a8565b80840191505092915050565b600061350582846134c8565b915081905092915050565b7f5374617469632063616c6c206661696c65640000000000000000000000000000600082015250565b6000613546601283612066565b915061355182613510565b602082019050919050565b6000602082019050818103600083015261357581613539565b9050919050565b60008151905061358b816121e8565b92915050565b6000602082840312156135a7576135a6612132565b5b60006135b58482850161357c565b91505092915050565b60006040820190506135d360008301856124d6565b6135e060208301846124d6565b9392505050565b6000819050919050565b600061360c613607613602846135e7565b613018565b61204d565b9050919050565b61361c816135f1565b82525050565b6000819050919050565b600061364761364261363d84613622565b613018565b61204d565b9050919050565b6136578161362c565b82525050565b60006040820190506136726000830185613613565b61367f602083018461364e565b9392505050565b600067ffffffffffffffff82169050919050565b6136a381613686565b82525050565b600060608301600083015184820360008601526136c6828261293f565b91505060208301516136db602086018261369a565b5060408301516136ee6040860182612422565b508091505092915050565b6000602082019050818103600083015261371381846136a9565b905092915050565b7f6d79537472696e67000000000000000000000000000000000000000000000000600082015250565b6000613751600883612066565b915061375c8261371b565b602082019050919050565b6000602082019050818103600083015261378081613744565b9050919050565b600080fd5b600080fd5b6000604082840312156137a7576137a6613787565b5b6137b160406122ca565b9050600082013567ffffffffffffffff8111156137d1576137d061378c565b5b6137dd84828501612713565b600083015250602082013567ffffffffffffffff8111156138015761380061378c565b5b61380d8482850161237f565b60208301525092915050565b600067ffffffffffffffff8211156138345761383361226a565b5b61383d82612259565b9050602081019050919050565b600061385d61385884613819565b6122ca565b9050828152602081018484840111156138795761387861268c565b5b6138848482856126c2565b509392505050565b600082601f8301126138a1576138a0612254565b5b81356138b184826020860161384a565b91505092915050565b6000604082840312156138d0576138cf613787565b5b6138da60406122ca565b9050600082013567ffffffffffffffff8111156138fa576138f961378c565b5b61390684828501613791565b600083015250602082013567ffffffffffffffff81111561392a5761392961378c565b5b6139368482850161388c565b60208301525092915050565b600061394e36836138ba565b9050919050565b600080fd5b600080fd5b600080fd5b6000823560016040038336030381126139805761397f613955565b5b80830191505092915050565b60006139983683613791565b9050919050565b6000819050919050565b60006139c46139bf6139ba8461399f565b613018565b61204d565b9050919050565b6139d4816139a9565b82525050565b6000819050919050565b60006139ff6139fa6139f5846139da565b613018565b61204d565b9050919050565b613a0f816139e4565b82525050565b6000604082019050613a2a60008301856139cb565b613a376020830184613a06565b9392505050565b6000613a4a83856134bd565b9350613a578385846126c2565b82840190509392505050565b6000613a70828486613a3e565b91508190509392505050565b7f64656c656761746563616c6c206661696c65642077697468206e6f207265617360008201527f6f6e000000000000000000000000000000000000000000000000000000000000602082015250565b6000613ad8602283612066565b9150613ae382613a7c565b604082019050919050565b60006020820190508181036000830152613b0781613acb565b9050919050565b600080fd5b600080fd5b60008085851115613b2c57613b2b613b0e565b5b83861115613b3d57613b3c613b13565b5b6001850283019150848603905094509492505050565b600082905092915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600082821b905092915050565b6000613ba38383613b53565b82613bae8135613b5e565b92506004821015613bee57613be97fffffffff0000000000000000000000000000000000000000000000000000000083600403600802613b8a565b831692505b505092915050565b7f6f68206f68206f682069742773206d6167696321000000000000000000000000600082015250565b6000613c2c601483612066565b9150613c3782613bf6565b602082019050919050565b60006020820190508181036000830152613c5b81613c1f565b9050919050565b6000819050919050565b6000613c87613c82613c7d84613c62565b613018565b61213c565b9050919050565b613c9781613c6c565b82525050565b6000819050919050565b6000613cc2613cbd613cb884613c9d565b613018565b61213c565b9050919050565b613cd281613ca7565b82525050565b6000604082019050613ced6000830185613c8e565b613cfa6020830184613cc9565b9392505050565b7f666972737420696e7420776173206e6f742067726561746572207468616e207360008201527f65636f6e6420696e740000000000000000000000000000000000000000000000602082015250565b6000613d5d602983612066565b9150613d6882613d01565b604082019050919050565b60006020820190508181036000830152613d8c81613d50565b9050919050565b7f736f6d6520696400000000000000000000000000000000000000000000000000600082015250565b6000613dc9600783612066565b9150613dd482613d93565b602082019050919050565b60006020820190508181036000830152613df881613dbc565b9050919050565b60008083356001602003843603038112613e1c57613e1b613955565b5b80840192508235915067ffffffffffffffff821115613e3e57613e3d61395a565b5b602083019250600182023603831315613e5a57613e5961395f565b5b509250929050565b600081905092915050565b6000613e798385613e62565b9350613e868385846126c2565b82840190509392505050565b6000613e9f828486613e6d565b9150819050939250505056fea264697066735822122095801437fe2af153ec90ad58a4678a194b7fb3b777ee30438995ef0f23596f7664736f6c63430008130033 \ No newline at end of file +60806040523480156200001157600080fd5b50604051620040f7380380620040f78339818101604052810190620000379190620000f2565b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506101006004819055505062000124565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000ba826200008d565b9050919050565b620000cc81620000ad565b8114620000d857600080fd5b50565b600081519050620000ec81620000c1565b92915050565b6000602082840312156200010b576200010a62000088565b5b60006200011b84828501620000db565b91505092915050565b613fc380620001346000396000f3fe6080604052600436106103035760003560e01c80637f12881c11610190578063b3f8d1b2116100dc578063e5c19b2d11610095578063ef8a92351161006f578063ef8a923514610bfa578063f3396bd914610c25578063f499af2a14610c4e578063fbcb8d0714610c8b57610343565b8063e5c19b2d14610b43578063e8116e2814610b80578063ec5c3ede14610bbd57610343565b8063b3f8d1b214610a58578063b600141f14610a6f578063c0d06d8914610a86578063c2124b2214610ab1578063d7a8020514610ac8578063e1111f7914610b0657610343565b806395a81a4c11610149578063a4c0ed3611610123578063a4c0ed36146109bd578063aa3fdcf4146109e6578063ad3de14c146109fd578063b1ae9d8514610a2857610343565b806395a81a4c1461092a57806399adad2e146109415780639e0996521461097e57610343565b80637f12881c1461082d5780637fdc8fe11461086a57806381b375a0146108a75780638db611be146108d05780638f856296146108fc5780639349d00b1461091357610343565b80633837a75e1161024f5780635921483f1161020857806362c270e1116101e257806362c270e1146107a85780636d4ce63c146107bf5780637014c81d146107ea578063788c47721461081657610343565b80635921483f146107175780635e9c80d6146107545780636284117d1461076b57610343565b80633837a75e146105ba5780633bc5de30146105f75780633e41f1351461062257806345f0c9e61461065f57806348ad9fe81461069d57806358379d71146106da57610343565b806323515760116102bc5780632e49d78b116102965780632e49d78b146104d857806330985bcc146105155780633170428e1461055257806333311ef31461057d57610343565b80632351576014610459578063256560d5146104965780632a1afcd9146104ad57610343565b806304d8215b1461037e57806306595f75146103bb57806311b3c478146103d257806312d91233146103fb5780631b9265b8146104385780631e31d0a81461044257610343565b36610343577f59e04c3f0d44b7caf6e8ef854b61d9a51cf1960d7a88ff6356cc5e946b4b583233346040516103399291906121a5565b60405180910390a1005b7f1e57e3bb474320be3d2c77138f75b7c3941292d647f5f9634e33a8e94e0e069b33346040516103749291906121e1565b60405180910390a1005b34801561038a57600080fd5b506103a560048036038101906103a09190612254565b610cc8565b6040516103b291906122af565b60405180910390f35b3480156103c757600080fd5b506103d0610d0e565b005b3480156103de57600080fd5b506103f960048036038101906103f491906122f6565b610d51565b005b34801561040757600080fd5b50610422600480360381019061041d919061248f565b610de4565b60405161042f9190612596565b60405180910390f35b610440610ea3565b005b34801561044e57600080fd5b50610457610ea5565b005b34801561046557600080fd5b50610480600480360381019061047b9190612254565b610eec565b60405161048d91906125c7565b60405180910390f35b3480156104a257600080fd5b506104ab610f21565b005b3480156104b957600080fd5b506104c2610f32565b6040516104cf91906125c7565b60405180910390f35b3480156104e457600080fd5b506104ff60048036038101906104fa9190612607565b610f38565b60405161050c91906126ab565b60405180910390f35b34801561052157600080fd5b5061053c60048036038101906105379190612254565b610fba565b60405161054991906125c7565b60405180910390f35b34801561055e57600080fd5b5061056761109c565b60405161057491906126c6565b60405180910390f35b34801561058957600080fd5b506105a4600480360381019061059f9190612717565b6111db565b6040516105b19190612753565b60405180910390f35b3480156105c657600080fd5b506105e160048036038101906105dc9190612254565b6111e5565b6040516105ee91906125c7565b60405180910390f35b34801561060357600080fd5b5061060c6112f0565b60405161061991906126c6565b60405180910390f35b34801561062e57600080fd5b5061064960048036038101906106449190612254565b6112fa565b60405161065691906125c7565b60405180910390f35b34801561066b57600080fd5b5061068660048036038101906106819190612823565b6113f5565b6040516106949291906128ed565b60405180910390f35b3480156106a957600080fd5b506106c460048036038101906106bf9190612949565b611406565b6040516106d191906125c7565b60405180910390f35b3480156106e657600080fd5b5061070160048036038101906106fc9190612254565b61141e565b60405161070e91906125c7565b60405180910390f35b34801561072357600080fd5b5061073e60048036038101906107399190612976565b611519565b60405161074b91906125c7565b60405180910390f35b34801561076057600080fd5b50610769611536565b005b34801561077757600080fd5b50610792600480360381019061078d9190612976565b611577565b60405161079f91906125c7565b60405180910390f35b3480156107b457600080fd5b506107bd61158f565b005b3480156107cb57600080fd5b506107d4611623565b6040516107e191906125c7565b60405180910390f35b3480156107f657600080fd5b506107ff61162c565b60405161080d9291906128ed565b60405180910390f35b34801561082257600080fd5b5061082b611671565b005b34801561083957600080fd5b50610854600480360381019061084f91906129c7565b6116a8565b6040516108619190612ba6565b60405180910390f35b34801561087657600080fd5b50610891600480360381019061088c9190612be7565b6116c1565b60405161089e9190612df4565b60405180910390f35b3480156108b357600080fd5b506108ce60048036038101906108c99190612823565b6116ca565b005b3480156108dc57600080fd5b506108e56116ce565b6040516108f39291906128ed565b60405180910390f35b34801561090857600080fd5b50610911611713565b005b34801561091f57600080fd5b50610928611743565b005b34801561093657600080fd5b5061093f61174d565b005b34801561094d57600080fd5b5061096860048036038101906109639190612e38565b611786565b6040516109759190612f37565b60405180910390f35b34801561098a57600080fd5b506109a560048036038101906109a09190612f92565b611831565b6040516109b493929190612ff4565b60405180910390f35b3480156109c957600080fd5b506109e460048036038101906109df9190613086565b611848565b005b3480156109f257600080fd5b506109fb611b34565b005b348015610a0957600080fd5b50610a12611b7d565b604051610a1f91906125c7565b60405180910390f35b610a426004803603810190610a3d9190612254565b611bc4565b604051610a4f91906125c7565b60405180910390f35b348015610a6457600080fd5b50610a6d611d0e565b005b348015610a7b57600080fd5b50610a84611dbe565b005b348015610a9257600080fd5b50610a9b611df0565b604051610aa89190613159565b60405180910390f35b348015610abd57600080fd5b50610ac6611e16565b005b348015610ad457600080fd5b50610aef6004803603810190610aea9190612823565b611e68565b604051610afd9291906128ed565b60405180910390f35b348015610b1257600080fd5b50610b2d6004803603810190610b289190613237565b611e79565b604051610b3a919061333e565b60405180910390f35b348015610b4f57600080fd5b50610b6a6004803603810190610b659190612976565b611e83565b604051610b7791906125c7565b60405180910390f35b348015610b8c57600080fd5b50610ba76004803603810190610ba29190612976565b611e94565b604051610bb491906125c7565b60405180910390f35b348015610bc957600080fd5b50610be46004803603810190610bdf9190612949565b611ee2565b604051610bf19190613360565b60405180910390f35b348015610c0657600080fd5b50610c0f611eec565b604051610c1c91906126ab565b60405180910390f35b348015610c3157600080fd5b50610c4c6004803603810190610c479190612976565b611eff565b005b348015610c5a57600080fd5b50610c756004803603810190610c709190612be7565b611f1b565b604051610c829190612ba6565b60405180910390f35b348015610c9757600080fd5b50610cb26004803603810190610cad9190612976565b612050565b604051610cbf91906125c7565b60405180910390f35b60007fdfac7500004753b91139af55816e7eade36d96faec68b343f77ed66b89912a7b828413604051610cfb91906122af565b60405180910390a1818313905092915050565b6000610d4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d46906133c7565b60405180910390fd5b565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166311abb00283836040518363ffffffff1660e01b8152600401610dae9291906133e7565b600060405180830381600087803b158015610dc857600080fd5b505af1158015610ddc573d6000803e3d6000fd5b505050505050565b60606000825167ffffffffffffffff811115610e0357610e0261234c565b5b604051908082528060200260200182016040528015610e315781602001602082028036833780820191505090505b50905060005b8351811015610e99576001848281518110610e5557610e54613410565b5b6020026020010151610e67919061346e565b828281518110610e7a57610e79613410565b5b6020026020010181815250508080610e91906134a2565b915050610e37565b5080915050919050565b565b3373ffffffffffffffffffffffffffffffffffffffff1660017f33b47a1cd66813164ec00800d74296f57415217c22505ee380594a712936a0b560405160405180910390a3565b600081600260008581526020019081526020016000206000828254610f1191906134ea565b9250508190555081905092915050565b6000610f3057610f2f61352e565b5b565b60005481565b600081600560006101000a81548160ff02191690836003811115610f5f57610f5e612634565b5b0217905550600560009054906101000a900460ff166003811115610f8657610f85612634565b5b7fbea054406fdf249b05d1aef1b5f848d62d902d94389fca702b2d8337677c359a60405160405180910390a2819050919050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663047c4425836040518263ffffffff1660e01b815260040161101791906125c7565b6020604051808303816000875af1158015611036573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061105a9190613572565b50827feace1be0b97ec11f959499c07b9f60f0cc47bf610b28fda8fb0e970339cf3b3560405160405180910390a2818361109491906134ea565b905092915050565b6000803090506000808273ffffffffffffffffffffffffffffffffffffffff16633bc5de3060e01b604051602401604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405161113491906135db565b600060405180830381855afa9150503d806000811461116f576040519150601f19603f3d011682016040523d82523d6000602084013e611174565b606091505b5091509150816111b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b09061363e565b60405180910390fd5b6000818060200190518101906111cf9190613673565b90508094505050505090565b6000819050919050565b60006002826111f491906134ea565b9150600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fa8fca7a84846040518363ffffffff1660e01b81526004016112539291906136a0565b6020604051808303816000875af1158015611272573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112969190613572565b503373ffffffffffffffffffffffffffffffffffffffff1660017f33b47a1cd66813164ec00800d74296f57415217c22505ee380594a712936a0b560405160405180910390a381836112e891906134ea565b905092915050565b6000600454905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633e41f13584846040518363ffffffff1660e01b81526004016113599291906136a0565b6020604051808303816000875af1158015611378573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061139c9190613572565b503373ffffffffffffffffffffffffffffffffffffffff16827f33b47a1cd66813164ec00800d74296f57415217c22505ee380594a712936a0b560405160405180910390a381836113ed91906134ea565b905092915050565b600060608383915091509250929050565b60016020528060005260406000206000915090505481565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633e41f13584846040518363ffffffff1660e01b815260040161147d9291906136a0565b6020604051808303816000875af115801561149c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c09190613572565b503373ffffffffffffffffffffffffffffffffffffffff16827f33b47a1cd66813164ec00800d74296f57415217c22505ee380594a712936a0b560405160405180910390a3818361151191906134ea565b905092915050565b600060026000838152602001908152602001600020549050919050565b600c60156040517f4a2eaf7e00000000000000000000000000000000000000000000000000000000815260040161156e92919061373f565b60405180910390fd5b60026020528060005260406000206000915090505481565b7febe3ff7e2071d351bf2e65b4fccd24e3ae99485f02468f1feecf7d64dc04418860405180606001604052806040518060400160405280600481526020017f4a6f686e000000000000000000000000000000000000000000000000000000008152508152602001600567ffffffffffffffff168152602001600a81525060405161161991906137db565b60405180910390a1565b60008054905090565b60006060617a696040518060400160405280600a81526020017f6f757470757456616c3100000000000000000000000000000000000000000000815250915091509091565b7f25b7adba1b046a19379db4bc06aa1f2e71604d7b599a0ee8783d58110f00e16a60405161169e90613849565b60405180910390a1565b6116b0612087565b816116ba90613a24565b9050919050565b36819050919050565b5050565b60006060617a696040518060400160405280600a81526020017f6f757470757456616c3100000000000000000000000000000000000000000000815250915091509091565b60537feace1be0b97ec11f959499c07b9f60f0cc47bf610b28fda8fb0e970339cf3b3560405160405180910390a2565b61174b611536565b565b7f33bc9bae48dbe1e057f264b3fc6a1dacdcceacb3ba28d937231c70e068a02f1c3360405161177c9190613360565b60405180910390a1565b61178e6120a7565b6117966120a7565b826000600381106117aa576117a9613410565b5b6020028101906117ba9190613a46565b6117c390613a6e565b816000600281106117d7576117d6613410565b5b6020020181905250826001600381106117f3576117f2613410565b5b6020028101906118039190613a46565b61180c90613a6e565b816001600281106118205761181f613410565b5b602002018190525080915050919050565b600080600085858592509250925093509350939050565b7f962c5df4c8ad201a4f54a88f47715bb2cf291d019e350e2dff50ca6fc0f5d0ed8282905060405161187a91906126c6565b60405180910390a1600082829050036118ce57606360656040517f4a2eaf7e0000000000000000000000000000000000000000000000000000000081526004016118c5929190613af7565b60405180910390fd5b6000803073ffffffffffffffffffffffffffffffffffffffff1684846040516118f8929190613b45565b600060405180830381855af49150503d8060008114611933576040519150601f19603f3d011682016040523d82523d6000602084013e611938565b606091505b509150915081611990576000815111156119555780518082602001fd5b6040517f2350eb5200000000000000000000000000000000000000000000000000000000815260040161198790613bd0565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16633170428e6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ff9190613673565b5060008484600090600492611a1693929190613bfa565b90611a219190613c79565b90506358379d7160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603611aaa576040517f2350eb52000000000000000000000000000000000000000000000000000000008152600401611aa190613d24565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16633837a75e600160026040518363ffffffff1660e01b8152600401611ae7929190613dba565b6020604051808303816000875af1158015611b06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b2a9190613572565b5050505050505050565b60033373ffffffffffffffffffffffffffffffffffffffff1660017f5660e8f93f0146f45abcd659e026b75995db50053cbbca4d7f365934ade68bf360405160405180910390a4565b6000600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905090565b6000611bd08383610cc8565b15611ccd57600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633e41f13584846040518363ffffffff1660e01b8152600401611c329291906136a0565b6020604051808303816000875af1158015611c51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c759190613572565b503373ffffffffffffffffffffffffffffffffffffffff16827f33b47a1cd66813164ec00800d74296f57415217c22505ee380594a712936a0b560405160405180910390a38183611cc691906134ea565b9050611d08565b6040517f2350eb52000000000000000000000000000000000000000000000000000000008152600401611cff90613e55565b60405180910390fd5b92915050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d948d896040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611d7857600080fd5b505af1158015611d8c573d6000803e3d6000fd5b505050507fa0f7c7c1fff15178b5db3e56860767f0889c56b591bd2d9ba3121b491347d74c60405160405180910390a1565b6040517fa0c2d2db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60033373ffffffffffffffffffffffffffffffffffffffff1660027f56c2ea44ba516098cee0c181dd9d8db262657368b6e911e83ae0ccfae806c73d604051611e5e90613ec1565b60405180910390a4565b600060608383915091509250929050565b6060819050919050565b600081600081905550819050919050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550819050919050565b6000819050919050565b600560009054906101000a900460ff1681565b6000600260008381526020019081526020016000208190555050565b611f23612087565b6000828060000190611f359190613ee1565b604051602001611f46929190613f74565b6040516020818303038152906040528051906020012090506000602067ffffffffffffffff811115611f7b57611f7a61234c565b5b6040519080825280601f01601f191660200182016040528015611fad5781602001600182028036833780820191505090505b50905060005b602081101561202857828160208110611fcf57611fce613410565b5b1a60f81b828281518110611fe657611fe5613410565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080612020906134a2565b915050611fb3565b5060405180604001604052808561203e90613a6e565b81526020018281525092505050919050565b6000817fb16dba9242e1aa07ccc47228094628f72c8cc9699ee45d5bc8d67b84d3038c6860405160405180910390a2819050919050565b604051806040016040528061209a6120d4565b8152602001606081525090565b60405180604001604052806002905b6120be6120d4565b8152602001906001900390816120b65790505090565b604051806040016040528060608152602001606081525090565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612119826120ee565b9050919050565b6121298161210e565b82525050565b6000819050919050565b6121428161212f565b82525050565b600082825260208201905092915050565b7f5265636569766564204574686572000000000000000000000000000000000000600082015250565b600061218f600e83612148565b915061219a82612159565b602082019050919050565b60006060820190506121ba6000830185612120565b6121c76020830184612139565b81810360408301526121d881612182565b90509392505050565b60006040820190506121f66000830185612120565b6122036020830184612139565b9392505050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b6122318161221e565b811461223c57600080fd5b50565b60008135905061224e81612228565b92915050565b6000806040838503121561226b5761226a612214565b5b60006122798582860161223f565b925050602061228a8582860161223f565b9150509250929050565b60008115159050919050565b6122a981612294565b82525050565b60006020820190506122c460008301846122a0565b92915050565b6122d38161212f565b81146122de57600080fd5b50565b6000813590506122f0816122ca565b92915050565b6000806040838503121561230d5761230c612214565b5b600061231b858286016122e1565b925050602061232c858286016122e1565b9150509250929050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6123848261233b565b810181811067ffffffffffffffff821117156123a3576123a261234c565b5b80604052505050565b60006123b661220a565b90506123c2828261237b565b919050565b600067ffffffffffffffff8211156123e2576123e161234c565b5b602082029050602081019050919050565b600080fd5b600061240b612406846123c7565b6123ac565b9050808382526020820190506020840283018581111561242e5761242d6123f3565b5b835b81811015612457578061244388826122e1565b845260208401935050602081019050612430565b5050509392505050565b600082601f83011261247657612475612336565b5b81356124868482602086016123f8565b91505092915050565b6000602082840312156124a5576124a4612214565b5b600082013567ffffffffffffffff8111156124c3576124c2612219565b5b6124cf84828501612461565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61250d8161212f565b82525050565b600061251f8383612504565b60208301905092915050565b6000602082019050919050565b6000612543826124d8565b61254d81856124e3565b9350612558836124f4565b8060005b838110156125895781516125708882612513565b975061257b8361252b565b92505060018101905061255c565b5085935050505092915050565b600060208201905081810360008301526125b08184612538565b905092915050565b6125c18161221e565b82525050565b60006020820190506125dc60008301846125b8565b92915050565b600481106125ef57600080fd5b50565b600081359050612601816125e2565b92915050565b60006020828403121561261d5761261c612214565b5b600061262b848285016125f2565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6004811061267457612673612634565b5b50565b600081905061268582612663565b919050565b600061269582612677565b9050919050565b6126a58161268a565b82525050565b60006020820190506126c0600083018461269c565b92915050565b60006020820190506126db6000830184612139565b92915050565b6000819050919050565b6126f4816126e1565b81146126ff57600080fd5b50565b600081359050612711816126eb565b92915050565b60006020828403121561272d5761272c612214565b5b600061273b84828501612702565b91505092915050565b61274d816126e1565b82525050565b60006020820190506127686000830184612744565b92915050565b600080fd5b600067ffffffffffffffff82111561278e5761278d61234c565b5b6127978261233b565b9050602081019050919050565b82818337600083830152505050565b60006127c66127c184612773565b6123ac565b9050828152602081018484840111156127e2576127e161276e565b5b6127ed8482856127a4565b509392505050565b600082601f83011261280a57612809612336565b5b813561281a8482602086016127b3565b91505092915050565b6000806040838503121561283a57612839612214565b5b6000612848858286016122e1565b925050602083013567ffffffffffffffff81111561286957612868612219565b5b612875858286016127f5565b9150509250929050565b600081519050919050565b60005b838110156128a857808201518184015260208101905061288d565b60008484015250505050565b60006128bf8261287f565b6128c98185612148565b93506128d981856020860161288a565b6128e28161233b565b840191505092915050565b60006040820190506129026000830185612139565b818103602083015261291481846128b4565b90509392505050565b6129268161210e565b811461293157600080fd5b50565b6000813590506129438161291d565b92915050565b60006020828403121561295f5761295e612214565b5b600061296d84828501612934565b91505092915050565b60006020828403121561298c5761298b612214565b5b600061299a8482850161223f565b91505092915050565b600080fd5b6000604082840312156129be576129bd6129a3565b5b81905092915050565b6000602082840312156129dd576129dc612214565b5b600082013567ffffffffffffffff8111156129fb576129fa612219565b5b612a07848285016129a8565b91505092915050565b600082825260208201905092915050565b6000612a2c8261287f565b612a368185612a10565b9350612a4681856020860161288a565b612a4f8161233b565b840191505092915050565b600082825260208201905092915050565b6000612a76826124d8565b612a808185612a5a565b9350612a8b836124f4565b8060005b83811015612abc578151612aa38882612513565b9750612aae8361252b565b925050600181019050612a8f565b5085935050505092915050565b60006040830160008301518482036000860152612ae68282612a21565b91505060208301518482036020860152612b008282612a6b565b9150508091505092915050565b600081519050919050565b600082825260208201905092915050565b6000612b3482612b0d565b612b3e8185612b18565b9350612b4e81856020860161288a565b612b578161233b565b840191505092915050565b60006040830160008301518482036000860152612b7f8282612ac9565b91505060208301518482036020860152612b998282612b29565b9150508091505092915050565b60006020820190508181036000830152612bc08184612b62565b905092915050565b600060408284031215612bde57612bdd6129a3565b5b81905092915050565b600060208284031215612bfd57612bfc612214565b5b600082013567ffffffffffffffff811115612c1b57612c1a612219565b5b612c2784828501612bc8565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083356001602003843603038112612c5c57612c5b612c3a565b5b83810192508235915060208301925067ffffffffffffffff821115612c8457612c83612c30565b5b600182023603831315612c9a57612c99612c35565b5b509250929050565b6000612cae8385612a10565b9350612cbb8385846127a4565b612cc48361233b565b840190509392505050565b60008083356001602003843603038112612cec57612ceb612c3a565b5b83810192508235915060208301925067ffffffffffffffff821115612d1457612d13612c30565b5b602082023603831315612d2a57612d29612c35565b5b509250929050565b600080fd5b82818337505050565b6000612d4c8385612a5a565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831115612d7f57612d7e612d32565b5b602083029250612d90838584612d37565b82840190509392505050565b600060408301612daf6000840184612c3f565b8583036000870152612dc2838284612ca2565b92505050612dd36020840184612ccf565b8583036020870152612de6838284612d40565b925050508091505092915050565b60006020820190508181036000830152612e0e8184612d9c565b905092915050565b600081905082602060030282011115612e3257612e316123f3565b5b92915050565b600060208284031215612e4e57612e4d612214565b5b600082013567ffffffffffffffff811115612e6c57612e6b612219565b5b612e7884828501612e16565b91505092915050565b600060029050919050565b600081905092915050565b6000819050919050565b6000612ead8383612ac9565b905092915050565b6000602082019050919050565b6000612ecd82612e81565b612ed78185612e8c565b935083602082028501612ee985612e97565b8060005b85811015612f255784840389528151612f068582612ea1565b9450612f1183612eb5565b925060208a01995050600181019050612eed565b50829750879550505050505092915050565b60006020820190508181036000830152612f518184612ec2565b905092915050565b600081600f0b9050919050565b612f6f81612f59565b8114612f7a57600080fd5b50565b600081359050612f8c81612f66565b92915050565b600080600060608486031215612fab57612faa612214565b5b6000612fb98682870161223f565b9350506020612fca86828701612f7d565b9250506040612fdb868287016122e1565b9150509250925092565b612fee81612f59565b82525050565b600060608201905061300960008301866125b8565b6130166020830185612fe5565b6130236040830184612139565b949350505050565b600080fd5b60008083601f84011261304657613045612336565b5b8235905067ffffffffffffffff8111156130635761306261302b565b5b60208301915083600182028301111561307f5761307e6123f3565b5b9250929050565b600080600080606085870312156130a05761309f612214565b5b60006130ae87828801612934565b94505060206130bf878288016122e1565b935050604085013567ffffffffffffffff8111156130e0576130df612219565b5b6130ec87828801613030565b925092505092959194509250565b6000819050919050565b600061311f61311a613115846120ee565b6130fa565b6120ee565b9050919050565b600061313182613104565b9050919050565b600061314382613126565b9050919050565b61315381613138565b82525050565b600060208201905061316e600083018461314a565b92915050565b600067ffffffffffffffff82111561318f5761318e61234c565b5b602082029050602081019050919050565b60006131b36131ae84613174565b6123ac565b905080838252602082019050602084028301858111156131d6576131d56123f3565b5b835b818110156131ff57806131eb8882612934565b8452602084019350506020810190506131d8565b5050509392505050565b600082601f83011261321e5761321d612336565b5b813561322e8482602086016131a0565b91505092915050565b60006020828403121561324d5761324c612214565b5b600082013567ffffffffffffffff81111561326b5761326a612219565b5b61327784828501613209565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6132b58161210e565b82525050565b60006132c783836132ac565b60208301905092915050565b6000602082019050919050565b60006132eb82613280565b6132f5818561328b565b93506133008361329c565b8060005b8381101561333157815161331888826132bb565b9750613323836132d3565b925050600181019050613304565b5085935050505092915050565b6000602082019050818103600083015261335881846132e0565b905092915050565b60006020820190506133756000830184612120565b92915050565b7f616c7761797320726576657274206572726f7200000000000000000000000000600082015250565b60006133b1601383612148565b91506133bc8261337b565b602082019050919050565b600060208201905081810360008301526133e0816133a4565b9050919050565b60006040820190506133fc6000830185612139565b6134096020830184612139565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006134798261212f565b91506134848361212f565b925082820190508082111561349c5761349b61343f565b5b92915050565b60006134ad8261212f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036134df576134de61343f565b5b600182019050919050565b60006134f58261221e565b91506135008361221e565b9250828201905082811215600083121683821260008412151617156135285761352761343f565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60008151905061356c81612228565b92915050565b60006020828403121561358857613587612214565b5b60006135968482850161355d565b91505092915050565b600081905092915050565b60006135b582612b0d565b6135bf818561359f565b93506135cf81856020860161288a565b80840191505092915050565b60006135e782846135aa565b915081905092915050565b7f5374617469632063616c6c206661696c65640000000000000000000000000000600082015250565b6000613628601283612148565b9150613633826135f2565b602082019050919050565b600060208201905081810360008301526136578161361b565b9050919050565b60008151905061366d816122ca565b92915050565b60006020828403121561368957613688612214565b5b60006136978482850161365e565b91505092915050565b60006040820190506136b560008301856125b8565b6136c260208301846125b8565b9392505050565b6000819050919050565b60006136ee6136e96136e4846136c9565b6130fa565b61212f565b9050919050565b6136fe816136d3565b82525050565b6000819050919050565b600061372961372461371f84613704565b6130fa565b61212f565b9050919050565b6137398161370e565b82525050565b600060408201905061375460008301856136f5565b6137616020830184613730565b9392505050565b600067ffffffffffffffff82169050919050565b61378581613768565b82525050565b600060608301600083015184820360008601526137a88282612a21565b91505060208301516137bd602086018261377c565b5060408301516137d06040860182612504565b508091505092915050565b600060208201905081810360008301526137f5818461378b565b905092915050565b7f6d79537472696e67000000000000000000000000000000000000000000000000600082015250565b6000613833600883612148565b915061383e826137fd565b602082019050919050565b6000602082019050818103600083015261386281613826565b9050919050565b600080fd5b600080fd5b60006040828403121561388957613888613869565b5b61389360406123ac565b9050600082013567ffffffffffffffff8111156138b3576138b261386e565b5b6138bf848285016127f5565b600083015250602082013567ffffffffffffffff8111156138e3576138e261386e565b5b6138ef84828501612461565b60208301525092915050565b600067ffffffffffffffff8211156139165761391561234c565b5b61391f8261233b565b9050602081019050919050565b600061393f61393a846138fb565b6123ac565b90508281526020810184848401111561395b5761395a61276e565b5b6139668482856127a4565b509392505050565b600082601f83011261398357613982612336565b5b813561399384826020860161392c565b91505092915050565b6000604082840312156139b2576139b1613869565b5b6139bc60406123ac565b9050600082013567ffffffffffffffff8111156139dc576139db61386e565b5b6139e884828501613873565b600083015250602082013567ffffffffffffffff811115613a0c57613a0b61386e565b5b613a188482850161396e565b60208301525092915050565b6000613a30368361399c565b9050919050565b600080fd5b600080fd5b600080fd5b600082356001604003833603038112613a6257613a61613a37565b5b80830191505092915050565b6000613a7a3683613873565b9050919050565b6000819050919050565b6000613aa6613aa1613a9c84613a81565b6130fa565b61212f565b9050919050565b613ab681613a8b565b82525050565b6000819050919050565b6000613ae1613adc613ad784613abc565b6130fa565b61212f565b9050919050565b613af181613ac6565b82525050565b6000604082019050613b0c6000830185613aad565b613b196020830184613ae8565b9392505050565b6000613b2c838561359f565b9350613b398385846127a4565b82840190509392505050565b6000613b52828486613b20565b91508190509392505050565b7f64656c656761746563616c6c206661696c65642077697468206e6f207265617360008201527f6f6e000000000000000000000000000000000000000000000000000000000000602082015250565b6000613bba602283612148565b9150613bc582613b5e565b604082019050919050565b60006020820190508181036000830152613be981613bad565b9050919050565b600080fd5b600080fd5b60008085851115613c0e57613c0d613bf0565b5b83861115613c1f57613c1e613bf5565b5b6001850283019150848603905094509492505050565b600082905092915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600082821b905092915050565b6000613c858383613c35565b82613c908135613c40565b92506004821015613cd057613ccb7fffffffff0000000000000000000000000000000000000000000000000000000083600403600802613c6c565b831692505b505092915050565b7f6f68206f68206f682069742773206d6167696321000000000000000000000000600082015250565b6000613d0e601483612148565b9150613d1982613cd8565b602082019050919050565b60006020820190508181036000830152613d3d81613d01565b9050919050565b6000819050919050565b6000613d69613d64613d5f84613d44565b6130fa565b61221e565b9050919050565b613d7981613d4e565b82525050565b6000819050919050565b6000613da4613d9f613d9a84613d7f565b6130fa565b61221e565b9050919050565b613db481613d89565b82525050565b6000604082019050613dcf6000830185613d70565b613ddc6020830184613dab565b9392505050565b7f666972737420696e7420776173206e6f742067726561746572207468616e207360008201527f65636f6e6420696e740000000000000000000000000000000000000000000000602082015250565b6000613e3f602983612148565b9150613e4a82613de3565b604082019050919050565b60006020820190508181036000830152613e6e81613e32565b9050919050565b7f736f6d6520696400000000000000000000000000000000000000000000000000600082015250565b6000613eab600783612148565b9150613eb682613e75565b602082019050919050565b60006020820190508181036000830152613eda81613e9e565b9050919050565b60008083356001602003843603038112613efe57613efd613a37565b5b80840192508235915067ffffffffffffffff821115613f2057613f1f613a3c565b5b602083019250600182023603831315613f3c57613f3b613a41565b5b509250929050565b600081905092915050565b6000613f5b8385613f44565b9350613f688385846127a4565b82840190509392505050565b6000613f81828486613f4f565b9150819050939250505056fea2646970667358221220811fec16fe5ce732327b99430471548e9245369ec054d5ac5f20da3b4b1c9bb264736f6c63430008130033 \ No newline at end of file diff --git a/seth/contracts/bin/NetworkDebugSubContract.bin b/seth/contracts/bin/NetworkDebugSubContract.bin index 83359ec0e..c178c45ba 100644 --- a/seth/contracts/bin/NetworkDebugSubContract.bin +++ b/seth/contracts/bin/NetworkDebugSubContract.bin @@ -1 +1 @@ -608060405234801561001057600080fd5b506105f4806100206000396000f3fe60806040526004361061004a5760003560e01c8063047c44251461004f57806311abb0021461008c5780631b9265b8146100b55780633e41f135146100bf578063fa8fca7a146100fc575b600080fd5b34801561005b57600080fd5b5061007660048036038101906100719190610368565b610139565b60405161008391906103a4565b60405180910390f35b34801561009857600080fd5b506100b360048036038101906100ae91906103f5565b610186565b005b6100bd6101c5565b005b3480156100cb57600080fd5b506100e660048036038101906100e19190610435565b6101c7565b6040516100f391906103a4565b60405180910390f35b34801561010857600080fd5b50610123600480360381019061011e9190610435565b610230565b60405161013091906103a4565b60405180910390f35b60007f33bc9bae48dbe1e057f264b3fc6a1dacdcceacb3ba28d937231c70e068a02f1c3360405161016a91906104b6565b60405180910390a160038261017f9190610500565b9050919050565b81816040517f4a2eaf7e0000000000000000000000000000000000000000000000000000000081526004016101bc929190610553565b60405180910390fd5b565b60006002826101d69190610500565b91503373ffffffffffffffffffffffffffffffffffffffff16827f33b47a1cd66813164ec00800d74296f57415217c22505ee380594a712936a0b560405160405180910390a381836102289190610500565b905092915050565b60003373ffffffffffffffffffffffffffffffffffffffff16827f33b47a1cd66813164ec00800d74296f57415217c22505ee380594a712936a0b560405160405180910390a360003373ffffffffffffffffffffffffffffffffffffffff1663fbcb8d07846040518263ffffffff1660e01b81526004016102b191906103a4565b6020604051808303816000875af11580156102d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102f49190610591565b9050807feace1be0b97ec11f959499c07b9f60f0cc47bf610b28fda8fb0e970339cf3b3560405160405180910390a28091505092915050565b600080fd5b6000819050919050565b61034581610332565b811461035057600080fd5b50565b6000813590506103628161033c565b92915050565b60006020828403121561037e5761037d61032d565b5b600061038c84828501610353565b91505092915050565b61039e81610332565b82525050565b60006020820190506103b96000830184610395565b92915050565b6000819050919050565b6103d2816103bf565b81146103dd57600080fd5b50565b6000813590506103ef816103c9565b92915050565b6000806040838503121561040c5761040b61032d565b5b600061041a858286016103e0565b925050602061042b858286016103e0565b9150509250929050565b6000806040838503121561044c5761044b61032d565b5b600061045a85828601610353565b925050602061046b85828601610353565b9150509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006104a082610475565b9050919050565b6104b081610495565b82525050565b60006020820190506104cb60008301846104a7565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061050b82610332565b915061051683610332565b92508282019050828112156000831216838212600084121516171561053e5761053d6104d1565b5b92915050565b61054d816103bf565b82525050565b60006040820190506105686000830185610544565b6105756020830184610544565b9392505050565b60008151905061058b8161033c565b92915050565b6000602082840312156105a7576105a661032d565b5b60006105b58482850161057c565b9150509291505056fea2646970667358221220baf1ca0ebe5c3f70cf36de50eba34b796fa2141e3773a505c3199b335b0023c564736f6c63430008130033 \ No newline at end of file +608060405234801561001057600080fd5b50610644806100206000396000f3fe6080604052600436106100555760003560e01c8063047c44251461005a57806311abb002146100975780631b9265b8146100c05780632d948d89146100ca5780633e41f135146100e1578063fa8fca7a1461011e575b600080fd5b34801561006657600080fd5b50610081600480360381019061007c91906103b8565b61015b565b60405161008e91906103f4565b60405180910390f35b3480156100a357600080fd5b506100be60048036038101906100b99190610445565b6101a8565b005b6100c86101e7565b005b3480156100d657600080fd5b506100df6101e9565b005b3480156100ed57600080fd5b5061010860048036038101906101039190610485565b610217565b60405161011591906103f4565b60405180910390f35b34801561012a57600080fd5b5061014560048036038101906101409190610485565b610280565b60405161015291906103f4565b60405180910390f35b60007f33bc9bae48dbe1e057f264b3fc6a1dacdcceacb3ba28d937231c70e068a02f1c3360405161018c9190610506565b60405180910390a16003826101a19190610550565b9050919050565b81816040517f4a2eaf7e0000000000000000000000000000000000000000000000000000000081526004016101de9291906105a3565b60405180910390fd5b565b7fe0b03c5e88196d907268b0babc690e041bdc7fcc1abf4bbf1e363e28c17e6b9b60405160405180910390a1565b60006002826102269190610550565b91503373ffffffffffffffffffffffffffffffffffffffff16827f33b47a1cd66813164ec00800d74296f57415217c22505ee380594a712936a0b560405160405180910390a381836102789190610550565b905092915050565b60003373ffffffffffffffffffffffffffffffffffffffff16827f33b47a1cd66813164ec00800d74296f57415217c22505ee380594a712936a0b560405160405180910390a360003373ffffffffffffffffffffffffffffffffffffffff1663fbcb8d07846040518263ffffffff1660e01b815260040161030191906103f4565b6020604051808303816000875af1158015610320573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061034491906105e1565b9050807feace1be0b97ec11f959499c07b9f60f0cc47bf610b28fda8fb0e970339cf3b3560405160405180910390a28091505092915050565b600080fd5b6000819050919050565b61039581610382565b81146103a057600080fd5b50565b6000813590506103b28161038c565b92915050565b6000602082840312156103ce576103cd61037d565b5b60006103dc848285016103a3565b91505092915050565b6103ee81610382565b82525050565b600060208201905061040960008301846103e5565b92915050565b6000819050919050565b6104228161040f565b811461042d57600080fd5b50565b60008135905061043f81610419565b92915050565b6000806040838503121561045c5761045b61037d565b5b600061046a85828601610430565b925050602061047b85828601610430565b9150509250929050565b6000806040838503121561049c5761049b61037d565b5b60006104aa858286016103a3565b92505060206104bb858286016103a3565b9150509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006104f0826104c5565b9050919050565b610500816104e5565b82525050565b600060208201905061051b60008301846104f7565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061055b82610382565b915061056683610382565b92508282019050828112156000831216838212600084121516171561058e5761058d610521565b5b92915050565b61059d8161040f565b82525050565b60006040820190506105b86000830185610594565b6105c56020830184610594565b9392505050565b6000815190506105db8161038c565b92915050565b6000602082840312156105f7576105f661037d565b5b6000610605848285016105cc565b9150509291505056fea26469706673582212205f29e7a2fe3b977e48321d06e8e10c9329a7347f657a04085ae8411d96cf98b664736f6c63430008130033 \ No newline at end of file diff --git a/seth/contracts/bin/TestContractOne.bin b/seth/contracts/bin/TestContractOne.bin new file mode 100644 index 000000000..7ab14d26a --- /dev/null +++ b/seth/contracts/bin/TestContractOne.bin @@ -0,0 +1 @@ +608060405234801561001057600080fd5b506101f2806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c806312a27a5e14610030575b600080fd5b61004a600480360381019061004591906100df565b610060565b604051610057919061012e565b60405180910390f35b600081837f192aedde7837c0cbfb2275e082ba2391de36cf5a893681e9dac2cced6947614e60405160405180910390a3818361009c9190610178565b905092915050565b600080fd5b6000819050919050565b6100bc816100a9565b81146100c757600080fd5b50565b6000813590506100d9816100b3565b92915050565b600080604083850312156100f6576100f56100a4565b5b6000610104858286016100ca565b9250506020610115858286016100ca565b9150509250929050565b610128816100a9565b82525050565b6000602082019050610143600083018461011f565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610183826100a9565b915061018e836100a9565b9250828201905082811215600083121683821260008412151617156101b6576101b5610149565b5b9291505056fea26469706673582212203a9131e072ba50bd7aedd7d16ac86eb26a9e83acd9a8736e900ad00a4b689ae664736f6c63430008130033 \ No newline at end of file diff --git a/seth/contracts/bin/TestContractTwo.bin b/seth/contracts/bin/TestContractTwo.bin new file mode 100644 index 000000000..00ada9751 --- /dev/null +++ b/seth/contracts/bin/TestContractTwo.bin @@ -0,0 +1 @@ +608060405234801561001057600080fd5b506101f2806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063e31279c514610030575b600080fd5b61004a600480360381019061004591906100df565b610060565b604051610057919061012e565b60405180910390f35b600081837f192aedde7837c0cbfb2275e082ba2391de36cf5a893681e9dac2cced6947614e60405160405180910390a3818361009c9190610178565b905092915050565b600080fd5b6000819050919050565b6100bc816100a9565b81146100c757600080fd5b50565b6000813590506100d9816100b3565b92915050565b600080604083850312156100f6576100f56100a4565b5b6000610104858286016100ca565b9250506020610115858286016100ca565b9150509250929050565b610128816100a9565b82525050565b6000602082019050610143600083018461011f565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610183826100a9565b915061018e836100a9565b9250828201905082811215600083121683821260008412151617156101b6576101b5610149565b5b9291505056fea264697066735822122036206ffb0222909d65d2a872080e677681bc6601dce2b4cfebd9503a1187280964736f6c63430008130033 \ No newline at end of file diff --git a/seth/contracts/bind/debug/NetworkDebugContract.go b/seth/contracts/bind/NetworkDebugContract/NetworkDebugContract.go similarity index 74% rename from seth/contracts/bind/debug/NetworkDebugContract.go rename to seth/contracts/bind/NetworkDebugContract/NetworkDebugContract.go index d2e14bd02..d765c380d 100644 --- a/seth/contracts/bind/debug/NetworkDebugContract.go +++ b/seth/contracts/bind/NetworkDebugContract/NetworkDebugContract.go @@ -1,7 +1,7 @@ // Code generated - DO NOT EDIT. // This file is a generated binding and any manual changes will be lost. -package network_debug_contract +package NetworkDebugContract import ( "errors" @@ -50,8 +50,8 @@ type NetworkDebugContractNestedData struct { // NetworkDebugContractMetaData contains all meta data concerning the NetworkDebugContract contract. var NetworkDebugContractMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"subAddr\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"available\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"required\",\"type\":\"uint256\"}],\"name\":\"CustomErr\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CustomErrNoValues\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"message\",\"type\":\"string\"}],\"name\":\"CustomErrWithMessage\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"CallDataLength\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"int256\",\"name\":\"a\",\"type\":\"int256\"}],\"name\":\"CallbackEvent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"enumNetworkDebugContract.Status\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"CurrentStatus\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"EtherReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"name\":\"IsValidEvent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"NoIndexEvent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"str\",\"type\":\"string\"}],\"name\":\"NoIndexEventString\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"uint64\",\"name\":\"balance\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"dailyLimit\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structNetworkDebugContract.Account\",\"name\":\"a\",\"type\":\"tuple\"}],\"name\":\"NoIndexStructEvent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"a\",\"type\":\"uint256\"}],\"name\":\"OneIndexEvent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"message\",\"type\":\"string\"}],\"name\":\"Received\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"roundId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"startedBy\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"startedAt\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"dataId\",\"type\":\"string\"}],\"name\":\"ThreeIndexAndOneNonIndexedEvent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"roundId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"startedBy\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"startedAt\",\"type\":\"uint256\"}],\"name\":\"ThreeIndexEvent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"roundId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"startedBy\",\"type\":\"address\"}],\"name\":\"TwoIndexEvent\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"idx\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"x\",\"type\":\"int256\"}],\"name\":\"addCounter\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"alwaysRevertsAssert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"alwaysRevertsCustomError\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"alwaysRevertsCustomErrorNoValues\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"alwaysRevertsRequire\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"name\":\"callRevertFunctionInSubContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"callRevertFunctionInTheContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"x\",\"type\":\"int256\"}],\"name\":\"callbackMethod\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"name\":\"counterMap\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentStatus\",\"outputs\":[{\"internalType\":\"enumNetworkDebugContract.Status\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"emitAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"input\",\"type\":\"bytes32\"}],\"name\":\"emitBytes32\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"output\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"emitFourParamMixedEvent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"inputVal1\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"inputVal2\",\"type\":\"string\"}],\"name\":\"emitInputs\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"inputVal1\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"inputVal2\",\"type\":\"string\"}],\"name\":\"emitInputsOutputs\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"first\",\"type\":\"int256\"},{\"internalType\":\"int128\",\"name\":\"second\",\"type\":\"int128\"},{\"internalType\":\"uint256\",\"name\":\"third\",\"type\":\"uint256\"}],\"name\":\"emitInts\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"},{\"internalType\":\"int128\",\"name\":\"outputVal1\",\"type\":\"int128\"},{\"internalType\":\"uint256\",\"name\":\"outputVal2\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"inputVal1\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"inputVal2\",\"type\":\"string\"}],\"name\":\"emitNamedInputsOutputs\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"outputVal1\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"outputVal2\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"emitNamedOutputs\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"outputVal1\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"outputVal2\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"emitNoIndexEvent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"emitNoIndexEventString\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"emitNoIndexStructEvent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"emitOneIndexEvent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"emitOutputs\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"emitThreeIndexEvent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"emitTwoIndexEvent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"get\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"data\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"idx\",\"type\":\"int256\"}],\"name\":\"getCounter\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"data\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getData\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMap\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"data\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"onTokenTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pay\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"performStaticCall\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"input\",\"type\":\"address[]\"}],\"name\":\"processAddressArray\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"}],\"internalType\":\"structNetworkDebugContract.Data\",\"name\":\"data\",\"type\":\"tuple\"}],\"name\":\"processDynamicData\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"}],\"internalType\":\"structNetworkDebugContract.Data\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"}],\"internalType\":\"structNetworkDebugContract.Data[3]\",\"name\":\"data\",\"type\":\"tuple[3]\"}],\"name\":\"processFixedDataArray\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"}],\"internalType\":\"structNetworkDebugContract.Data[2]\",\"name\":\"\",\"type\":\"tuple[2]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"}],\"internalType\":\"structNetworkDebugContract.Data\",\"name\":\"data\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"dynamicBytes\",\"type\":\"bytes\"}],\"internalType\":\"structNetworkDebugContract.NestedData\",\"name\":\"data\",\"type\":\"tuple\"}],\"name\":\"processNestedData\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"}],\"internalType\":\"structNetworkDebugContract.Data\",\"name\":\"data\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"dynamicBytes\",\"type\":\"bytes\"}],\"internalType\":\"structNetworkDebugContract.NestedData\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"}],\"internalType\":\"structNetworkDebugContract.Data\",\"name\":\"data\",\"type\":\"tuple\"}],\"name\":\"processNestedData\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"}],\"internalType\":\"structNetworkDebugContract.Data\",\"name\":\"data\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"dynamicBytes\",\"type\":\"bytes\"}],\"internalType\":\"structNetworkDebugContract.NestedData\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"input\",\"type\":\"uint256[]\"}],\"name\":\"processUintArray\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"idx\",\"type\":\"int256\"}],\"name\":\"resetCounter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"x\",\"type\":\"int256\"}],\"name\":\"set\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"x\",\"type\":\"int256\"}],\"name\":\"setMap\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enumNetworkDebugContract.Status\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"setStatus\",\"outputs\":[{\"internalType\":\"enumNetworkDebugContract.Status\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"storedData\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"storedDataMap\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"subContract\",\"outputs\":[{\"internalType\":\"contractNetworkDebugSubContract\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"x\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"y\",\"type\":\"int256\"}],\"name\":\"trace\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"x\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"y\",\"type\":\"int256\"}],\"name\":\"traceDifferent\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"x\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"y\",\"type\":\"int256\"}],\"name\":\"traceSubWithCallback\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"x\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"y\",\"type\":\"int256\"}],\"name\":\"traceWithValidate\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"x\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"y\",\"type\":\"int256\"}],\"name\":\"traceYetDifferent\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"x\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"y\",\"type\":\"int256\"}],\"name\":\"validate\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Bin: "0x60806040523480156200001157600080fd5b5060405162004015380380620040158339818101604052810190620000379190620000f2565b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506101006004819055505062000124565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000ba826200008d565b9050919050565b620000cc81620000ad565b8114620000d857600080fd5b50565b600081519050620000ec81620000c1565b92915050565b6000602082840312156200010b576200010a62000088565b5b60006200011b84828501620000db565b91505092915050565b613ee180620001346000396000f3fe6080604052600436106102e85760003560e01c8063788c477211610190578063b1ae9d85116100dc578063e5c19b2d11610095578063ef8a92351161006f578063ef8a923514610bc8578063f3396bd914610bf3578063f499af2a14610c1c578063fbcb8d0714610c5957610328565b8063e5c19b2d14610b11578063e8116e2814610b4e578063ec5c3ede14610b8b57610328565b8063b1ae9d8514610a0d578063b600141f14610a3d578063c0d06d8914610a54578063c2124b2214610a7f578063d7a8020514610a96578063e1111f7914610ad457610328565b80639349d00b116101495780639e099652116101235780639e09965214610963578063a4c0ed36146109a2578063aa3fdcf4146109cb578063ad3de14c146109e257610328565b80639349d00b146108f857806395a81a4c1461090f57806399adad2e1461092657610328565b8063788c4772146107fb5780637f12881c146108125780637fdc8fe11461084f57806381b375a01461088c5780638db611be146108b55780638f856296146108e157610328565b806333311ef31161024f57806358379d71116102085780636284117d116101e25780636284117d1461075057806362c270e11461078d5780636d4ce63c146107a45780637014c81d146107cf57610328565b806358379d71146106bf5780635921483f146106fc5780635e9c80d61461073957610328565b806333311ef3146105625780633837a75e1461059f5780633bc5de30146105dc5780633e41f1351461060757806345f0c9e61461064457806348ad9fe81461068257610328565b806323515760116102a1578063235157601461043e578063256560d51461047b5780632a1afcd9146104925780632e49d78b146104bd57806330985bcc146104fa5780633170428e1461053757610328565b806304d8215b1461036357806306595f75146103a057806311b3c478146103b757806312d91233146103e05780631b9265b81461041d5780631e31d0a81461042757610328565b36610328577f59e04c3f0d44b7caf6e8ef854b61d9a51cf1960d7a88ff6356cc5e946b4b5832333460405161031e9291906120c3565b60405180910390a1005b7f1e57e3bb474320be3d2c77138f75b7c3941292d647f5f9634e33a8e94e0e069b33346040516103599291906120ff565b60405180910390a1005b34801561036f57600080fd5b5061038a60048036038101906103859190612172565b610c96565b60405161039791906121cd565b60405180910390f35b3480156103ac57600080fd5b506103b5610cdc565b005b3480156103c357600080fd5b506103de60048036038101906103d99190612214565b610d1f565b005b3480156103ec57600080fd5b50610407600480360381019061040291906123ad565b610db2565b60405161041491906124b4565b60405180910390f35b610425610e71565b005b34801561043357600080fd5b5061043c610e73565b005b34801561044a57600080fd5b5061046560048036038101906104609190612172565b610eba565b60405161047291906124e5565b60405180910390f35b34801561048757600080fd5b50610490610eef565b005b34801561049e57600080fd5b506104a7610f00565b6040516104b491906124e5565b60405180910390f35b3480156104c957600080fd5b506104e460048036038101906104df9190612525565b610f06565b6040516104f191906125c9565b60405180910390f35b34801561050657600080fd5b50610521600480360381019061051c9190612172565b610f88565b60405161052e91906124e5565b60405180910390f35b34801561054357600080fd5b5061054c61106a565b60405161055991906125e4565b60405180910390f35b34801561056e57600080fd5b5061058960048036038101906105849190612635565b6111a9565b6040516105969190612671565b60405180910390f35b3480156105ab57600080fd5b506105c660048036038101906105c19190612172565b6111b3565b6040516105d391906124e5565b60405180910390f35b3480156105e857600080fd5b506105f16112be565b6040516105fe91906125e4565b60405180910390f35b34801561061357600080fd5b5061062e60048036038101906106299190612172565b6112c8565b60405161063b91906124e5565b60405180910390f35b34801561065057600080fd5b5061066b60048036038101906106669190612741565b6113c3565b60405161067992919061280b565b60405180910390f35b34801561068e57600080fd5b506106a960048036038101906106a49190612867565b6113d4565b6040516106b691906124e5565b60405180910390f35b3480156106cb57600080fd5b506106e660048036038101906106e19190612172565b6113ec565b6040516106f391906124e5565b60405180910390f35b34801561070857600080fd5b50610723600480360381019061071e9190612894565b6114e7565b60405161073091906124e5565b60405180910390f35b34801561074557600080fd5b5061074e611504565b005b34801561075c57600080fd5b5061077760048036038101906107729190612894565b611545565b60405161078491906124e5565b60405180910390f35b34801561079957600080fd5b506107a261155d565b005b3480156107b057600080fd5b506107b96115f1565b6040516107c691906124e5565b60405180910390f35b3480156107db57600080fd5b506107e46115fa565b6040516107f292919061280b565b60405180910390f35b34801561080757600080fd5b5061081061163f565b005b34801561081e57600080fd5b50610839600480360381019061083491906128e5565b611676565b6040516108469190612ac4565b60405180910390f35b34801561085b57600080fd5b5061087660048036038101906108719190612b05565b61168f565b6040516108839190612d12565b60405180910390f35b34801561089857600080fd5b506108b360048036038101906108ae9190612741565b611698565b005b3480156108c157600080fd5b506108ca61169c565b6040516108d892919061280b565b60405180910390f35b3480156108ed57600080fd5b506108f66116e1565b005b34801561090457600080fd5b5061090d611711565b005b34801561091b57600080fd5b5061092461171b565b005b34801561093257600080fd5b5061094d60048036038101906109489190612d56565b611754565b60405161095a9190612e55565b60405180910390f35b34801561096f57600080fd5b5061098a60048036038101906109859190612eb0565b6117ff565b60405161099993929190612f12565b60405180910390f35b3480156109ae57600080fd5b506109c960048036038101906109c49190612fa4565b611816565b005b3480156109d757600080fd5b506109e0611b02565b005b3480156109ee57600080fd5b506109f7611b4b565b604051610a0491906124e5565b60405180910390f35b610a276004803603810190610a229190612172565b611b92565b604051610a3491906124e5565b60405180910390f35b348015610a4957600080fd5b50610a52611cdc565b005b348015610a6057600080fd5b50610a69611d0e565b604051610a769190613077565b60405180910390f35b348015610a8b57600080fd5b50610a94611d34565b005b348015610aa257600080fd5b50610abd6004803603810190610ab89190612741565b611d86565b604051610acb92919061280b565b60405180910390f35b348015610ae057600080fd5b50610afb6004803603810190610af69190613155565b611d97565b604051610b08919061325c565b60405180910390f35b348015610b1d57600080fd5b50610b386004803603810190610b339190612894565b611da1565b604051610b4591906124e5565b60405180910390f35b348015610b5a57600080fd5b50610b756004803603810190610b709190612894565b611db2565b604051610b8291906124e5565b60405180910390f35b348015610b9757600080fd5b50610bb26004803603810190610bad9190612867565b611e00565b604051610bbf919061327e565b60405180910390f35b348015610bd457600080fd5b50610bdd611e0a565b604051610bea91906125c9565b60405180910390f35b348015610bff57600080fd5b50610c1a6004803603810190610c159190612894565b611e1d565b005b348015610c2857600080fd5b50610c436004803603810190610c3e9190612b05565b611e39565b604051610c509190612ac4565b60405180910390f35b348015610c6557600080fd5b50610c806004803603810190610c7b9190612894565b611f6e565b604051610c8d91906124e5565b60405180910390f35b60007fdfac7500004753b91139af55816e7eade36d96faec68b343f77ed66b89912a7b828413604051610cc991906121cd565b60405180910390a1818313905092915050565b6000610d1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d14906132e5565b60405180910390fd5b565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166311abb00283836040518363ffffffff1660e01b8152600401610d7c929190613305565b600060405180830381600087803b158015610d9657600080fd5b505af1158015610daa573d6000803e3d6000fd5b505050505050565b60606000825167ffffffffffffffff811115610dd157610dd061226a565b5b604051908082528060200260200182016040528015610dff5781602001602082028036833780820191505090505b50905060005b8351811015610e67576001848281518110610e2357610e2261332e565b5b6020026020010151610e35919061338c565b828281518110610e4857610e4761332e565b5b6020026020010181815250508080610e5f906133c0565b915050610e05565b5080915050919050565b565b3373ffffffffffffffffffffffffffffffffffffffff1660017f33b47a1cd66813164ec00800d74296f57415217c22505ee380594a712936a0b560405160405180910390a3565b600081600260008581526020019081526020016000206000828254610edf9190613408565b9250508190555081905092915050565b6000610efe57610efd61344c565b5b565b60005481565b600081600560006101000a81548160ff02191690836003811115610f2d57610f2c612552565b5b0217905550600560009054906101000a900460ff166003811115610f5457610f53612552565b5b7fbea054406fdf249b05d1aef1b5f848d62d902d94389fca702b2d8337677c359a60405160405180910390a2819050919050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663047c4425836040518263ffffffff1660e01b8152600401610fe591906124e5565b6020604051808303816000875af1158015611004573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110289190613490565b50827feace1be0b97ec11f959499c07b9f60f0cc47bf610b28fda8fb0e970339cf3b3560405160405180910390a281836110629190613408565b905092915050565b6000803090506000808273ffffffffffffffffffffffffffffffffffffffff16633bc5de3060e01b604051602401604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405161110291906134f9565b600060405180830381855afa9150503d806000811461113d576040519150601f19603f3d011682016040523d82523d6000602084013e611142565b606091505b509150915081611187576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117e9061355c565b60405180910390fd5b60008180602001905181019061119d9190613591565b90508094505050505090565b6000819050919050565b60006002826111c29190613408565b9150600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fa8fca7a84846040518363ffffffff1660e01b81526004016112219291906135be565b6020604051808303816000875af1158015611240573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112649190613490565b503373ffffffffffffffffffffffffffffffffffffffff1660017f33b47a1cd66813164ec00800d74296f57415217c22505ee380594a712936a0b560405160405180910390a381836112b69190613408565b905092915050565b6000600454905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633e41f13584846040518363ffffffff1660e01b81526004016113279291906135be565b6020604051808303816000875af1158015611346573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061136a9190613490565b503373ffffffffffffffffffffffffffffffffffffffff16827f33b47a1cd66813164ec00800d74296f57415217c22505ee380594a712936a0b560405160405180910390a381836113bb9190613408565b905092915050565b600060608383915091509250929050565b60016020528060005260406000206000915090505481565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633e41f13584846040518363ffffffff1660e01b815260040161144b9291906135be565b6020604051808303816000875af115801561146a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148e9190613490565b503373ffffffffffffffffffffffffffffffffffffffff16827f33b47a1cd66813164ec00800d74296f57415217c22505ee380594a712936a0b560405160405180910390a381836114df9190613408565b905092915050565b600060026000838152602001908152602001600020549050919050565b600c60156040517f4a2eaf7e00000000000000000000000000000000000000000000000000000000815260040161153c92919061365d565b60405180910390fd5b60026020528060005260406000206000915090505481565b7febe3ff7e2071d351bf2e65b4fccd24e3ae99485f02468f1feecf7d64dc04418860405180606001604052806040518060400160405280600481526020017f4a6f686e000000000000000000000000000000000000000000000000000000008152508152602001600567ffffffffffffffff168152602001600a8152506040516115e791906136f9565b60405180910390a1565b60008054905090565b60006060617a696040518060400160405280600a81526020017f6f757470757456616c3100000000000000000000000000000000000000000000815250915091509091565b7f25b7adba1b046a19379db4bc06aa1f2e71604d7b599a0ee8783d58110f00e16a60405161166c90613767565b60405180910390a1565b61167e611fa5565b8161168890613942565b9050919050565b36819050919050565b5050565b60006060617a696040518060400160405280600a81526020017f6f757470757456616c3100000000000000000000000000000000000000000000815250915091509091565b60537feace1be0b97ec11f959499c07b9f60f0cc47bf610b28fda8fb0e970339cf3b3560405160405180910390a2565b611719611504565b565b7f33bc9bae48dbe1e057f264b3fc6a1dacdcceacb3ba28d937231c70e068a02f1c3360405161174a919061327e565b60405180910390a1565b61175c611fc5565b611764611fc5565b826000600381106117785761177761332e565b5b6020028101906117889190613964565b6117919061398c565b816000600281106117a5576117a461332e565b5b6020020181905250826001600381106117c1576117c061332e565b5b6020028101906117d19190613964565b6117da9061398c565b816001600281106117ee576117ed61332e565b5b602002018190525080915050919050565b600080600085858592509250925093509350939050565b7f962c5df4c8ad201a4f54a88f47715bb2cf291d019e350e2dff50ca6fc0f5d0ed8282905060405161184891906125e4565b60405180910390a16000828290500361189c57606360656040517f4a2eaf7e000000000000000000000000000000000000000000000000000000008152600401611893929190613a15565b60405180910390fd5b6000803073ffffffffffffffffffffffffffffffffffffffff1684846040516118c6929190613a63565b600060405180830381855af49150503d8060008114611901576040519150601f19603f3d011682016040523d82523d6000602084013e611906565b606091505b50915091508161195e576000815111156119235780518082602001fd5b6040517f2350eb5200000000000000000000000000000000000000000000000000000000815260040161195590613aee565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16633170428e6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119cd9190613591565b50600084846000906004926119e493929190613b18565b906119ef9190613b97565b90506358379d7160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603611a78576040517f2350eb52000000000000000000000000000000000000000000000000000000008152600401611a6f90613c42565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16633837a75e600160026040518363ffffffff1660e01b8152600401611ab5929190613cd8565b6020604051808303816000875af1158015611ad4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611af89190613490565b5050505050505050565b60033373ffffffffffffffffffffffffffffffffffffffff1660017f5660e8f93f0146f45abcd659e026b75995db50053cbbca4d7f365934ade68bf360405160405180910390a4565b6000600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905090565b6000611b9e8383610c96565b15611c9b57600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633e41f13584846040518363ffffffff1660e01b8152600401611c009291906135be565b6020604051808303816000875af1158015611c1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c439190613490565b503373ffffffffffffffffffffffffffffffffffffffff16827f33b47a1cd66813164ec00800d74296f57415217c22505ee380594a712936a0b560405160405180910390a38183611c949190613408565b9050611cd6565b6040517f2350eb52000000000000000000000000000000000000000000000000000000008152600401611ccd90613d73565b60405180910390fd5b92915050565b6040517fa0c2d2db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60033373ffffffffffffffffffffffffffffffffffffffff1660027f56c2ea44ba516098cee0c181dd9d8db262657368b6e911e83ae0ccfae806c73d604051611d7c90613ddf565b60405180910390a4565b600060608383915091509250929050565b6060819050919050565b600081600081905550819050919050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550819050919050565b6000819050919050565b600560009054906101000a900460ff1681565b6000600260008381526020019081526020016000208190555050565b611e41611fa5565b6000828060000190611e539190613dff565b604051602001611e64929190613e92565b6040516020818303038152906040528051906020012090506000602067ffffffffffffffff811115611e9957611e9861226a565b5b6040519080825280601f01601f191660200182016040528015611ecb5781602001600182028036833780820191505090505b50905060005b6020811015611f4657828160208110611eed57611eec61332e565b5b1a60f81b828281518110611f0457611f0361332e565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080611f3e906133c0565b915050611ed1565b50604051806040016040528085611f5c9061398c565b81526020018281525092505050919050565b6000817fb16dba9242e1aa07ccc47228094628f72c8cc9699ee45d5bc8d67b84d3038c6860405160405180910390a2819050919050565b6040518060400160405280611fb8611ff2565b8152602001606081525090565b60405180604001604052806002905b611fdc611ff2565b815260200190600190039081611fd45790505090565b604051806040016040528060608152602001606081525090565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006120378261200c565b9050919050565b6120478161202c565b82525050565b6000819050919050565b6120608161204d565b82525050565b600082825260208201905092915050565b7f5265636569766564204574686572000000000000000000000000000000000000600082015250565b60006120ad600e83612066565b91506120b882612077565b602082019050919050565b60006060820190506120d8600083018561203e565b6120e56020830184612057565b81810360408301526120f6816120a0565b90509392505050565b6000604082019050612114600083018561203e565b6121216020830184612057565b9392505050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b61214f8161213c565b811461215a57600080fd5b50565b60008135905061216c81612146565b92915050565b6000806040838503121561218957612188612132565b5b60006121978582860161215d565b92505060206121a88582860161215d565b9150509250929050565b60008115159050919050565b6121c7816121b2565b82525050565b60006020820190506121e260008301846121be565b92915050565b6121f18161204d565b81146121fc57600080fd5b50565b60008135905061220e816121e8565b92915050565b6000806040838503121561222b5761222a612132565b5b6000612239858286016121ff565b925050602061224a858286016121ff565b9150509250929050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6122a282612259565b810181811067ffffffffffffffff821117156122c1576122c061226a565b5b80604052505050565b60006122d4612128565b90506122e08282612299565b919050565b600067ffffffffffffffff821115612300576122ff61226a565b5b602082029050602081019050919050565b600080fd5b6000612329612324846122e5565b6122ca565b9050808382526020820190506020840283018581111561234c5761234b612311565b5b835b81811015612375578061236188826121ff565b84526020840193505060208101905061234e565b5050509392505050565b600082601f83011261239457612393612254565b5b81356123a4848260208601612316565b91505092915050565b6000602082840312156123c3576123c2612132565b5b600082013567ffffffffffffffff8111156123e1576123e0612137565b5b6123ed8482850161237f565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61242b8161204d565b82525050565b600061243d8383612422565b60208301905092915050565b6000602082019050919050565b6000612461826123f6565b61246b8185612401565b935061247683612412565b8060005b838110156124a757815161248e8882612431565b975061249983612449565b92505060018101905061247a565b5085935050505092915050565b600060208201905081810360008301526124ce8184612456565b905092915050565b6124df8161213c565b82525050565b60006020820190506124fa60008301846124d6565b92915050565b6004811061250d57600080fd5b50565b60008135905061251f81612500565b92915050565b60006020828403121561253b5761253a612132565b5b600061254984828501612510565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6004811061259257612591612552565b5b50565b60008190506125a382612581565b919050565b60006125b382612595565b9050919050565b6125c3816125a8565b82525050565b60006020820190506125de60008301846125ba565b92915050565b60006020820190506125f96000830184612057565b92915050565b6000819050919050565b612612816125ff565b811461261d57600080fd5b50565b60008135905061262f81612609565b92915050565b60006020828403121561264b5761264a612132565b5b600061265984828501612620565b91505092915050565b61266b816125ff565b82525050565b60006020820190506126866000830184612662565b92915050565b600080fd5b600067ffffffffffffffff8211156126ac576126ab61226a565b5b6126b582612259565b9050602081019050919050565b82818337600083830152505050565b60006126e46126df84612691565b6122ca565b905082815260208101848484011115612700576126ff61268c565b5b61270b8482856126c2565b509392505050565b600082601f83011261272857612727612254565b5b81356127388482602086016126d1565b91505092915050565b6000806040838503121561275857612757612132565b5b6000612766858286016121ff565b925050602083013567ffffffffffffffff81111561278757612786612137565b5b61279385828601612713565b9150509250929050565b600081519050919050565b60005b838110156127c65780820151818401526020810190506127ab565b60008484015250505050565b60006127dd8261279d565b6127e78185612066565b93506127f78185602086016127a8565b61280081612259565b840191505092915050565b60006040820190506128206000830185612057565b818103602083015261283281846127d2565b90509392505050565b6128448161202c565b811461284f57600080fd5b50565b6000813590506128618161283b565b92915050565b60006020828403121561287d5761287c612132565b5b600061288b84828501612852565b91505092915050565b6000602082840312156128aa576128a9612132565b5b60006128b88482850161215d565b91505092915050565b600080fd5b6000604082840312156128dc576128db6128c1565b5b81905092915050565b6000602082840312156128fb576128fa612132565b5b600082013567ffffffffffffffff81111561291957612918612137565b5b612925848285016128c6565b91505092915050565b600082825260208201905092915050565b600061294a8261279d565b612954818561292e565b93506129648185602086016127a8565b61296d81612259565b840191505092915050565b600082825260208201905092915050565b6000612994826123f6565b61299e8185612978565b93506129a983612412565b8060005b838110156129da5781516129c18882612431565b97506129cc83612449565b9250506001810190506129ad565b5085935050505092915050565b60006040830160008301518482036000860152612a04828261293f565b91505060208301518482036020860152612a1e8282612989565b9150508091505092915050565b600081519050919050565b600082825260208201905092915050565b6000612a5282612a2b565b612a5c8185612a36565b9350612a6c8185602086016127a8565b612a7581612259565b840191505092915050565b60006040830160008301518482036000860152612a9d82826129e7565b91505060208301518482036020860152612ab78282612a47565b9150508091505092915050565b60006020820190508181036000830152612ade8184612a80565b905092915050565b600060408284031215612afc57612afb6128c1565b5b81905092915050565b600060208284031215612b1b57612b1a612132565b5b600082013567ffffffffffffffff811115612b3957612b38612137565b5b612b4584828501612ae6565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083356001602003843603038112612b7a57612b79612b58565b5b83810192508235915060208301925067ffffffffffffffff821115612ba257612ba1612b4e565b5b600182023603831315612bb857612bb7612b53565b5b509250929050565b6000612bcc838561292e565b9350612bd98385846126c2565b612be283612259565b840190509392505050565b60008083356001602003843603038112612c0a57612c09612b58565b5b83810192508235915060208301925067ffffffffffffffff821115612c3257612c31612b4e565b5b602082023603831315612c4857612c47612b53565b5b509250929050565b600080fd5b82818337505050565b6000612c6a8385612978565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831115612c9d57612c9c612c50565b5b602083029250612cae838584612c55565b82840190509392505050565b600060408301612ccd6000840184612b5d565b8583036000870152612ce0838284612bc0565b92505050612cf16020840184612bed565b8583036020870152612d04838284612c5e565b925050508091505092915050565b60006020820190508181036000830152612d2c8184612cba565b905092915050565b600081905082602060030282011115612d5057612d4f612311565b5b92915050565b600060208284031215612d6c57612d6b612132565b5b600082013567ffffffffffffffff811115612d8a57612d89612137565b5b612d9684828501612d34565b91505092915050565b600060029050919050565b600081905092915050565b6000819050919050565b6000612dcb83836129e7565b905092915050565b6000602082019050919050565b6000612deb82612d9f565b612df58185612daa565b935083602082028501612e0785612db5565b8060005b85811015612e435784840389528151612e248582612dbf565b9450612e2f83612dd3565b925060208a01995050600181019050612e0b565b50829750879550505050505092915050565b60006020820190508181036000830152612e6f8184612de0565b905092915050565b600081600f0b9050919050565b612e8d81612e77565b8114612e9857600080fd5b50565b600081359050612eaa81612e84565b92915050565b600080600060608486031215612ec957612ec8612132565b5b6000612ed78682870161215d565b9350506020612ee886828701612e9b565b9250506040612ef9868287016121ff565b9150509250925092565b612f0c81612e77565b82525050565b6000606082019050612f2760008301866124d6565b612f346020830185612f03565b612f416040830184612057565b949350505050565b600080fd5b60008083601f840112612f6457612f63612254565b5b8235905067ffffffffffffffff811115612f8157612f80612f49565b5b602083019150836001820283011115612f9d57612f9c612311565b5b9250929050565b60008060008060608587031215612fbe57612fbd612132565b5b6000612fcc87828801612852565b9450506020612fdd878288016121ff565b935050604085013567ffffffffffffffff811115612ffe57612ffd612137565b5b61300a87828801612f4e565b925092505092959194509250565b6000819050919050565b600061303d6130386130338461200c565b613018565b61200c565b9050919050565b600061304f82613022565b9050919050565b600061306182613044565b9050919050565b61307181613056565b82525050565b600060208201905061308c6000830184613068565b92915050565b600067ffffffffffffffff8211156130ad576130ac61226a565b5b602082029050602081019050919050565b60006130d16130cc84613092565b6122ca565b905080838252602082019050602084028301858111156130f4576130f3612311565b5b835b8181101561311d57806131098882612852565b8452602084019350506020810190506130f6565b5050509392505050565b600082601f83011261313c5761313b612254565b5b813561314c8482602086016130be565b91505092915050565b60006020828403121561316b5761316a612132565b5b600082013567ffffffffffffffff81111561318957613188612137565b5b61319584828501613127565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6131d38161202c565b82525050565b60006131e583836131ca565b60208301905092915050565b6000602082019050919050565b60006132098261319e565b61321381856131a9565b935061321e836131ba565b8060005b8381101561324f57815161323688826131d9565b9750613241836131f1565b925050600181019050613222565b5085935050505092915050565b6000602082019050818103600083015261327681846131fe565b905092915050565b6000602082019050613293600083018461203e565b92915050565b7f616c7761797320726576657274206572726f7200000000000000000000000000600082015250565b60006132cf601383612066565b91506132da82613299565b602082019050919050565b600060208201905081810360008301526132fe816132c2565b9050919050565b600060408201905061331a6000830185612057565b6133276020830184612057565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006133978261204d565b91506133a28361204d565b92508282019050808211156133ba576133b961335d565b5b92915050565b60006133cb8261204d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036133fd576133fc61335d565b5b600182019050919050565b60006134138261213c565b915061341e8361213c565b9250828201905082811215600083121683821260008412151617156134465761344561335d565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60008151905061348a81612146565b92915050565b6000602082840312156134a6576134a5612132565b5b60006134b48482850161347b565b91505092915050565b600081905092915050565b60006134d382612a2b565b6134dd81856134bd565b93506134ed8185602086016127a8565b80840191505092915050565b600061350582846134c8565b915081905092915050565b7f5374617469632063616c6c206661696c65640000000000000000000000000000600082015250565b6000613546601283612066565b915061355182613510565b602082019050919050565b6000602082019050818103600083015261357581613539565b9050919050565b60008151905061358b816121e8565b92915050565b6000602082840312156135a7576135a6612132565b5b60006135b58482850161357c565b91505092915050565b60006040820190506135d360008301856124d6565b6135e060208301846124d6565b9392505050565b6000819050919050565b600061360c613607613602846135e7565b613018565b61204d565b9050919050565b61361c816135f1565b82525050565b6000819050919050565b600061364761364261363d84613622565b613018565b61204d565b9050919050565b6136578161362c565b82525050565b60006040820190506136726000830185613613565b61367f602083018461364e565b9392505050565b600067ffffffffffffffff82169050919050565b6136a381613686565b82525050565b600060608301600083015184820360008601526136c6828261293f565b91505060208301516136db602086018261369a565b5060408301516136ee6040860182612422565b508091505092915050565b6000602082019050818103600083015261371381846136a9565b905092915050565b7f6d79537472696e67000000000000000000000000000000000000000000000000600082015250565b6000613751600883612066565b915061375c8261371b565b602082019050919050565b6000602082019050818103600083015261378081613744565b9050919050565b600080fd5b600080fd5b6000604082840312156137a7576137a6613787565b5b6137b160406122ca565b9050600082013567ffffffffffffffff8111156137d1576137d061378c565b5b6137dd84828501612713565b600083015250602082013567ffffffffffffffff8111156138015761380061378c565b5b61380d8482850161237f565b60208301525092915050565b600067ffffffffffffffff8211156138345761383361226a565b5b61383d82612259565b9050602081019050919050565b600061385d61385884613819565b6122ca565b9050828152602081018484840111156138795761387861268c565b5b6138848482856126c2565b509392505050565b600082601f8301126138a1576138a0612254565b5b81356138b184826020860161384a565b91505092915050565b6000604082840312156138d0576138cf613787565b5b6138da60406122ca565b9050600082013567ffffffffffffffff8111156138fa576138f961378c565b5b61390684828501613791565b600083015250602082013567ffffffffffffffff81111561392a5761392961378c565b5b6139368482850161388c565b60208301525092915050565b600061394e36836138ba565b9050919050565b600080fd5b600080fd5b600080fd5b6000823560016040038336030381126139805761397f613955565b5b80830191505092915050565b60006139983683613791565b9050919050565b6000819050919050565b60006139c46139bf6139ba8461399f565b613018565b61204d565b9050919050565b6139d4816139a9565b82525050565b6000819050919050565b60006139ff6139fa6139f5846139da565b613018565b61204d565b9050919050565b613a0f816139e4565b82525050565b6000604082019050613a2a60008301856139cb565b613a376020830184613a06565b9392505050565b6000613a4a83856134bd565b9350613a578385846126c2565b82840190509392505050565b6000613a70828486613a3e565b91508190509392505050565b7f64656c656761746563616c6c206661696c65642077697468206e6f207265617360008201527f6f6e000000000000000000000000000000000000000000000000000000000000602082015250565b6000613ad8602283612066565b9150613ae382613a7c565b604082019050919050565b60006020820190508181036000830152613b0781613acb565b9050919050565b600080fd5b600080fd5b60008085851115613b2c57613b2b613b0e565b5b83861115613b3d57613b3c613b13565b5b6001850283019150848603905094509492505050565b600082905092915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600082821b905092915050565b6000613ba38383613b53565b82613bae8135613b5e565b92506004821015613bee57613be97fffffffff0000000000000000000000000000000000000000000000000000000083600403600802613b8a565b831692505b505092915050565b7f6f68206f68206f682069742773206d6167696321000000000000000000000000600082015250565b6000613c2c601483612066565b9150613c3782613bf6565b602082019050919050565b60006020820190508181036000830152613c5b81613c1f565b9050919050565b6000819050919050565b6000613c87613c82613c7d84613c62565b613018565b61213c565b9050919050565b613c9781613c6c565b82525050565b6000819050919050565b6000613cc2613cbd613cb884613c9d565b613018565b61213c565b9050919050565b613cd281613ca7565b82525050565b6000604082019050613ced6000830185613c8e565b613cfa6020830184613cc9565b9392505050565b7f666972737420696e7420776173206e6f742067726561746572207468616e207360008201527f65636f6e6420696e740000000000000000000000000000000000000000000000602082015250565b6000613d5d602983612066565b9150613d6882613d01565b604082019050919050565b60006020820190508181036000830152613d8c81613d50565b9050919050565b7f736f6d6520696400000000000000000000000000000000000000000000000000600082015250565b6000613dc9600783612066565b9150613dd482613d93565b602082019050919050565b60006020820190508181036000830152613df881613dbc565b9050919050565b60008083356001602003843603038112613e1c57613e1b613955565b5b80840192508235915067ffffffffffffffff821115613e3e57613e3d61395a565b5b602083019250600182023603831315613e5a57613e5961395f565b5b509250929050565b600081905092915050565b6000613e798385613e62565b9350613e868385846126c2565b82840190509392505050565b6000613e9f828486613e6d565b9150819050939250505056fea264697066735822122095801437fe2af153ec90ad58a4678a194b7fb3b777ee30438995ef0f23596f7664736f6c63430008130033", + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"subAddr\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"available\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"required\",\"type\":\"uint256\"}],\"name\":\"CustomErr\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CustomErrNoValues\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"message\",\"type\":\"string\"}],\"name\":\"CustomErrWithMessage\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"CallDataLength\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"int256\",\"name\":\"a\",\"type\":\"int256\"}],\"name\":\"CallbackEvent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"enumNetworkDebugContract.Status\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"CurrentStatus\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"EtherReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"name\":\"IsValidEvent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"NoIndexEvent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"str\",\"type\":\"string\"}],\"name\":\"NoIndexEventString\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"uint64\",\"name\":\"balance\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"dailyLimit\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structNetworkDebugContract.Account\",\"name\":\"a\",\"type\":\"tuple\"}],\"name\":\"NoIndexStructEvent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"a\",\"type\":\"uint256\"}],\"name\":\"OneIndexEvent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"message\",\"type\":\"string\"}],\"name\":\"Received\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"roundId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"startedBy\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"startedAt\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"dataId\",\"type\":\"string\"}],\"name\":\"ThreeIndexAndOneNonIndexedEvent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"roundId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"startedBy\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"startedAt\",\"type\":\"uint256\"}],\"name\":\"ThreeIndexEvent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"roundId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"startedBy\",\"type\":\"address\"}],\"name\":\"TwoIndexEvent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"UniqueDebugEvent\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"idx\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"x\",\"type\":\"int256\"}],\"name\":\"addCounter\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"alwaysRevertsAssert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"alwaysRevertsCustomError\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"alwaysRevertsCustomErrorNoValues\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"alwaysRevertsRequire\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"name\":\"callRevertFunctionInSubContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"callRevertFunctionInTheContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"x\",\"type\":\"int256\"}],\"name\":\"callbackMethod\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"name\":\"counterMap\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentStatus\",\"outputs\":[{\"internalType\":\"enumNetworkDebugContract.Status\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"emitAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"input\",\"type\":\"bytes32\"}],\"name\":\"emitBytes32\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"output\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"emitFourParamMixedEvent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"inputVal1\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"inputVal2\",\"type\":\"string\"}],\"name\":\"emitInputs\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"inputVal1\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"inputVal2\",\"type\":\"string\"}],\"name\":\"emitInputsOutputs\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"first\",\"type\":\"int256\"},{\"internalType\":\"int128\",\"name\":\"second\",\"type\":\"int128\"},{\"internalType\":\"uint256\",\"name\":\"third\",\"type\":\"uint256\"}],\"name\":\"emitInts\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"},{\"internalType\":\"int128\",\"name\":\"outputVal1\",\"type\":\"int128\"},{\"internalType\":\"uint256\",\"name\":\"outputVal2\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"inputVal1\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"inputVal2\",\"type\":\"string\"}],\"name\":\"emitNamedInputsOutputs\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"outputVal1\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"outputVal2\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"emitNamedOutputs\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"outputVal1\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"outputVal2\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"emitNoIndexEvent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"emitNoIndexEventString\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"emitNoIndexStructEvent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"emitOneIndexEvent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"emitOutputs\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"emitThreeIndexEvent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"emitTwoIndexEvent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"get\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"data\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"idx\",\"type\":\"int256\"}],\"name\":\"getCounter\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"data\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getData\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMap\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"data\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"onTokenTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pay\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"performStaticCall\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"input\",\"type\":\"address[]\"}],\"name\":\"processAddressArray\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"}],\"internalType\":\"structNetworkDebugContract.Data\",\"name\":\"data\",\"type\":\"tuple\"}],\"name\":\"processDynamicData\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"}],\"internalType\":\"structNetworkDebugContract.Data\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"}],\"internalType\":\"structNetworkDebugContract.Data[3]\",\"name\":\"data\",\"type\":\"tuple[3]\"}],\"name\":\"processFixedDataArray\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"}],\"internalType\":\"structNetworkDebugContract.Data[2]\",\"name\":\"\",\"type\":\"tuple[2]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"}],\"internalType\":\"structNetworkDebugContract.Data\",\"name\":\"data\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"dynamicBytes\",\"type\":\"bytes\"}],\"internalType\":\"structNetworkDebugContract.NestedData\",\"name\":\"data\",\"type\":\"tuple\"}],\"name\":\"processNestedData\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"}],\"internalType\":\"structNetworkDebugContract.Data\",\"name\":\"data\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"dynamicBytes\",\"type\":\"bytes\"}],\"internalType\":\"structNetworkDebugContract.NestedData\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"}],\"internalType\":\"structNetworkDebugContract.Data\",\"name\":\"data\",\"type\":\"tuple\"}],\"name\":\"processNestedData\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"}],\"internalType\":\"structNetworkDebugContract.Data\",\"name\":\"data\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"dynamicBytes\",\"type\":\"bytes\"}],\"internalType\":\"structNetworkDebugContract.NestedData\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"input\",\"type\":\"uint256[]\"}],\"name\":\"processUintArray\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"idx\",\"type\":\"int256\"}],\"name\":\"resetCounter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"x\",\"type\":\"int256\"}],\"name\":\"set\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"x\",\"type\":\"int256\"}],\"name\":\"setMap\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enumNetworkDebugContract.Status\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"setStatus\",\"outputs\":[{\"internalType\":\"enumNetworkDebugContract.Status\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"storedData\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"storedDataMap\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"subContract\",\"outputs\":[{\"internalType\":\"contractNetworkDebugSubContract\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"x\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"y\",\"type\":\"int256\"}],\"name\":\"trace\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"x\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"y\",\"type\":\"int256\"}],\"name\":\"traceDifferent\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"traceNestedEvents\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"x\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"y\",\"type\":\"int256\"}],\"name\":\"traceSubWithCallback\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"x\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"y\",\"type\":\"int256\"}],\"name\":\"traceWithValidate\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"x\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"y\",\"type\":\"int256\"}],\"name\":\"traceYetDifferent\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"x\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"y\",\"type\":\"int256\"}],\"name\":\"validate\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", + Bin: "0x60806040523480156200001157600080fd5b50604051620040f7380380620040f78339818101604052810190620000379190620000f2565b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506101006004819055505062000124565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000ba826200008d565b9050919050565b620000cc81620000ad565b8114620000d857600080fd5b50565b600081519050620000ec81620000c1565b92915050565b6000602082840312156200010b576200010a62000088565b5b60006200011b84828501620000db565b91505092915050565b613fc380620001346000396000f3fe6080604052600436106103035760003560e01c80637f12881c11610190578063b3f8d1b2116100dc578063e5c19b2d11610095578063ef8a92351161006f578063ef8a923514610bfa578063f3396bd914610c25578063f499af2a14610c4e578063fbcb8d0714610c8b57610343565b8063e5c19b2d14610b43578063e8116e2814610b80578063ec5c3ede14610bbd57610343565b8063b3f8d1b214610a58578063b600141f14610a6f578063c0d06d8914610a86578063c2124b2214610ab1578063d7a8020514610ac8578063e1111f7914610b0657610343565b806395a81a4c11610149578063a4c0ed3611610123578063a4c0ed36146109bd578063aa3fdcf4146109e6578063ad3de14c146109fd578063b1ae9d8514610a2857610343565b806395a81a4c1461092a57806399adad2e146109415780639e0996521461097e57610343565b80637f12881c1461082d5780637fdc8fe11461086a57806381b375a0146108a75780638db611be146108d05780638f856296146108fc5780639349d00b1461091357610343565b80633837a75e1161024f5780635921483f1161020857806362c270e1116101e257806362c270e1146107a85780636d4ce63c146107bf5780637014c81d146107ea578063788c47721461081657610343565b80635921483f146107175780635e9c80d6146107545780636284117d1461076b57610343565b80633837a75e146105ba5780633bc5de30146105f75780633e41f1351461062257806345f0c9e61461065f57806348ad9fe81461069d57806358379d71146106da57610343565b806323515760116102bc5780632e49d78b116102965780632e49d78b146104d857806330985bcc146105155780633170428e1461055257806333311ef31461057d57610343565b80632351576014610459578063256560d5146104965780632a1afcd9146104ad57610343565b806304d8215b1461037e57806306595f75146103bb57806311b3c478146103d257806312d91233146103fb5780631b9265b8146104385780631e31d0a81461044257610343565b36610343577f59e04c3f0d44b7caf6e8ef854b61d9a51cf1960d7a88ff6356cc5e946b4b583233346040516103399291906121a5565b60405180910390a1005b7f1e57e3bb474320be3d2c77138f75b7c3941292d647f5f9634e33a8e94e0e069b33346040516103749291906121e1565b60405180910390a1005b34801561038a57600080fd5b506103a560048036038101906103a09190612254565b610cc8565b6040516103b291906122af565b60405180910390f35b3480156103c757600080fd5b506103d0610d0e565b005b3480156103de57600080fd5b506103f960048036038101906103f491906122f6565b610d51565b005b34801561040757600080fd5b50610422600480360381019061041d919061248f565b610de4565b60405161042f9190612596565b60405180910390f35b610440610ea3565b005b34801561044e57600080fd5b50610457610ea5565b005b34801561046557600080fd5b50610480600480360381019061047b9190612254565b610eec565b60405161048d91906125c7565b60405180910390f35b3480156104a257600080fd5b506104ab610f21565b005b3480156104b957600080fd5b506104c2610f32565b6040516104cf91906125c7565b60405180910390f35b3480156104e457600080fd5b506104ff60048036038101906104fa9190612607565b610f38565b60405161050c91906126ab565b60405180910390f35b34801561052157600080fd5b5061053c60048036038101906105379190612254565b610fba565b60405161054991906125c7565b60405180910390f35b34801561055e57600080fd5b5061056761109c565b60405161057491906126c6565b60405180910390f35b34801561058957600080fd5b506105a4600480360381019061059f9190612717565b6111db565b6040516105b19190612753565b60405180910390f35b3480156105c657600080fd5b506105e160048036038101906105dc9190612254565b6111e5565b6040516105ee91906125c7565b60405180910390f35b34801561060357600080fd5b5061060c6112f0565b60405161061991906126c6565b60405180910390f35b34801561062e57600080fd5b5061064960048036038101906106449190612254565b6112fa565b60405161065691906125c7565b60405180910390f35b34801561066b57600080fd5b5061068660048036038101906106819190612823565b6113f5565b6040516106949291906128ed565b60405180910390f35b3480156106a957600080fd5b506106c460048036038101906106bf9190612949565b611406565b6040516106d191906125c7565b60405180910390f35b3480156106e657600080fd5b5061070160048036038101906106fc9190612254565b61141e565b60405161070e91906125c7565b60405180910390f35b34801561072357600080fd5b5061073e60048036038101906107399190612976565b611519565b60405161074b91906125c7565b60405180910390f35b34801561076057600080fd5b50610769611536565b005b34801561077757600080fd5b50610792600480360381019061078d9190612976565b611577565b60405161079f91906125c7565b60405180910390f35b3480156107b457600080fd5b506107bd61158f565b005b3480156107cb57600080fd5b506107d4611623565b6040516107e191906125c7565b60405180910390f35b3480156107f657600080fd5b506107ff61162c565b60405161080d9291906128ed565b60405180910390f35b34801561082257600080fd5b5061082b611671565b005b34801561083957600080fd5b50610854600480360381019061084f91906129c7565b6116a8565b6040516108619190612ba6565b60405180910390f35b34801561087657600080fd5b50610891600480360381019061088c9190612be7565b6116c1565b60405161089e9190612df4565b60405180910390f35b3480156108b357600080fd5b506108ce60048036038101906108c99190612823565b6116ca565b005b3480156108dc57600080fd5b506108e56116ce565b6040516108f39291906128ed565b60405180910390f35b34801561090857600080fd5b50610911611713565b005b34801561091f57600080fd5b50610928611743565b005b34801561093657600080fd5b5061093f61174d565b005b34801561094d57600080fd5b5061096860048036038101906109639190612e38565b611786565b6040516109759190612f37565b60405180910390f35b34801561098a57600080fd5b506109a560048036038101906109a09190612f92565b611831565b6040516109b493929190612ff4565b60405180910390f35b3480156109c957600080fd5b506109e460048036038101906109df9190613086565b611848565b005b3480156109f257600080fd5b506109fb611b34565b005b348015610a0957600080fd5b50610a12611b7d565b604051610a1f91906125c7565b60405180910390f35b610a426004803603810190610a3d9190612254565b611bc4565b604051610a4f91906125c7565b60405180910390f35b348015610a6457600080fd5b50610a6d611d0e565b005b348015610a7b57600080fd5b50610a84611dbe565b005b348015610a9257600080fd5b50610a9b611df0565b604051610aa89190613159565b60405180910390f35b348015610abd57600080fd5b50610ac6611e16565b005b348015610ad457600080fd5b50610aef6004803603810190610aea9190612823565b611e68565b604051610afd9291906128ed565b60405180910390f35b348015610b1257600080fd5b50610b2d6004803603810190610b289190613237565b611e79565b604051610b3a919061333e565b60405180910390f35b348015610b4f57600080fd5b50610b6a6004803603810190610b659190612976565b611e83565b604051610b7791906125c7565b60405180910390f35b348015610b8c57600080fd5b50610ba76004803603810190610ba29190612976565b611e94565b604051610bb491906125c7565b60405180910390f35b348015610bc957600080fd5b50610be46004803603810190610bdf9190612949565b611ee2565b604051610bf19190613360565b60405180910390f35b348015610c0657600080fd5b50610c0f611eec565b604051610c1c91906126ab565b60405180910390f35b348015610c3157600080fd5b50610c4c6004803603810190610c479190612976565b611eff565b005b348015610c5a57600080fd5b50610c756004803603810190610c709190612be7565b611f1b565b604051610c829190612ba6565b60405180910390f35b348015610c9757600080fd5b50610cb26004803603810190610cad9190612976565b612050565b604051610cbf91906125c7565b60405180910390f35b60007fdfac7500004753b91139af55816e7eade36d96faec68b343f77ed66b89912a7b828413604051610cfb91906122af565b60405180910390a1818313905092915050565b6000610d4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d46906133c7565b60405180910390fd5b565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166311abb00283836040518363ffffffff1660e01b8152600401610dae9291906133e7565b600060405180830381600087803b158015610dc857600080fd5b505af1158015610ddc573d6000803e3d6000fd5b505050505050565b60606000825167ffffffffffffffff811115610e0357610e0261234c565b5b604051908082528060200260200182016040528015610e315781602001602082028036833780820191505090505b50905060005b8351811015610e99576001848281518110610e5557610e54613410565b5b6020026020010151610e67919061346e565b828281518110610e7a57610e79613410565b5b6020026020010181815250508080610e91906134a2565b915050610e37565b5080915050919050565b565b3373ffffffffffffffffffffffffffffffffffffffff1660017f33b47a1cd66813164ec00800d74296f57415217c22505ee380594a712936a0b560405160405180910390a3565b600081600260008581526020019081526020016000206000828254610f1191906134ea565b9250508190555081905092915050565b6000610f3057610f2f61352e565b5b565b60005481565b600081600560006101000a81548160ff02191690836003811115610f5f57610f5e612634565b5b0217905550600560009054906101000a900460ff166003811115610f8657610f85612634565b5b7fbea054406fdf249b05d1aef1b5f848d62d902d94389fca702b2d8337677c359a60405160405180910390a2819050919050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663047c4425836040518263ffffffff1660e01b815260040161101791906125c7565b6020604051808303816000875af1158015611036573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061105a9190613572565b50827feace1be0b97ec11f959499c07b9f60f0cc47bf610b28fda8fb0e970339cf3b3560405160405180910390a2818361109491906134ea565b905092915050565b6000803090506000808273ffffffffffffffffffffffffffffffffffffffff16633bc5de3060e01b604051602401604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405161113491906135db565b600060405180830381855afa9150503d806000811461116f576040519150601f19603f3d011682016040523d82523d6000602084013e611174565b606091505b5091509150816111b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b09061363e565b60405180910390fd5b6000818060200190518101906111cf9190613673565b90508094505050505090565b6000819050919050565b60006002826111f491906134ea565b9150600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fa8fca7a84846040518363ffffffff1660e01b81526004016112539291906136a0565b6020604051808303816000875af1158015611272573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112969190613572565b503373ffffffffffffffffffffffffffffffffffffffff1660017f33b47a1cd66813164ec00800d74296f57415217c22505ee380594a712936a0b560405160405180910390a381836112e891906134ea565b905092915050565b6000600454905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633e41f13584846040518363ffffffff1660e01b81526004016113599291906136a0565b6020604051808303816000875af1158015611378573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061139c9190613572565b503373ffffffffffffffffffffffffffffffffffffffff16827f33b47a1cd66813164ec00800d74296f57415217c22505ee380594a712936a0b560405160405180910390a381836113ed91906134ea565b905092915050565b600060608383915091509250929050565b60016020528060005260406000206000915090505481565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633e41f13584846040518363ffffffff1660e01b815260040161147d9291906136a0565b6020604051808303816000875af115801561149c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c09190613572565b503373ffffffffffffffffffffffffffffffffffffffff16827f33b47a1cd66813164ec00800d74296f57415217c22505ee380594a712936a0b560405160405180910390a3818361151191906134ea565b905092915050565b600060026000838152602001908152602001600020549050919050565b600c60156040517f4a2eaf7e00000000000000000000000000000000000000000000000000000000815260040161156e92919061373f565b60405180910390fd5b60026020528060005260406000206000915090505481565b7febe3ff7e2071d351bf2e65b4fccd24e3ae99485f02468f1feecf7d64dc04418860405180606001604052806040518060400160405280600481526020017f4a6f686e000000000000000000000000000000000000000000000000000000008152508152602001600567ffffffffffffffff168152602001600a81525060405161161991906137db565b60405180910390a1565b60008054905090565b60006060617a696040518060400160405280600a81526020017f6f757470757456616c3100000000000000000000000000000000000000000000815250915091509091565b7f25b7adba1b046a19379db4bc06aa1f2e71604d7b599a0ee8783d58110f00e16a60405161169e90613849565b60405180910390a1565b6116b0612087565b816116ba90613a24565b9050919050565b36819050919050565b5050565b60006060617a696040518060400160405280600a81526020017f6f757470757456616c3100000000000000000000000000000000000000000000815250915091509091565b60537feace1be0b97ec11f959499c07b9f60f0cc47bf610b28fda8fb0e970339cf3b3560405160405180910390a2565b61174b611536565b565b7f33bc9bae48dbe1e057f264b3fc6a1dacdcceacb3ba28d937231c70e068a02f1c3360405161177c9190613360565b60405180910390a1565b61178e6120a7565b6117966120a7565b826000600381106117aa576117a9613410565b5b6020028101906117ba9190613a46565b6117c390613a6e565b816000600281106117d7576117d6613410565b5b6020020181905250826001600381106117f3576117f2613410565b5b6020028101906118039190613a46565b61180c90613a6e565b816001600281106118205761181f613410565b5b602002018190525080915050919050565b600080600085858592509250925093509350939050565b7f962c5df4c8ad201a4f54a88f47715bb2cf291d019e350e2dff50ca6fc0f5d0ed8282905060405161187a91906126c6565b60405180910390a1600082829050036118ce57606360656040517f4a2eaf7e0000000000000000000000000000000000000000000000000000000081526004016118c5929190613af7565b60405180910390fd5b6000803073ffffffffffffffffffffffffffffffffffffffff1684846040516118f8929190613b45565b600060405180830381855af49150503d8060008114611933576040519150601f19603f3d011682016040523d82523d6000602084013e611938565b606091505b509150915081611990576000815111156119555780518082602001fd5b6040517f2350eb5200000000000000000000000000000000000000000000000000000000815260040161198790613bd0565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16633170428e6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ff9190613673565b5060008484600090600492611a1693929190613bfa565b90611a219190613c79565b90506358379d7160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603611aaa576040517f2350eb52000000000000000000000000000000000000000000000000000000008152600401611aa190613d24565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16633837a75e600160026040518363ffffffff1660e01b8152600401611ae7929190613dba565b6020604051808303816000875af1158015611b06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b2a9190613572565b5050505050505050565b60033373ffffffffffffffffffffffffffffffffffffffff1660017f5660e8f93f0146f45abcd659e026b75995db50053cbbca4d7f365934ade68bf360405160405180910390a4565b6000600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905090565b6000611bd08383610cc8565b15611ccd57600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633e41f13584846040518363ffffffff1660e01b8152600401611c329291906136a0565b6020604051808303816000875af1158015611c51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c759190613572565b503373ffffffffffffffffffffffffffffffffffffffff16827f33b47a1cd66813164ec00800d74296f57415217c22505ee380594a712936a0b560405160405180910390a38183611cc691906134ea565b9050611d08565b6040517f2350eb52000000000000000000000000000000000000000000000000000000008152600401611cff90613e55565b60405180910390fd5b92915050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d948d896040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611d7857600080fd5b505af1158015611d8c573d6000803e3d6000fd5b505050507fa0f7c7c1fff15178b5db3e56860767f0889c56b591bd2d9ba3121b491347d74c60405160405180910390a1565b6040517fa0c2d2db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60033373ffffffffffffffffffffffffffffffffffffffff1660027f56c2ea44ba516098cee0c181dd9d8db262657368b6e911e83ae0ccfae806c73d604051611e5e90613ec1565b60405180910390a4565b600060608383915091509250929050565b6060819050919050565b600081600081905550819050919050565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550819050919050565b6000819050919050565b600560009054906101000a900460ff1681565b6000600260008381526020019081526020016000208190555050565b611f23612087565b6000828060000190611f359190613ee1565b604051602001611f46929190613f74565b6040516020818303038152906040528051906020012090506000602067ffffffffffffffff811115611f7b57611f7a61234c565b5b6040519080825280601f01601f191660200182016040528015611fad5781602001600182028036833780820191505090505b50905060005b602081101561202857828160208110611fcf57611fce613410565b5b1a60f81b828281518110611fe657611fe5613410565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080612020906134a2565b915050611fb3565b5060405180604001604052808561203e90613a6e565b81526020018281525092505050919050565b6000817fb16dba9242e1aa07ccc47228094628f72c8cc9699ee45d5bc8d67b84d3038c6860405160405180910390a2819050919050565b604051806040016040528061209a6120d4565b8152602001606081525090565b60405180604001604052806002905b6120be6120d4565b8152602001906001900390816120b65790505090565b604051806040016040528060608152602001606081525090565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612119826120ee565b9050919050565b6121298161210e565b82525050565b6000819050919050565b6121428161212f565b82525050565b600082825260208201905092915050565b7f5265636569766564204574686572000000000000000000000000000000000000600082015250565b600061218f600e83612148565b915061219a82612159565b602082019050919050565b60006060820190506121ba6000830185612120565b6121c76020830184612139565b81810360408301526121d881612182565b90509392505050565b60006040820190506121f66000830185612120565b6122036020830184612139565b9392505050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b6122318161221e565b811461223c57600080fd5b50565b60008135905061224e81612228565b92915050565b6000806040838503121561226b5761226a612214565b5b60006122798582860161223f565b925050602061228a8582860161223f565b9150509250929050565b60008115159050919050565b6122a981612294565b82525050565b60006020820190506122c460008301846122a0565b92915050565b6122d38161212f565b81146122de57600080fd5b50565b6000813590506122f0816122ca565b92915050565b6000806040838503121561230d5761230c612214565b5b600061231b858286016122e1565b925050602061232c858286016122e1565b9150509250929050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6123848261233b565b810181811067ffffffffffffffff821117156123a3576123a261234c565b5b80604052505050565b60006123b661220a565b90506123c2828261237b565b919050565b600067ffffffffffffffff8211156123e2576123e161234c565b5b602082029050602081019050919050565b600080fd5b600061240b612406846123c7565b6123ac565b9050808382526020820190506020840283018581111561242e5761242d6123f3565b5b835b81811015612457578061244388826122e1565b845260208401935050602081019050612430565b5050509392505050565b600082601f83011261247657612475612336565b5b81356124868482602086016123f8565b91505092915050565b6000602082840312156124a5576124a4612214565b5b600082013567ffffffffffffffff8111156124c3576124c2612219565b5b6124cf84828501612461565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61250d8161212f565b82525050565b600061251f8383612504565b60208301905092915050565b6000602082019050919050565b6000612543826124d8565b61254d81856124e3565b9350612558836124f4565b8060005b838110156125895781516125708882612513565b975061257b8361252b565b92505060018101905061255c565b5085935050505092915050565b600060208201905081810360008301526125b08184612538565b905092915050565b6125c18161221e565b82525050565b60006020820190506125dc60008301846125b8565b92915050565b600481106125ef57600080fd5b50565b600081359050612601816125e2565b92915050565b60006020828403121561261d5761261c612214565b5b600061262b848285016125f2565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6004811061267457612673612634565b5b50565b600081905061268582612663565b919050565b600061269582612677565b9050919050565b6126a58161268a565b82525050565b60006020820190506126c0600083018461269c565b92915050565b60006020820190506126db6000830184612139565b92915050565b6000819050919050565b6126f4816126e1565b81146126ff57600080fd5b50565b600081359050612711816126eb565b92915050565b60006020828403121561272d5761272c612214565b5b600061273b84828501612702565b91505092915050565b61274d816126e1565b82525050565b60006020820190506127686000830184612744565b92915050565b600080fd5b600067ffffffffffffffff82111561278e5761278d61234c565b5b6127978261233b565b9050602081019050919050565b82818337600083830152505050565b60006127c66127c184612773565b6123ac565b9050828152602081018484840111156127e2576127e161276e565b5b6127ed8482856127a4565b509392505050565b600082601f83011261280a57612809612336565b5b813561281a8482602086016127b3565b91505092915050565b6000806040838503121561283a57612839612214565b5b6000612848858286016122e1565b925050602083013567ffffffffffffffff81111561286957612868612219565b5b612875858286016127f5565b9150509250929050565b600081519050919050565b60005b838110156128a857808201518184015260208101905061288d565b60008484015250505050565b60006128bf8261287f565b6128c98185612148565b93506128d981856020860161288a565b6128e28161233b565b840191505092915050565b60006040820190506129026000830185612139565b818103602083015261291481846128b4565b90509392505050565b6129268161210e565b811461293157600080fd5b50565b6000813590506129438161291d565b92915050565b60006020828403121561295f5761295e612214565b5b600061296d84828501612934565b91505092915050565b60006020828403121561298c5761298b612214565b5b600061299a8482850161223f565b91505092915050565b600080fd5b6000604082840312156129be576129bd6129a3565b5b81905092915050565b6000602082840312156129dd576129dc612214565b5b600082013567ffffffffffffffff8111156129fb576129fa612219565b5b612a07848285016129a8565b91505092915050565b600082825260208201905092915050565b6000612a2c8261287f565b612a368185612a10565b9350612a4681856020860161288a565b612a4f8161233b565b840191505092915050565b600082825260208201905092915050565b6000612a76826124d8565b612a808185612a5a565b9350612a8b836124f4565b8060005b83811015612abc578151612aa38882612513565b9750612aae8361252b565b925050600181019050612a8f565b5085935050505092915050565b60006040830160008301518482036000860152612ae68282612a21565b91505060208301518482036020860152612b008282612a6b565b9150508091505092915050565b600081519050919050565b600082825260208201905092915050565b6000612b3482612b0d565b612b3e8185612b18565b9350612b4e81856020860161288a565b612b578161233b565b840191505092915050565b60006040830160008301518482036000860152612b7f8282612ac9565b91505060208301518482036020860152612b998282612b29565b9150508091505092915050565b60006020820190508181036000830152612bc08184612b62565b905092915050565b600060408284031215612bde57612bdd6129a3565b5b81905092915050565b600060208284031215612bfd57612bfc612214565b5b600082013567ffffffffffffffff811115612c1b57612c1a612219565b5b612c2784828501612bc8565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083356001602003843603038112612c5c57612c5b612c3a565b5b83810192508235915060208301925067ffffffffffffffff821115612c8457612c83612c30565b5b600182023603831315612c9a57612c99612c35565b5b509250929050565b6000612cae8385612a10565b9350612cbb8385846127a4565b612cc48361233b565b840190509392505050565b60008083356001602003843603038112612cec57612ceb612c3a565b5b83810192508235915060208301925067ffffffffffffffff821115612d1457612d13612c30565b5b602082023603831315612d2a57612d29612c35565b5b509250929050565b600080fd5b82818337505050565b6000612d4c8385612a5a565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831115612d7f57612d7e612d32565b5b602083029250612d90838584612d37565b82840190509392505050565b600060408301612daf6000840184612c3f565b8583036000870152612dc2838284612ca2565b92505050612dd36020840184612ccf565b8583036020870152612de6838284612d40565b925050508091505092915050565b60006020820190508181036000830152612e0e8184612d9c565b905092915050565b600081905082602060030282011115612e3257612e316123f3565b5b92915050565b600060208284031215612e4e57612e4d612214565b5b600082013567ffffffffffffffff811115612e6c57612e6b612219565b5b612e7884828501612e16565b91505092915050565b600060029050919050565b600081905092915050565b6000819050919050565b6000612ead8383612ac9565b905092915050565b6000602082019050919050565b6000612ecd82612e81565b612ed78185612e8c565b935083602082028501612ee985612e97565b8060005b85811015612f255784840389528151612f068582612ea1565b9450612f1183612eb5565b925060208a01995050600181019050612eed565b50829750879550505050505092915050565b60006020820190508181036000830152612f518184612ec2565b905092915050565b600081600f0b9050919050565b612f6f81612f59565b8114612f7a57600080fd5b50565b600081359050612f8c81612f66565b92915050565b600080600060608486031215612fab57612faa612214565b5b6000612fb98682870161223f565b9350506020612fca86828701612f7d565b9250506040612fdb868287016122e1565b9150509250925092565b612fee81612f59565b82525050565b600060608201905061300960008301866125b8565b6130166020830185612fe5565b6130236040830184612139565b949350505050565b600080fd5b60008083601f84011261304657613045612336565b5b8235905067ffffffffffffffff8111156130635761306261302b565b5b60208301915083600182028301111561307f5761307e6123f3565b5b9250929050565b600080600080606085870312156130a05761309f612214565b5b60006130ae87828801612934565b94505060206130bf878288016122e1565b935050604085013567ffffffffffffffff8111156130e0576130df612219565b5b6130ec87828801613030565b925092505092959194509250565b6000819050919050565b600061311f61311a613115846120ee565b6130fa565b6120ee565b9050919050565b600061313182613104565b9050919050565b600061314382613126565b9050919050565b61315381613138565b82525050565b600060208201905061316e600083018461314a565b92915050565b600067ffffffffffffffff82111561318f5761318e61234c565b5b602082029050602081019050919050565b60006131b36131ae84613174565b6123ac565b905080838252602082019050602084028301858111156131d6576131d56123f3565b5b835b818110156131ff57806131eb8882612934565b8452602084019350506020810190506131d8565b5050509392505050565b600082601f83011261321e5761321d612336565b5b813561322e8482602086016131a0565b91505092915050565b60006020828403121561324d5761324c612214565b5b600082013567ffffffffffffffff81111561326b5761326a612219565b5b61327784828501613209565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6132b58161210e565b82525050565b60006132c783836132ac565b60208301905092915050565b6000602082019050919050565b60006132eb82613280565b6132f5818561328b565b93506133008361329c565b8060005b8381101561333157815161331888826132bb565b9750613323836132d3565b925050600181019050613304565b5085935050505092915050565b6000602082019050818103600083015261335881846132e0565b905092915050565b60006020820190506133756000830184612120565b92915050565b7f616c7761797320726576657274206572726f7200000000000000000000000000600082015250565b60006133b1601383612148565b91506133bc8261337b565b602082019050919050565b600060208201905081810360008301526133e0816133a4565b9050919050565b60006040820190506133fc6000830185612139565b6134096020830184612139565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006134798261212f565b91506134848361212f565b925082820190508082111561349c5761349b61343f565b5b92915050565b60006134ad8261212f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036134df576134de61343f565b5b600182019050919050565b60006134f58261221e565b91506135008361221e565b9250828201905082811215600083121683821260008412151617156135285761352761343f565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60008151905061356c81612228565b92915050565b60006020828403121561358857613587612214565b5b60006135968482850161355d565b91505092915050565b600081905092915050565b60006135b582612b0d565b6135bf818561359f565b93506135cf81856020860161288a565b80840191505092915050565b60006135e782846135aa565b915081905092915050565b7f5374617469632063616c6c206661696c65640000000000000000000000000000600082015250565b6000613628601283612148565b9150613633826135f2565b602082019050919050565b600060208201905081810360008301526136578161361b565b9050919050565b60008151905061366d816122ca565b92915050565b60006020828403121561368957613688612214565b5b60006136978482850161365e565b91505092915050565b60006040820190506136b560008301856125b8565b6136c260208301846125b8565b9392505050565b6000819050919050565b60006136ee6136e96136e4846136c9565b6130fa565b61212f565b9050919050565b6136fe816136d3565b82525050565b6000819050919050565b600061372961372461371f84613704565b6130fa565b61212f565b9050919050565b6137398161370e565b82525050565b600060408201905061375460008301856136f5565b6137616020830184613730565b9392505050565b600067ffffffffffffffff82169050919050565b61378581613768565b82525050565b600060608301600083015184820360008601526137a88282612a21565b91505060208301516137bd602086018261377c565b5060408301516137d06040860182612504565b508091505092915050565b600060208201905081810360008301526137f5818461378b565b905092915050565b7f6d79537472696e67000000000000000000000000000000000000000000000000600082015250565b6000613833600883612148565b915061383e826137fd565b602082019050919050565b6000602082019050818103600083015261386281613826565b9050919050565b600080fd5b600080fd5b60006040828403121561388957613888613869565b5b61389360406123ac565b9050600082013567ffffffffffffffff8111156138b3576138b261386e565b5b6138bf848285016127f5565b600083015250602082013567ffffffffffffffff8111156138e3576138e261386e565b5b6138ef84828501612461565b60208301525092915050565b600067ffffffffffffffff8211156139165761391561234c565b5b61391f8261233b565b9050602081019050919050565b600061393f61393a846138fb565b6123ac565b90508281526020810184848401111561395b5761395a61276e565b5b6139668482856127a4565b509392505050565b600082601f83011261398357613982612336565b5b813561399384826020860161392c565b91505092915050565b6000604082840312156139b2576139b1613869565b5b6139bc60406123ac565b9050600082013567ffffffffffffffff8111156139dc576139db61386e565b5b6139e884828501613873565b600083015250602082013567ffffffffffffffff811115613a0c57613a0b61386e565b5b613a188482850161396e565b60208301525092915050565b6000613a30368361399c565b9050919050565b600080fd5b600080fd5b600080fd5b600082356001604003833603038112613a6257613a61613a37565b5b80830191505092915050565b6000613a7a3683613873565b9050919050565b6000819050919050565b6000613aa6613aa1613a9c84613a81565b6130fa565b61212f565b9050919050565b613ab681613a8b565b82525050565b6000819050919050565b6000613ae1613adc613ad784613abc565b6130fa565b61212f565b9050919050565b613af181613ac6565b82525050565b6000604082019050613b0c6000830185613aad565b613b196020830184613ae8565b9392505050565b6000613b2c838561359f565b9350613b398385846127a4565b82840190509392505050565b6000613b52828486613b20565b91508190509392505050565b7f64656c656761746563616c6c206661696c65642077697468206e6f207265617360008201527f6f6e000000000000000000000000000000000000000000000000000000000000602082015250565b6000613bba602283612148565b9150613bc582613b5e565b604082019050919050565b60006020820190508181036000830152613be981613bad565b9050919050565b600080fd5b600080fd5b60008085851115613c0e57613c0d613bf0565b5b83861115613c1f57613c1e613bf5565b5b6001850283019150848603905094509492505050565b600082905092915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600082821b905092915050565b6000613c858383613c35565b82613c908135613c40565b92506004821015613cd057613ccb7fffffffff0000000000000000000000000000000000000000000000000000000083600403600802613c6c565b831692505b505092915050565b7f6f68206f68206f682069742773206d6167696321000000000000000000000000600082015250565b6000613d0e601483612148565b9150613d1982613cd8565b602082019050919050565b60006020820190508181036000830152613d3d81613d01565b9050919050565b6000819050919050565b6000613d69613d64613d5f84613d44565b6130fa565b61221e565b9050919050565b613d7981613d4e565b82525050565b6000819050919050565b6000613da4613d9f613d9a84613d7f565b6130fa565b61221e565b9050919050565b613db481613d89565b82525050565b6000604082019050613dcf6000830185613d70565b613ddc6020830184613dab565b9392505050565b7f666972737420696e7420776173206e6f742067726561746572207468616e207360008201527f65636f6e6420696e740000000000000000000000000000000000000000000000602082015250565b6000613e3f602983612148565b9150613e4a82613de3565b604082019050919050565b60006020820190508181036000830152613e6e81613e32565b9050919050565b7f736f6d6520696400000000000000000000000000000000000000000000000000600082015250565b6000613eab600783612148565b9150613eb682613e75565b602082019050919050565b60006020820190508181036000830152613eda81613e9e565b9050919050565b60008083356001602003843603038112613efe57613efd613a37565b5b80840192508235915067ffffffffffffffff821115613f2057613f1f613a3c565b5b602083019250600182023603831315613f3c57613f3b613a41565b5b509250929050565b600081905092915050565b6000613f5b8385613f44565b9350613f688385846127a4565b82840190509392505050565b6000613f81828486613f4f565b9150819050939250505056fea2646970667358221220811fec16fe5ce732327b99430471548e9245369ec054d5ac5f20da3b4b1c9bb264736f6c63430008130033", } // NetworkDebugContractABI is the input ABI used to generate the binding from. @@ -1308,6 +1308,27 @@ func (_NetworkDebugContract *NetworkDebugContractTransactorSession) TraceDiffere return _NetworkDebugContract.Contract.TraceDifferent(&_NetworkDebugContract.TransactOpts, x, y) } +// TraceNestedEvents is a paid mutator transaction binding the contract method 0xb3f8d1b2. +// +// Solidity: function traceNestedEvents() returns() +func (_NetworkDebugContract *NetworkDebugContractTransactor) TraceNestedEvents(opts *bind.TransactOpts) (*types.Transaction, error) { + return _NetworkDebugContract.contract.Transact(opts, "traceNestedEvents") +} + +// TraceNestedEvents is a paid mutator transaction binding the contract method 0xb3f8d1b2. +// +// Solidity: function traceNestedEvents() returns() +func (_NetworkDebugContract *NetworkDebugContractSession) TraceNestedEvents() (*types.Transaction, error) { + return _NetworkDebugContract.Contract.TraceNestedEvents(&_NetworkDebugContract.TransactOpts) +} + +// TraceNestedEvents is a paid mutator transaction binding the contract method 0xb3f8d1b2. +// +// Solidity: function traceNestedEvents() returns() +func (_NetworkDebugContract *NetworkDebugContractTransactorSession) TraceNestedEvents() (*types.Transaction, error) { + return _NetworkDebugContract.Contract.TraceNestedEvents(&_NetworkDebugContract.TransactOpts) +} + // TraceSubWithCallback is a paid mutator transaction binding the contract method 0x3837a75e. // // Solidity: function traceSubWithCallback(int256 x, int256 y) returns(int256) @@ -3284,3 +3305,136 @@ func (_NetworkDebugContract *NetworkDebugContractFilterer) ParseTwoIndexEvent(lo event.Raw = log return event, nil } + +// NetworkDebugContractUniqueDebugEventIterator is returned from FilterUniqueDebugEvent and is used to iterate over the raw logs and unpacked data for UniqueDebugEvent events raised by the NetworkDebugContract contract. +type NetworkDebugContractUniqueDebugEventIterator struct { + Event *NetworkDebugContractUniqueDebugEvent // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *NetworkDebugContractUniqueDebugEventIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(NetworkDebugContractUniqueDebugEvent) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(NetworkDebugContractUniqueDebugEvent) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *NetworkDebugContractUniqueDebugEventIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *NetworkDebugContractUniqueDebugEventIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// NetworkDebugContractUniqueDebugEvent represents a UniqueDebugEvent event raised by the NetworkDebugContract contract. +type NetworkDebugContractUniqueDebugEvent struct { + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUniqueDebugEvent is a free log retrieval operation binding the contract event 0xa0f7c7c1fff15178b5db3e56860767f0889c56b591bd2d9ba3121b491347d74c. +// +// Solidity: event UniqueDebugEvent() +func (_NetworkDebugContract *NetworkDebugContractFilterer) FilterUniqueDebugEvent(opts *bind.FilterOpts) (*NetworkDebugContractUniqueDebugEventIterator, error) { + + logs, sub, err := _NetworkDebugContract.contract.FilterLogs(opts, "UniqueDebugEvent") + if err != nil { + return nil, err + } + return &NetworkDebugContractUniqueDebugEventIterator{contract: _NetworkDebugContract.contract, event: "UniqueDebugEvent", logs: logs, sub: sub}, nil +} + +// WatchUniqueDebugEvent is a free log subscription operation binding the contract event 0xa0f7c7c1fff15178b5db3e56860767f0889c56b591bd2d9ba3121b491347d74c. +// +// Solidity: event UniqueDebugEvent() +func (_NetworkDebugContract *NetworkDebugContractFilterer) WatchUniqueDebugEvent(opts *bind.WatchOpts, sink chan<- *NetworkDebugContractUniqueDebugEvent) (event.Subscription, error) { + + logs, sub, err := _NetworkDebugContract.contract.WatchLogs(opts, "UniqueDebugEvent") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(NetworkDebugContractUniqueDebugEvent) + if err := _NetworkDebugContract.contract.UnpackLog(event, "UniqueDebugEvent", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseUniqueDebugEvent is a log parse operation binding the contract event 0xa0f7c7c1fff15178b5db3e56860767f0889c56b591bd2d9ba3121b491347d74c. +// +// Solidity: event UniqueDebugEvent() +func (_NetworkDebugContract *NetworkDebugContractFilterer) ParseUniqueDebugEvent(log types.Log) (*NetworkDebugContractUniqueDebugEvent, error) { + event := new(NetworkDebugContractUniqueDebugEvent) + if err := _NetworkDebugContract.contract.UnpackLog(event, "UniqueDebugEvent", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/seth/contracts/bind/sub/NetworkDebugSubContract.go b/seth/contracts/bind/NetworkDebugSubContract/NetworkDebugSubContract.go similarity index 82% rename from seth/contracts/bind/sub/NetworkDebugSubContract.go rename to seth/contracts/bind/NetworkDebugSubContract/NetworkDebugSubContract.go index 8babcc2ea..5fdff6837 100644 --- a/seth/contracts/bind/sub/NetworkDebugSubContract.go +++ b/seth/contracts/bind/NetworkDebugSubContract/NetworkDebugSubContract.go @@ -1,7 +1,7 @@ // Code generated - DO NOT EDIT. // This file is a generated binding and any manual changes will be lost. -package network_debug_sub_contract +package NetworkDebugSubContract import ( "errors" @@ -38,8 +38,8 @@ type NetworkDebugSubContractAccount struct { // NetworkDebugSubContractMetaData contains all meta data concerning the NetworkDebugSubContract contract. var NetworkDebugSubContractMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"available\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"required\",\"type\":\"uint256\"}],\"name\":\"CustomErr\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"NoIndexEvent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"str\",\"type\":\"string\"}],\"name\":\"NoIndexEventString\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"uint64\",\"name\":\"balance\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"dailyLimit\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structNetworkDebugSubContract.Account\",\"name\":\"a\",\"type\":\"tuple\"}],\"name\":\"NoIndexStructEvent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"a\",\"type\":\"uint256\"}],\"name\":\"OneIndexEvent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"roundId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"startedBy\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startedAt\",\"type\":\"uint256\"}],\"name\":\"ThreeIndexEvent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"roundId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"startedBy\",\"type\":\"address\"}],\"name\":\"TwoIndexEvent\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"name\":\"alwaysRevertsCustomError\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pay\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"x\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"y\",\"type\":\"int256\"}],\"name\":\"trace\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"x\",\"type\":\"int256\"}],\"name\":\"traceOneInt\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"r\",\"type\":\"int256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"x\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"y\",\"type\":\"int256\"}],\"name\":\"traceWithCallback\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x608060405234801561001057600080fd5b506105f4806100206000396000f3fe60806040526004361061004a5760003560e01c8063047c44251461004f57806311abb0021461008c5780631b9265b8146100b55780633e41f135146100bf578063fa8fca7a146100fc575b600080fd5b34801561005b57600080fd5b5061007660048036038101906100719190610368565b610139565b60405161008391906103a4565b60405180910390f35b34801561009857600080fd5b506100b360048036038101906100ae91906103f5565b610186565b005b6100bd6101c5565b005b3480156100cb57600080fd5b506100e660048036038101906100e19190610435565b6101c7565b6040516100f391906103a4565b60405180910390f35b34801561010857600080fd5b50610123600480360381019061011e9190610435565b610230565b60405161013091906103a4565b60405180910390f35b60007f33bc9bae48dbe1e057f264b3fc6a1dacdcceacb3ba28d937231c70e068a02f1c3360405161016a91906104b6565b60405180910390a160038261017f9190610500565b9050919050565b81816040517f4a2eaf7e0000000000000000000000000000000000000000000000000000000081526004016101bc929190610553565b60405180910390fd5b565b60006002826101d69190610500565b91503373ffffffffffffffffffffffffffffffffffffffff16827f33b47a1cd66813164ec00800d74296f57415217c22505ee380594a712936a0b560405160405180910390a381836102289190610500565b905092915050565b60003373ffffffffffffffffffffffffffffffffffffffff16827f33b47a1cd66813164ec00800d74296f57415217c22505ee380594a712936a0b560405160405180910390a360003373ffffffffffffffffffffffffffffffffffffffff1663fbcb8d07846040518263ffffffff1660e01b81526004016102b191906103a4565b6020604051808303816000875af11580156102d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102f49190610591565b9050807feace1be0b97ec11f959499c07b9f60f0cc47bf610b28fda8fb0e970339cf3b3560405160405180910390a28091505092915050565b600080fd5b6000819050919050565b61034581610332565b811461035057600080fd5b50565b6000813590506103628161033c565b92915050565b60006020828403121561037e5761037d61032d565b5b600061038c84828501610353565b91505092915050565b61039e81610332565b82525050565b60006020820190506103b96000830184610395565b92915050565b6000819050919050565b6103d2816103bf565b81146103dd57600080fd5b50565b6000813590506103ef816103c9565b92915050565b6000806040838503121561040c5761040b61032d565b5b600061041a858286016103e0565b925050602061042b858286016103e0565b9150509250929050565b6000806040838503121561044c5761044b61032d565b5b600061045a85828601610353565b925050602061046b85828601610353565b9150509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006104a082610475565b9050919050565b6104b081610495565b82525050565b60006020820190506104cb60008301846104a7565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061050b82610332565b915061051683610332565b92508282019050828112156000831216838212600084121516171561053e5761053d6104d1565b5b92915050565b61054d816103bf565b82525050565b60006040820190506105686000830185610544565b6105756020830184610544565b9392505050565b60008151905061058b8161033c565b92915050565b6000602082840312156105a7576105a661032d565b5b60006105b58482850161057c565b9150509291505056fea2646970667358221220baf1ca0ebe5c3f70cf36de50eba34b796fa2141e3773a505c3199b335b0023c564736f6c63430008130033", + ABI: "[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"available\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"required\",\"type\":\"uint256\"}],\"name\":\"CustomErr\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"NoIndexEvent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"str\",\"type\":\"string\"}],\"name\":\"NoIndexEventString\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"uint64\",\"name\":\"balance\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"dailyLimit\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structNetworkDebugSubContract.Account\",\"name\":\"a\",\"type\":\"tuple\"}],\"name\":\"NoIndexStructEvent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"a\",\"type\":\"uint256\"}],\"name\":\"OneIndexEvent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"roundId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"startedBy\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startedAt\",\"type\":\"uint256\"}],\"name\":\"ThreeIndexEvent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"roundId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"startedBy\",\"type\":\"address\"}],\"name\":\"TwoIndexEvent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"UniqueSubDebugEvent\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"name\":\"alwaysRevertsCustomError\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pay\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"x\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"y\",\"type\":\"int256\"}],\"name\":\"trace\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"x\",\"type\":\"int256\"}],\"name\":\"traceOneInt\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"r\",\"type\":\"int256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"traceUniqueEvent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"x\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"y\",\"type\":\"int256\"}],\"name\":\"traceWithCallback\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x608060405234801561001057600080fd5b50610644806100206000396000f3fe6080604052600436106100555760003560e01c8063047c44251461005a57806311abb002146100975780631b9265b8146100c05780632d948d89146100ca5780633e41f135146100e1578063fa8fca7a1461011e575b600080fd5b34801561006657600080fd5b50610081600480360381019061007c91906103b8565b61015b565b60405161008e91906103f4565b60405180910390f35b3480156100a357600080fd5b506100be60048036038101906100b99190610445565b6101a8565b005b6100c86101e7565b005b3480156100d657600080fd5b506100df6101e9565b005b3480156100ed57600080fd5b5061010860048036038101906101039190610485565b610217565b60405161011591906103f4565b60405180910390f35b34801561012a57600080fd5b5061014560048036038101906101409190610485565b610280565b60405161015291906103f4565b60405180910390f35b60007f33bc9bae48dbe1e057f264b3fc6a1dacdcceacb3ba28d937231c70e068a02f1c3360405161018c9190610506565b60405180910390a16003826101a19190610550565b9050919050565b81816040517f4a2eaf7e0000000000000000000000000000000000000000000000000000000081526004016101de9291906105a3565b60405180910390fd5b565b7fe0b03c5e88196d907268b0babc690e041bdc7fcc1abf4bbf1e363e28c17e6b9b60405160405180910390a1565b60006002826102269190610550565b91503373ffffffffffffffffffffffffffffffffffffffff16827f33b47a1cd66813164ec00800d74296f57415217c22505ee380594a712936a0b560405160405180910390a381836102789190610550565b905092915050565b60003373ffffffffffffffffffffffffffffffffffffffff16827f33b47a1cd66813164ec00800d74296f57415217c22505ee380594a712936a0b560405160405180910390a360003373ffffffffffffffffffffffffffffffffffffffff1663fbcb8d07846040518263ffffffff1660e01b815260040161030191906103f4565b6020604051808303816000875af1158015610320573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061034491906105e1565b9050807feace1be0b97ec11f959499c07b9f60f0cc47bf610b28fda8fb0e970339cf3b3560405160405180910390a28091505092915050565b600080fd5b6000819050919050565b61039581610382565b81146103a057600080fd5b50565b6000813590506103b28161038c565b92915050565b6000602082840312156103ce576103cd61037d565b5b60006103dc848285016103a3565b91505092915050565b6103ee81610382565b82525050565b600060208201905061040960008301846103e5565b92915050565b6000819050919050565b6104228161040f565b811461042d57600080fd5b50565b60008135905061043f81610419565b92915050565b6000806040838503121561045c5761045b61037d565b5b600061046a85828601610430565b925050602061047b85828601610430565b9150509250929050565b6000806040838503121561049c5761049b61037d565b5b60006104aa858286016103a3565b92505060206104bb858286016103a3565b9150509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006104f0826104c5565b9050919050565b610500816104e5565b82525050565b600060208201905061051b60008301846104f7565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061055b82610382565b915061056683610382565b92508282019050828112156000831216838212600084121516171561058e5761058d610521565b5b92915050565b61059d8161040f565b82525050565b60006040820190506105b86000830185610594565b6105c56020830184610594565b9392505050565b6000815190506105db8161038c565b92915050565b6000602082840312156105f7576105f661037d565b5b6000610605848285016105cc565b9150509291505056fea26469706673582212205f29e7a2fe3b977e48321d06e8e10c9329a7347f657a04085ae8411d96cf98b664736f6c63430008130033", } // NetworkDebugSubContractABI is the input ABI used to generate the binding from. @@ -293,6 +293,27 @@ func (_NetworkDebugSubContract *NetworkDebugSubContractTransactorSession) TraceO return _NetworkDebugSubContract.Contract.TraceOneInt(&_NetworkDebugSubContract.TransactOpts, x) } +// TraceUniqueEvent is a paid mutator transaction binding the contract method 0x2d948d89. +// +// Solidity: function traceUniqueEvent() returns() +func (_NetworkDebugSubContract *NetworkDebugSubContractTransactor) TraceUniqueEvent(opts *bind.TransactOpts) (*types.Transaction, error) { + return _NetworkDebugSubContract.contract.Transact(opts, "traceUniqueEvent") +} + +// TraceUniqueEvent is a paid mutator transaction binding the contract method 0x2d948d89. +// +// Solidity: function traceUniqueEvent() returns() +func (_NetworkDebugSubContract *NetworkDebugSubContractSession) TraceUniqueEvent() (*types.Transaction, error) { + return _NetworkDebugSubContract.Contract.TraceUniqueEvent(&_NetworkDebugSubContract.TransactOpts) +} + +// TraceUniqueEvent is a paid mutator transaction binding the contract method 0x2d948d89. +// +// Solidity: function traceUniqueEvent() returns() +func (_NetworkDebugSubContract *NetworkDebugSubContractTransactorSession) TraceUniqueEvent() (*types.Transaction, error) { + return _NetworkDebugSubContract.Contract.TraceUniqueEvent(&_NetworkDebugSubContract.TransactOpts) +} + // TraceWithCallback is a paid mutator transaction binding the contract method 0xfa8fca7a. // // Solidity: function traceWithCallback(int256 x, int256 y) returns(int256) @@ -1166,3 +1187,136 @@ func (_NetworkDebugSubContract *NetworkDebugSubContractFilterer) ParseTwoIndexEv event.Raw = log return event, nil } + +// NetworkDebugSubContractUniqueSubDebugEventIterator is returned from FilterUniqueSubDebugEvent and is used to iterate over the raw logs and unpacked data for UniqueSubDebugEvent events raised by the NetworkDebugSubContract contract. +type NetworkDebugSubContractUniqueSubDebugEventIterator struct { + Event *NetworkDebugSubContractUniqueSubDebugEvent // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *NetworkDebugSubContractUniqueSubDebugEventIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(NetworkDebugSubContractUniqueSubDebugEvent) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(NetworkDebugSubContractUniqueSubDebugEvent) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *NetworkDebugSubContractUniqueSubDebugEventIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *NetworkDebugSubContractUniqueSubDebugEventIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// NetworkDebugSubContractUniqueSubDebugEvent represents a UniqueSubDebugEvent event raised by the NetworkDebugSubContract contract. +type NetworkDebugSubContractUniqueSubDebugEvent struct { + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUniqueSubDebugEvent is a free log retrieval operation binding the contract event 0xe0b03c5e88196d907268b0babc690e041bdc7fcc1abf4bbf1e363e28c17e6b9b. +// +// Solidity: event UniqueSubDebugEvent() +func (_NetworkDebugSubContract *NetworkDebugSubContractFilterer) FilterUniqueSubDebugEvent(opts *bind.FilterOpts) (*NetworkDebugSubContractUniqueSubDebugEventIterator, error) { + + logs, sub, err := _NetworkDebugSubContract.contract.FilterLogs(opts, "UniqueSubDebugEvent") + if err != nil { + return nil, err + } + return &NetworkDebugSubContractUniqueSubDebugEventIterator{contract: _NetworkDebugSubContract.contract, event: "UniqueSubDebugEvent", logs: logs, sub: sub}, nil +} + +// WatchUniqueSubDebugEvent is a free log subscription operation binding the contract event 0xe0b03c5e88196d907268b0babc690e041bdc7fcc1abf4bbf1e363e28c17e6b9b. +// +// Solidity: event UniqueSubDebugEvent() +func (_NetworkDebugSubContract *NetworkDebugSubContractFilterer) WatchUniqueSubDebugEvent(opts *bind.WatchOpts, sink chan<- *NetworkDebugSubContractUniqueSubDebugEvent) (event.Subscription, error) { + + logs, sub, err := _NetworkDebugSubContract.contract.WatchLogs(opts, "UniqueSubDebugEvent") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(NetworkDebugSubContractUniqueSubDebugEvent) + if err := _NetworkDebugSubContract.contract.UnpackLog(event, "UniqueSubDebugEvent", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseUniqueSubDebugEvent is a log parse operation binding the contract event 0xe0b03c5e88196d907268b0babc690e041bdc7fcc1abf4bbf1e363e28c17e6b9b. +// +// Solidity: event UniqueSubDebugEvent() +func (_NetworkDebugSubContract *NetworkDebugSubContractFilterer) ParseUniqueSubDebugEvent(log types.Log) (*NetworkDebugSubContractUniqueSubDebugEvent, error) { + event := new(NetworkDebugSubContractUniqueSubDebugEvent) + if err := _NetworkDebugSubContract.contract.UnpackLog(event, "UniqueSubDebugEvent", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/seth/contracts/bind/TestContractOne/TestContractOne.go b/seth/contracts/bind/TestContractOne/TestContractOne.go new file mode 100644 index 000000000..4fa1b5bd9 --- /dev/null +++ b/seth/contracts/bind/TestContractOne/TestContractOne.go @@ -0,0 +1,377 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package TestContractOne + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// UniqueEventOneMetaData contains all meta data concerning the UniqueEventOne contract. +var UniqueEventOneMetaData = &bind.MetaData{ + ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"int256\",\"name\":\"a\",\"type\":\"int256\"},{\"indexed\":true,\"internalType\":\"int256\",\"name\":\"b\",\"type\":\"int256\"}],\"name\":\"NonUniqueEvent\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"x\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"y\",\"type\":\"int256\"}],\"name\":\"executeFirstOperation\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x608060405234801561001057600080fd5b506101f2806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c806312a27a5e14610030575b600080fd5b61004a600480360381019061004591906100df565b610060565b604051610057919061012e565b60405180910390f35b600081837f192aedde7837c0cbfb2275e082ba2391de36cf5a893681e9dac2cced6947614e60405160405180910390a3818361009c9190610178565b905092915050565b600080fd5b6000819050919050565b6100bc816100a9565b81146100c757600080fd5b50565b6000813590506100d9816100b3565b92915050565b600080604083850312156100f6576100f56100a4565b5b6000610104858286016100ca565b9250506020610115858286016100ca565b9150509250929050565b610128816100a9565b82525050565b6000602082019050610143600083018461011f565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610183826100a9565b915061018e836100a9565b9250828201905082811215600083121683821260008412151617156101b6576101b5610149565b5b9291505056fea26469706673582212203a9131e072ba50bd7aedd7d16ac86eb26a9e83acd9a8736e900ad00a4b689ae664736f6c63430008130033", +} + +// UniqueEventOneABI is the input ABI used to generate the binding from. +// Deprecated: Use UniqueEventOneMetaData.ABI instead. +var UniqueEventOneABI = UniqueEventOneMetaData.ABI + +// UniqueEventOneBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use UniqueEventOneMetaData.Bin instead. +var UniqueEventOneBin = UniqueEventOneMetaData.Bin + +// DeployUniqueEventOne deploys a new Ethereum contract, binding an instance of UniqueEventOne to it. +func DeployUniqueEventOne(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *UniqueEventOne, error) { + parsed, err := UniqueEventOneMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(UniqueEventOneBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &UniqueEventOne{UniqueEventOneCaller: UniqueEventOneCaller{contract: contract}, UniqueEventOneTransactor: UniqueEventOneTransactor{contract: contract}, UniqueEventOneFilterer: UniqueEventOneFilterer{contract: contract}}, nil +} + +// UniqueEventOne is an auto generated Go binding around an Ethereum contract. +type UniqueEventOne struct { + UniqueEventOneCaller // Read-only binding to the contract + UniqueEventOneTransactor // Write-only binding to the contract + UniqueEventOneFilterer // Log filterer for contract events +} + +// UniqueEventOneCaller is an auto generated read-only Go binding around an Ethereum contract. +type UniqueEventOneCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// UniqueEventOneTransactor is an auto generated write-only Go binding around an Ethereum contract. +type UniqueEventOneTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// UniqueEventOneFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type UniqueEventOneFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// UniqueEventOneSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type UniqueEventOneSession struct { + Contract *UniqueEventOne // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// UniqueEventOneCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type UniqueEventOneCallerSession struct { + Contract *UniqueEventOneCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// UniqueEventOneTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type UniqueEventOneTransactorSession struct { + Contract *UniqueEventOneTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// UniqueEventOneRaw is an auto generated low-level Go binding around an Ethereum contract. +type UniqueEventOneRaw struct { + Contract *UniqueEventOne // Generic contract binding to access the raw methods on +} + +// UniqueEventOneCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type UniqueEventOneCallerRaw struct { + Contract *UniqueEventOneCaller // Generic read-only contract binding to access the raw methods on +} + +// UniqueEventOneTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type UniqueEventOneTransactorRaw struct { + Contract *UniqueEventOneTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewUniqueEventOne creates a new instance of UniqueEventOne, bound to a specific deployed contract. +func NewUniqueEventOne(address common.Address, backend bind.ContractBackend) (*UniqueEventOne, error) { + contract, err := bindUniqueEventOne(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &UniqueEventOne{UniqueEventOneCaller: UniqueEventOneCaller{contract: contract}, UniqueEventOneTransactor: UniqueEventOneTransactor{contract: contract}, UniqueEventOneFilterer: UniqueEventOneFilterer{contract: contract}}, nil +} + +// NewUniqueEventOneCaller creates a new read-only instance of UniqueEventOne, bound to a specific deployed contract. +func NewUniqueEventOneCaller(address common.Address, caller bind.ContractCaller) (*UniqueEventOneCaller, error) { + contract, err := bindUniqueEventOne(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &UniqueEventOneCaller{contract: contract}, nil +} + +// NewUniqueEventOneTransactor creates a new write-only instance of UniqueEventOne, bound to a specific deployed contract. +func NewUniqueEventOneTransactor(address common.Address, transactor bind.ContractTransactor) (*UniqueEventOneTransactor, error) { + contract, err := bindUniqueEventOne(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &UniqueEventOneTransactor{contract: contract}, nil +} + +// NewUniqueEventOneFilterer creates a new log filterer instance of UniqueEventOne, bound to a specific deployed contract. +func NewUniqueEventOneFilterer(address common.Address, filterer bind.ContractFilterer) (*UniqueEventOneFilterer, error) { + contract, err := bindUniqueEventOne(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &UniqueEventOneFilterer{contract: contract}, nil +} + +// bindUniqueEventOne binds a generic wrapper to an already deployed contract. +func bindUniqueEventOne(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := UniqueEventOneMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_UniqueEventOne *UniqueEventOneRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _UniqueEventOne.Contract.UniqueEventOneCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_UniqueEventOne *UniqueEventOneRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _UniqueEventOne.Contract.UniqueEventOneTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_UniqueEventOne *UniqueEventOneRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _UniqueEventOne.Contract.UniqueEventOneTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_UniqueEventOne *UniqueEventOneCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _UniqueEventOne.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_UniqueEventOne *UniqueEventOneTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _UniqueEventOne.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_UniqueEventOne *UniqueEventOneTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _UniqueEventOne.Contract.contract.Transact(opts, method, params...) +} + +// ExecuteFirstOperation is a paid mutator transaction binding the contract method 0x12a27a5e. +// +// Solidity: function executeFirstOperation(int256 x, int256 y) returns(int256) +func (_UniqueEventOne *UniqueEventOneTransactor) ExecuteFirstOperation(opts *bind.TransactOpts, x *big.Int, y *big.Int) (*types.Transaction, error) { + return _UniqueEventOne.contract.Transact(opts, "executeFirstOperation", x, y) +} + +// ExecuteFirstOperation is a paid mutator transaction binding the contract method 0x12a27a5e. +// +// Solidity: function executeFirstOperation(int256 x, int256 y) returns(int256) +func (_UniqueEventOne *UniqueEventOneSession) ExecuteFirstOperation(x *big.Int, y *big.Int) (*types.Transaction, error) { + return _UniqueEventOne.Contract.ExecuteFirstOperation(&_UniqueEventOne.TransactOpts, x, y) +} + +// ExecuteFirstOperation is a paid mutator transaction binding the contract method 0x12a27a5e. +// +// Solidity: function executeFirstOperation(int256 x, int256 y) returns(int256) +func (_UniqueEventOne *UniqueEventOneTransactorSession) ExecuteFirstOperation(x *big.Int, y *big.Int) (*types.Transaction, error) { + return _UniqueEventOne.Contract.ExecuteFirstOperation(&_UniqueEventOne.TransactOpts, x, y) +} + +// UniqueEventOneNonUniqueEventIterator is returned from FilterNonUniqueEvent and is used to iterate over the raw logs and unpacked data for NonUniqueEvent events raised by the UniqueEventOne contract. +type UniqueEventOneNonUniqueEventIterator struct { + Event *UniqueEventOneNonUniqueEvent // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *UniqueEventOneNonUniqueEventIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(UniqueEventOneNonUniqueEvent) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(UniqueEventOneNonUniqueEvent) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *UniqueEventOneNonUniqueEventIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *UniqueEventOneNonUniqueEventIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// UniqueEventOneNonUniqueEvent represents a NonUniqueEvent event raised by the UniqueEventOne contract. +type UniqueEventOneNonUniqueEvent struct { + A *big.Int + B *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterNonUniqueEvent is a free log retrieval operation binding the contract event 0x192aedde7837c0cbfb2275e082ba2391de36cf5a893681e9dac2cced6947614e. +// +// Solidity: event NonUniqueEvent(int256 indexed a, int256 indexed b) +func (_UniqueEventOne *UniqueEventOneFilterer) FilterNonUniqueEvent(opts *bind.FilterOpts, a []*big.Int, b []*big.Int) (*UniqueEventOneNonUniqueEventIterator, error) { + + var aRule []interface{} + for _, aItem := range a { + aRule = append(aRule, aItem) + } + var bRule []interface{} + for _, bItem := range b { + bRule = append(bRule, bItem) + } + + logs, sub, err := _UniqueEventOne.contract.FilterLogs(opts, "NonUniqueEvent", aRule, bRule) + if err != nil { + return nil, err + } + return &UniqueEventOneNonUniqueEventIterator{contract: _UniqueEventOne.contract, event: "NonUniqueEvent", logs: logs, sub: sub}, nil +} + +// WatchNonUniqueEvent is a free log subscription operation binding the contract event 0x192aedde7837c0cbfb2275e082ba2391de36cf5a893681e9dac2cced6947614e. +// +// Solidity: event NonUniqueEvent(int256 indexed a, int256 indexed b) +func (_UniqueEventOne *UniqueEventOneFilterer) WatchNonUniqueEvent(opts *bind.WatchOpts, sink chan<- *UniqueEventOneNonUniqueEvent, a []*big.Int, b []*big.Int) (event.Subscription, error) { + + var aRule []interface{} + for _, aItem := range a { + aRule = append(aRule, aItem) + } + var bRule []interface{} + for _, bItem := range b { + bRule = append(bRule, bItem) + } + + logs, sub, err := _UniqueEventOne.contract.WatchLogs(opts, "NonUniqueEvent", aRule, bRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(UniqueEventOneNonUniqueEvent) + if err := _UniqueEventOne.contract.UnpackLog(event, "NonUniqueEvent", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseNonUniqueEvent is a log parse operation binding the contract event 0x192aedde7837c0cbfb2275e082ba2391de36cf5a893681e9dac2cced6947614e. +// +// Solidity: event NonUniqueEvent(int256 indexed a, int256 indexed b) +func (_UniqueEventOne *UniqueEventOneFilterer) ParseNonUniqueEvent(log types.Log) (*UniqueEventOneNonUniqueEvent, error) { + event := new(UniqueEventOneNonUniqueEvent) + if err := _UniqueEventOne.contract.UnpackLog(event, "NonUniqueEvent", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/seth/contracts/bind/TestContractTwo/TestContractTwo.go b/seth/contracts/bind/TestContractTwo/TestContractTwo.go new file mode 100644 index 000000000..8f46f96de --- /dev/null +++ b/seth/contracts/bind/TestContractTwo/TestContractTwo.go @@ -0,0 +1,377 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package TestContractTwo + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// UniqueEventTwoMetaData contains all meta data concerning the UniqueEventTwo contract. +var UniqueEventTwoMetaData = &bind.MetaData{ + ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"int256\",\"name\":\"a\",\"type\":\"int256\"},{\"indexed\":true,\"internalType\":\"int256\",\"name\":\"b\",\"type\":\"int256\"}],\"name\":\"NonUniqueEvent\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"x\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"y\",\"type\":\"int256\"}],\"name\":\"executeSecondOperation\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x608060405234801561001057600080fd5b506101f2806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063e31279c514610030575b600080fd5b61004a600480360381019061004591906100df565b610060565b604051610057919061012e565b60405180910390f35b600081837f192aedde7837c0cbfb2275e082ba2391de36cf5a893681e9dac2cced6947614e60405160405180910390a3818361009c9190610178565b905092915050565b600080fd5b6000819050919050565b6100bc816100a9565b81146100c757600080fd5b50565b6000813590506100d9816100b3565b92915050565b600080604083850312156100f6576100f56100a4565b5b6000610104858286016100ca565b9250506020610115858286016100ca565b9150509250929050565b610128816100a9565b82525050565b6000602082019050610143600083018461011f565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610183826100a9565b915061018e836100a9565b9250828201905082811215600083121683821260008412151617156101b6576101b5610149565b5b9291505056fea264697066735822122036206ffb0222909d65d2a872080e677681bc6601dce2b4cfebd9503a1187280964736f6c63430008130033", +} + +// UniqueEventTwoABI is the input ABI used to generate the binding from. +// Deprecated: Use UniqueEventTwoMetaData.ABI instead. +var UniqueEventTwoABI = UniqueEventTwoMetaData.ABI + +// UniqueEventTwoBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use UniqueEventTwoMetaData.Bin instead. +var UniqueEventTwoBin = UniqueEventTwoMetaData.Bin + +// DeployUniqueEventTwo deploys a new Ethereum contract, binding an instance of UniqueEventTwo to it. +func DeployUniqueEventTwo(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *UniqueEventTwo, error) { + parsed, err := UniqueEventTwoMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(UniqueEventTwoBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &UniqueEventTwo{UniqueEventTwoCaller: UniqueEventTwoCaller{contract: contract}, UniqueEventTwoTransactor: UniqueEventTwoTransactor{contract: contract}, UniqueEventTwoFilterer: UniqueEventTwoFilterer{contract: contract}}, nil +} + +// UniqueEventTwo is an auto generated Go binding around an Ethereum contract. +type UniqueEventTwo struct { + UniqueEventTwoCaller // Read-only binding to the contract + UniqueEventTwoTransactor // Write-only binding to the contract + UniqueEventTwoFilterer // Log filterer for contract events +} + +// UniqueEventTwoCaller is an auto generated read-only Go binding around an Ethereum contract. +type UniqueEventTwoCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// UniqueEventTwoTransactor is an auto generated write-only Go binding around an Ethereum contract. +type UniqueEventTwoTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// UniqueEventTwoFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type UniqueEventTwoFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// UniqueEventTwoSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type UniqueEventTwoSession struct { + Contract *UniqueEventTwo // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// UniqueEventTwoCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type UniqueEventTwoCallerSession struct { + Contract *UniqueEventTwoCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// UniqueEventTwoTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type UniqueEventTwoTransactorSession struct { + Contract *UniqueEventTwoTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// UniqueEventTwoRaw is an auto generated low-level Go binding around an Ethereum contract. +type UniqueEventTwoRaw struct { + Contract *UniqueEventTwo // Generic contract binding to access the raw methods on +} + +// UniqueEventTwoCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type UniqueEventTwoCallerRaw struct { + Contract *UniqueEventTwoCaller // Generic read-only contract binding to access the raw methods on +} + +// UniqueEventTwoTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type UniqueEventTwoTransactorRaw struct { + Contract *UniqueEventTwoTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewUniqueEventTwo creates a new instance of UniqueEventTwo, bound to a specific deployed contract. +func NewUniqueEventTwo(address common.Address, backend bind.ContractBackend) (*UniqueEventTwo, error) { + contract, err := bindUniqueEventTwo(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &UniqueEventTwo{UniqueEventTwoCaller: UniqueEventTwoCaller{contract: contract}, UniqueEventTwoTransactor: UniqueEventTwoTransactor{contract: contract}, UniqueEventTwoFilterer: UniqueEventTwoFilterer{contract: contract}}, nil +} + +// NewUniqueEventTwoCaller creates a new read-only instance of UniqueEventTwo, bound to a specific deployed contract. +func NewUniqueEventTwoCaller(address common.Address, caller bind.ContractCaller) (*UniqueEventTwoCaller, error) { + contract, err := bindUniqueEventTwo(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &UniqueEventTwoCaller{contract: contract}, nil +} + +// NewUniqueEventTwoTransactor creates a new write-only instance of UniqueEventTwo, bound to a specific deployed contract. +func NewUniqueEventTwoTransactor(address common.Address, transactor bind.ContractTransactor) (*UniqueEventTwoTransactor, error) { + contract, err := bindUniqueEventTwo(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &UniqueEventTwoTransactor{contract: contract}, nil +} + +// NewUniqueEventTwoFilterer creates a new log filterer instance of UniqueEventTwo, bound to a specific deployed contract. +func NewUniqueEventTwoFilterer(address common.Address, filterer bind.ContractFilterer) (*UniqueEventTwoFilterer, error) { + contract, err := bindUniqueEventTwo(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &UniqueEventTwoFilterer{contract: contract}, nil +} + +// bindUniqueEventTwo binds a generic wrapper to an already deployed contract. +func bindUniqueEventTwo(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := UniqueEventTwoMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_UniqueEventTwo *UniqueEventTwoRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _UniqueEventTwo.Contract.UniqueEventTwoCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_UniqueEventTwo *UniqueEventTwoRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _UniqueEventTwo.Contract.UniqueEventTwoTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_UniqueEventTwo *UniqueEventTwoRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _UniqueEventTwo.Contract.UniqueEventTwoTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_UniqueEventTwo *UniqueEventTwoCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _UniqueEventTwo.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_UniqueEventTwo *UniqueEventTwoTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _UniqueEventTwo.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_UniqueEventTwo *UniqueEventTwoTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _UniqueEventTwo.Contract.contract.Transact(opts, method, params...) +} + +// ExecuteSecondOperation is a paid mutator transaction binding the contract method 0xe31279c5. +// +// Solidity: function executeSecondOperation(int256 x, int256 y) returns(int256) +func (_UniqueEventTwo *UniqueEventTwoTransactor) ExecuteSecondOperation(opts *bind.TransactOpts, x *big.Int, y *big.Int) (*types.Transaction, error) { + return _UniqueEventTwo.contract.Transact(opts, "executeSecondOperation", x, y) +} + +// ExecuteSecondOperation is a paid mutator transaction binding the contract method 0xe31279c5. +// +// Solidity: function executeSecondOperation(int256 x, int256 y) returns(int256) +func (_UniqueEventTwo *UniqueEventTwoSession) ExecuteSecondOperation(x *big.Int, y *big.Int) (*types.Transaction, error) { + return _UniqueEventTwo.Contract.ExecuteSecondOperation(&_UniqueEventTwo.TransactOpts, x, y) +} + +// ExecuteSecondOperation is a paid mutator transaction binding the contract method 0xe31279c5. +// +// Solidity: function executeSecondOperation(int256 x, int256 y) returns(int256) +func (_UniqueEventTwo *UniqueEventTwoTransactorSession) ExecuteSecondOperation(x *big.Int, y *big.Int) (*types.Transaction, error) { + return _UniqueEventTwo.Contract.ExecuteSecondOperation(&_UniqueEventTwo.TransactOpts, x, y) +} + +// UniqueEventTwoNonUniqueEventIterator is returned from FilterNonUniqueEvent and is used to iterate over the raw logs and unpacked data for NonUniqueEvent events raised by the UniqueEventTwo contract. +type UniqueEventTwoNonUniqueEventIterator struct { + Event *UniqueEventTwoNonUniqueEvent // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *UniqueEventTwoNonUniqueEventIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(UniqueEventTwoNonUniqueEvent) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(UniqueEventTwoNonUniqueEvent) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *UniqueEventTwoNonUniqueEventIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *UniqueEventTwoNonUniqueEventIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// UniqueEventTwoNonUniqueEvent represents a NonUniqueEvent event raised by the UniqueEventTwo contract. +type UniqueEventTwoNonUniqueEvent struct { + A *big.Int + B *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterNonUniqueEvent is a free log retrieval operation binding the contract event 0x192aedde7837c0cbfb2275e082ba2391de36cf5a893681e9dac2cced6947614e. +// +// Solidity: event NonUniqueEvent(int256 indexed a, int256 indexed b) +func (_UniqueEventTwo *UniqueEventTwoFilterer) FilterNonUniqueEvent(opts *bind.FilterOpts, a []*big.Int, b []*big.Int) (*UniqueEventTwoNonUniqueEventIterator, error) { + + var aRule []interface{} + for _, aItem := range a { + aRule = append(aRule, aItem) + } + var bRule []interface{} + for _, bItem := range b { + bRule = append(bRule, bItem) + } + + logs, sub, err := _UniqueEventTwo.contract.FilterLogs(opts, "NonUniqueEvent", aRule, bRule) + if err != nil { + return nil, err + } + return &UniqueEventTwoNonUniqueEventIterator{contract: _UniqueEventTwo.contract, event: "NonUniqueEvent", logs: logs, sub: sub}, nil +} + +// WatchNonUniqueEvent is a free log subscription operation binding the contract event 0x192aedde7837c0cbfb2275e082ba2391de36cf5a893681e9dac2cced6947614e. +// +// Solidity: event NonUniqueEvent(int256 indexed a, int256 indexed b) +func (_UniqueEventTwo *UniqueEventTwoFilterer) WatchNonUniqueEvent(opts *bind.WatchOpts, sink chan<- *UniqueEventTwoNonUniqueEvent, a []*big.Int, b []*big.Int) (event.Subscription, error) { + + var aRule []interface{} + for _, aItem := range a { + aRule = append(aRule, aItem) + } + var bRule []interface{} + for _, bItem := range b { + bRule = append(bRule, bItem) + } + + logs, sub, err := _UniqueEventTwo.contract.WatchLogs(opts, "NonUniqueEvent", aRule, bRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(UniqueEventTwoNonUniqueEvent) + if err := _UniqueEventTwo.contract.UnpackLog(event, "NonUniqueEvent", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseNonUniqueEvent is a log parse operation binding the contract event 0x192aedde7837c0cbfb2275e082ba2391de36cf5a893681e9dac2cced6947614e. +// +// Solidity: event NonUniqueEvent(int256 indexed a, int256 indexed b) +func (_UniqueEventTwo *UniqueEventTwoFilterer) ParseNonUniqueEvent(log types.Log) (*UniqueEventTwoNonUniqueEvent, error) { + event := new(UniqueEventTwoNonUniqueEvent) + if err := _UniqueEventTwo.contract.UnpackLog(event, "NonUniqueEvent", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/seth/decode.go b/seth/decode.go index 7f3c0fd48..79a323a9b 100644 --- a/seth/decode.go +++ b/seth/decode.go @@ -425,7 +425,15 @@ func (m *Client) decodeTransaction(l zerolog.Logger, tx *types.Transaction, rece for _, l := range receipt.Logs { logsValues = append(logsValues, *l) } - txEvents, err = m.decodeContractLogs(l, logsValues, abiResult.ABI) + + var allABIs []*abi.ABI + if m.ContractStore == nil { + allABIs = append(allABIs, &abiResult.ABI) + } else { + allABIs = m.ContractStore.GetAllABIs() + } + + txEvents, err = m.decodeContractLogs(l, logsValues, allABIs) if err != nil { return defaultTxn, err } diff --git a/seth/examples_wasp/client_main_test.go b/seth/examples_wasp/client_main_test.go index f74f94174..0893c4a79 100644 --- a/seth/examples_wasp/client_main_test.go +++ b/seth/examples_wasp/client_main_test.go @@ -9,9 +9,9 @@ import ( "github.com/pkg/errors" "github.com/smartcontractkit/chainlink-testing-framework/seth" - network_debug_contract "github.com/smartcontractkit/chainlink-testing-framework/seth/contracts/bind/debug" + network_debug_contract "github.com/smartcontractkit/chainlink-testing-framework/seth/contracts/bind/NetworkDebugContract" + network_sub_contract "github.com/smartcontractkit/chainlink-testing-framework/seth/contracts/bind/NetworkDebugSubContract" link_token "github.com/smartcontractkit/chainlink-testing-framework/seth/contracts/bind/link" - network_sub_contract "github.com/smartcontractkit/chainlink-testing-framework/seth/contracts/bind/sub" ) func init() { diff --git a/seth/tracing.go b/seth/tracing.go index 8a7615082..af9ea75b9 100644 --- a/seth/tracing.go +++ b/seth/tracing.go @@ -603,7 +603,7 @@ func (t *Tracer) SaveDecodedCallsAsJson(dirname string) error { } func (t *Tracer) decodeContractLogs(l zerolog.Logger, logs []TraceLog, a abi.ABI) ([]DecodedCommonLog, error) { - l.Trace().Msg("Decoding events") + l.Trace().Msg("Decoding ALL events") var eventsParsed []DecodedCommonLog for _, lo := range logs { for _, evSpec := range a.Events { diff --git a/seth/util.go b/seth/util.go index 0aa722838..e8e29a56f 100644 --- a/seth/util.go +++ b/seth/util.go @@ -19,8 +19,8 @@ import ( "github.com/ethereum/go-ethereum/params" "github.com/pkg/errors" - network_debug_contract "github.com/smartcontractkit/chainlink-testing-framework/seth/contracts/bind/debug" - network_sub_debug_contract "github.com/smartcontractkit/chainlink-testing-framework/seth/contracts/bind/sub" + network_debug_contract "github.com/smartcontractkit/chainlink-testing-framework/seth/contracts/bind/NetworkDebugContract" + network_sub_debug_contract "github.com/smartcontractkit/chainlink-testing-framework/seth/contracts/bind/NetworkDebugSubContract" ) const ( diff --git a/seth/util_test.go b/seth/util_test.go index 5b48e6ae3..111c6c213 100644 --- a/seth/util_test.go +++ b/seth/util_test.go @@ -11,7 +11,7 @@ import ( "github.com/stretchr/testify/require" "github.com/smartcontractkit/chainlink-testing-framework/seth" - network_sub_contract "github.com/smartcontractkit/chainlink-testing-framework/seth/contracts/bind/sub" + network_sub_contract "github.com/smartcontractkit/chainlink-testing-framework/seth/contracts/bind/NetworkDebugSubContract" ) func TestUtilDecodePragmaVersion(t *testing.T) {