From 1b678c222978c8bb31b91e66dc14eb5ff2963373 Mon Sep 17 00:00:00 2001 From: Neo Date: Tue, 21 Nov 2023 20:11:51 +0300 Subject: [PATCH 1/3] move from old repo Signed-off-by: Neo --- .../trie/verkle/SimpleVerkleTrie.java | 48 + .../trie/verkle/exporter/DotExporter.java | 94 ++ .../ethereum/trie/verkle/node/BranchNode.java | 35 + .../trie/verkle/node/InternalNode.java | 35 + .../ethereum/trie/verkle/node/LeafNode.java | 24 + .../besu/ethereum/trie/verkle/node/Node.java | 19 + .../trie/verkle/node/NullLeafNode.java | 16 + .../ethereum/trie/verkle/node/NullNode.java | 16 + .../ethereum/trie/verkle/node/StemNode.java | 33 + .../ethereum/trie/verkle/node/StoredNode.java | 16 + .../ethereum/trie/verkle/DotDisplayTest.java | 137 +++ .../ethereum/trie/verkle/DotExporterTest.java | 68 ++ .../trie/verkle/SimpleVerkleTrieTest.java | 60 + src/test/resources/VerkleTrie.gv | 519 +++++++++ .../expectedTreeOneValueNoRepeatingEdges.txt | 519 +++++++++ .../expectedTreeOneValueRepeatingEdges.txt | 1027 +++++++++++++++++ .../expectedTreeTwoValuesNoRepeatingEdges.txt | 520 +++++++++ .../expectedTreeTwoValuesRepeatingEdges.txt | 1027 +++++++++++++++++ 18 files changed, 4213 insertions(+) create mode 100644 src/main/java/org/hyperledger/besu/ethereum/trie/verkle/exporter/DotExporter.java create mode 100644 src/test/java/org/hyperledger/besu/ethereum/trie/verkle/DotDisplayTest.java create mode 100644 src/test/java/org/hyperledger/besu/ethereum/trie/verkle/DotExporterTest.java create mode 100644 src/test/resources/VerkleTrie.gv create mode 100644 src/test/resources/expectedTreeOneValueNoRepeatingEdges.txt create mode 100644 src/test/resources/expectedTreeOneValueRepeatingEdges.txt create mode 100644 src/test/resources/expectedTreeTwoValuesNoRepeatingEdges.txt create mode 100644 src/test/resources/expectedTreeTwoValuesRepeatingEdges.txt diff --git a/src/main/java/org/hyperledger/besu/ethereum/trie/verkle/SimpleVerkleTrie.java b/src/main/java/org/hyperledger/besu/ethereum/trie/verkle/SimpleVerkleTrie.java index fa6c83e..31970ab 100644 --- a/src/main/java/org/hyperledger/besu/ethereum/trie/verkle/SimpleVerkleTrie.java +++ b/src/main/java/org/hyperledger/besu/ethereum/trie/verkle/SimpleVerkleTrie.java @@ -18,6 +18,7 @@ import static com.google.common.base.Preconditions.checkNotNull; import org.hyperledger.besu.ethereum.trie.NodeUpdater; +import org.hyperledger.besu.ethereum.trie.verkle.exporter.DotExporter; import org.hyperledger.besu.ethereum.trie.verkle.node.InternalNode; import org.hyperledger.besu.ethereum.trie.verkle.node.Node; import org.hyperledger.besu.ethereum.trie.verkle.visitor.CommitVisitor; @@ -26,6 +27,7 @@ import org.hyperledger.besu.ethereum.trie.verkle.visitor.PutVisitor; import org.hyperledger.besu.ethereum.trie.verkle.visitor.RemoveVisitor; +import java.io.IOException; import java.util.Optional; import org.apache.tuweni.bytes.Bytes; @@ -141,4 +143,50 @@ public void commit(final NodeUpdater nodeUpdater) { root = root.accept(new HashVisitor(), Bytes.EMPTY); root = root.accept(new CommitVisitor(nodeUpdater), Bytes.EMPTY); } + + /** + * Returns the DOT representation of the entire Verkle Trie. + * + * @param showRepeatingEdges if true displays repeating edges; if false does not. + * @return The DOT representation of the Verkle Trie. + */ + public String toDotTree(Boolean showRepeatingEdges) { + return String.format( + "digraph VerkleTrie {\n%s\n}", + getRoot().toDot(showRepeatingEdges).replaceAll("^\\n+|\\n+$", "")); + } + + /** + * Returns the DOT representation of the entire Verkle Trie. + * + *

The representation does not contain repeating edges. + * + * @return The DOT representation of the Verkle Trie. + */ + public String toDotTree() { + StringBuilder result = new StringBuilder("digraph VerkleTrie {\n"); + Node root = getRoot(); + result.append(root.toDot()); + return result.append("}").toString(); + } + + /** + * Exports the Verkle Trie DOT representation to a '.gv' file located in the current directory. + * The default file name is "VerkleTree.gv". + * + * @throws IOException if an I/O error occurs. + */ + public void dotTreeToFile() throws IOException { + DotExporter.exportToDotFile(toDotTree()); + } + + /** + * /** Exports the Verkle Trie DOT representation to a '.gv' file located at the specified path. + * + * @param path The location where the DOT file will be saved. + * @throws IOException if ann I/O error occurs. + */ + public void dotTreeToFile(String path) throws IOException { + DotExporter.exportToDotFile(toDotTree(), path); + } } diff --git a/src/main/java/org/hyperledger/besu/ethereum/trie/verkle/exporter/DotExporter.java b/src/main/java/org/hyperledger/besu/ethereum/trie/verkle/exporter/DotExporter.java new file mode 100644 index 0000000..082e859 --- /dev/null +++ b/src/main/java/org/hyperledger/besu/ethereum/trie/verkle/exporter/DotExporter.java @@ -0,0 +1,94 @@ +/* + * Copyright Besu Contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * + */ +package org.hyperledger.besu.ethereum.trie.verkle.exporter; + +import java.io.BufferedWriter; +import java.io.FileWriter; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.AccessDeniedException; +import java.nio.file.FileSystemException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** Utility class for exporting Verkle Trie representations to DOT files. */ +public class DotExporter { + + private static final Logger LOG = LoggerFactory.getLogger(DotExporter.class); + private static final Pattern FILE_EXTENSION_PATTERN = Pattern.compile("\\.(dot|gv)$"); + private static final String DEFAULT_FILE_NAME = "./VerkleTrie.gv"; + + /** + * Exports the Verkle Trie DOT representation to a '.gv' file located in the current directory. + * The default file name is "VerkleTrie.gv". + * + * @param verkleTrieDotString The DOT representation of the Verkle Trie. + * @throws IOException If an I/O error occurs during the export process. + */ + public static void exportToDotFile(String verkleTrieDotString) throws IOException { + exportToDotFile(verkleTrieDotString, DEFAULT_FILE_NAME); + } + + /** + * Exports the Verkle Trie DOT representation to a '.gv' file located at the specified path. + * + * @param verkleTrieDotString The DOT representation of the Verkle Trie. + * @param filePath The location where the DOT file will be saved. + * @throws IOException If an I/O error occurs during the export process. + */ + public static void exportToDotFile(String verkleTrieDotString, String filePath) + throws IOException { + try { + if (filePath == null || filePath.isEmpty()) { + filePath = DEFAULT_FILE_NAME; + } else { + Matcher matcher = FILE_EXTENSION_PATTERN.matcher(filePath); + if (!matcher.find()) { + throw new IllegalArgumentException("Invalid file extension. Use .dot or .gv extension."); + } + } + + Path path = Paths.get(filePath); + + Files.createDirectories(path.getParent()); + + try (BufferedWriter writer = + new BufferedWriter(new FileWriter(path.toString(), StandardCharsets.UTF_8))) { + writer.write(verkleTrieDotString); + } + + } catch (AccessDeniedException e) { + LOG.error( + "Access denied. Check write permissions for the file. Details: {}", e.getMessage(), e); + throw e; + } catch (FileSystemException e) { + LOG.error( + "File system issue. Check disk space and file system restrictions. Details: {}", + e.getMessage(), + e); + throw e; + } catch (IOException e) { + LOG.error("Error writing DOT file: {}. Details: {}", e.getMessage(), e); + throw e; + } + } +} diff --git a/src/main/java/org/hyperledger/besu/ethereum/trie/verkle/node/BranchNode.java b/src/main/java/org/hyperledger/besu/ethereum/trie/verkle/node/BranchNode.java index 2d77fd2..95af72d 100644 --- a/src/main/java/org/hyperledger/besu/ethereum/trie/verkle/node/BranchNode.java +++ b/src/main/java/org/hyperledger/besu/ethereum/trie/verkle/node/BranchNode.java @@ -241,4 +241,39 @@ public String print() { } return builder.toString(); } + + /** + * Generates DOT representation for the BranchNode. + * + * @return DOT representation of the BranchNode. + */ + @Override + public String toDot(Boolean showRepeatingEdges) { + StringBuilder result = + new StringBuilder() + .append(getClass().getSimpleName()) + .append(getLocation().orElse(Bytes.EMPTY)) + .append("\", location=\"") + .append(getLocation().orElse(Bytes.EMPTY)) + .append("\", commitment=\"") + .append(getHash().orElse(Bytes32.ZERO)) + .append("\"]\n"); + + for (Node child : getChildren()) { + String edgeString = + getClass().getSimpleName() + + getLocation().orElse(Bytes.EMPTY) + + " -> " + + child.getClass().getSimpleName() + + child.getLocation().orElse(Bytes.EMPTY) + + "\n"; + + if (showRepeatingEdges || !result.toString().contains(edgeString)) { + result.append(edgeString); + } + result.append(child.toDot(showRepeatingEdges)); + } + + return result.toString(); + } } diff --git a/src/main/java/org/hyperledger/besu/ethereum/trie/verkle/node/InternalNode.java b/src/main/java/org/hyperledger/besu/ethereum/trie/verkle/node/InternalNode.java index c9a3656..24b6084 100644 --- a/src/main/java/org/hyperledger/besu/ethereum/trie/verkle/node/InternalNode.java +++ b/src/main/java/org/hyperledger/besu/ethereum/trie/verkle/node/InternalNode.java @@ -158,4 +158,39 @@ public String print() { } return builder.toString(); } + + /** + * Generates DOT representation for the InternalNode. + * + * @return DOT representation of the InternalNode. + */ + @Override + public String toDot(Boolean showRepeatingEdges) { + StringBuilder result = + new StringBuilder() + .append(getClass().getSimpleName()) + .append(getLocation().orElse(Bytes.EMPTY)) + .append("[location=\"") + .append(getLocation().orElse(Bytes.EMPTY)) + .append("\", commitment=\"") + .append(getHash().orElse(Bytes32.ZERO)) + .append("\"]\n"); + + for (Node child : getChildren()) { + String edgeString = + getClass().getSimpleName() + + getLocation().orElse(Bytes.EMPTY) + + " -> " + + child.getClass().getSimpleName() + + child.getLocation().orElse(Bytes.EMPTY) + + "\n"; + + if (showRepeatingEdges || !result.toString().contains(edgeString)) { + result.append(edgeString); + } + result.append(child.toDot(showRepeatingEdges)); + } + + return result.toString(); + } } diff --git a/src/main/java/org/hyperledger/besu/ethereum/trie/verkle/node/LeafNode.java b/src/main/java/org/hyperledger/besu/ethereum/trie/verkle/node/LeafNode.java index e6a744d..fe45916 100644 --- a/src/main/java/org/hyperledger/besu/ethereum/trie/verkle/node/LeafNode.java +++ b/src/main/java/org/hyperledger/besu/ethereum/trie/verkle/node/LeafNode.java @@ -50,6 +50,7 @@ public LeafNode(final Bytes location, final V value) { this.value = value; this.valueSerializer = val -> (Bytes) val; } + /** * Constructs a new LeafNode with optional location, value. * @@ -104,6 +105,7 @@ public Optional getValue() { public Optional getLocation() { return location; } + /** * Get the children of the node. A leaf node does not have children, so this method throws an * UnsupportedOperationException. @@ -159,4 +161,26 @@ public boolean isDirty() { public String print() { return "Leaf:" + getValue().map(Object::toString).orElse("empty"); } + + /** + * Generates DOT representation for the LeafNode. + * + * @return DOT representation of the LeafNode. + */ + @Override + public String toDot(Boolean showRepeatingEdges) { + Bytes locationBytes = getLocation().orElse(Bytes.EMPTY); + + return new StringBuilder() + .append(getClass().getSimpleName()) + .append(locationBytes) + .append("[location=\"") + .append(locationBytes) + .append("\", suffix=\"") + .append(locationBytes.get(locationBytes.size() - 1)) + .append("\", value=\"") + .append(getValue().orElse(null)) + .append("\"]\n") + .toString(); + } } diff --git a/src/main/java/org/hyperledger/besu/ethereum/trie/verkle/node/Node.java b/src/main/java/org/hyperledger/besu/ethereum/trie/verkle/node/Node.java index b6abba6..5a9a18c 100644 --- a/src/main/java/org/hyperledger/besu/ethereum/trie/verkle/node/Node.java +++ b/src/main/java/org/hyperledger/besu/ethereum/trie/verkle/node/Node.java @@ -125,4 +125,23 @@ default List> getChildren() { * @return A string representation of the node. */ String print(); + + /** + * Generates DOT representation for the Node. + * + * @param showRepeatingEdges If true, prints all edges; if false, prints only unique edges. + * @return DOT representation of the Node. + */ + String toDot(Boolean showRepeatingEdges); + + /** + * Generates DOT representation for the Node. + * + *

Representation does not contain repeating edges. + * + * @return DOT representation of the Node. + */ + default String toDot() { + return toDot(false); + } } diff --git a/src/main/java/org/hyperledger/besu/ethereum/trie/verkle/node/NullLeafNode.java b/src/main/java/org/hyperledger/besu/ethereum/trie/verkle/node/NullLeafNode.java index 11ce30d..d411136 100644 --- a/src/main/java/org/hyperledger/besu/ethereum/trie/verkle/node/NullLeafNode.java +++ b/src/main/java/org/hyperledger/besu/ethereum/trie/verkle/node/NullLeafNode.java @@ -104,6 +104,22 @@ public String print() { return "[NULL-LEAF]"; } + /** + * Generates DOT representation for the NullLeafNode. + * + * @return DOT representation of the NullLeafNode. + */ + @Override + public String toDot(Boolean showRepeatingEdges) { + String result = + getClass().getSimpleName() + + getLocation().orElse(Bytes.EMPTY) + + " [location=\"" + + getLocation().orElse(Bytes.EMPTY) + + "\"]\n"; + return result; + } + /** * Check if the `NullNode` is marked as dirty (needing to be persisted). * diff --git a/src/main/java/org/hyperledger/besu/ethereum/trie/verkle/node/NullNode.java b/src/main/java/org/hyperledger/besu/ethereum/trie/verkle/node/NullNode.java index 4ca0943..e4c0733 100644 --- a/src/main/java/org/hyperledger/besu/ethereum/trie/verkle/node/NullNode.java +++ b/src/main/java/org/hyperledger/besu/ethereum/trie/verkle/node/NullNode.java @@ -104,6 +104,22 @@ public String print() { return "[NULL]"; } + /** + * Generates DOT representation for the NullNode. + * + * @return DOT representation of the NullNode. + */ + @Override + public String toDot(Boolean showRepeatingEdges) { + String result = + getClass().getSimpleName() + + getLocation().orElse(Bytes.EMPTY) + + "[location=\"" + + getLocation().orElse(Bytes.EMPTY) + + "\"]\n"; + return result; + } + /** * Check if the `NullNode` is marked as dirty (needing to be persisted). * diff --git a/src/main/java/org/hyperledger/besu/ethereum/trie/verkle/node/StemNode.java b/src/main/java/org/hyperledger/besu/ethereum/trie/verkle/node/StemNode.java index 2a16fbd..4ecde3a 100644 --- a/src/main/java/org/hyperledger/besu/ethereum/trie/verkle/node/StemNode.java +++ b/src/main/java/org/hyperledger/besu/ethereum/trie/verkle/node/StemNode.java @@ -297,4 +297,37 @@ public String print() { private Bytes extractStem(final Bytes stemValue) { return stemValue.slice(0, 31); } + + @Override + public String toDot(Boolean showRepeatingEdges) { + StringBuilder result = + new StringBuilder() + .append(getClass().getSimpleName()) + .append(getLocation().orElse(Bytes.EMPTY)) + .append("[location=\"") + .append(getLocation().orElse(Bytes.EMPTY)) + .append("\", stem=\"") + .append(getStem()) + .append("\", leftCommitment=\"") + .append(getLeftCommitment().orElse(Bytes32.ZERO)) + .append("\", rightCommitment=\"") + .append(getRightCommitment().orElse(Bytes32.ZERO)) + .append("\"]\n"); + + for (Node child : getChildren()) { + String edgeString = + getClass().getSimpleName() + + getLocation().orElse(Bytes.EMPTY) + + " -> " + + child.getClass().getSimpleName() + + child.getLocation().orElse(Bytes.EMPTY) + + "\n"; + + if (showRepeatingEdges || !result.toString().contains(edgeString)) { + result.append(edgeString); + } + result.append(child.toDot(showRepeatingEdges)); + } + return result.toString(); + } } diff --git a/src/main/java/org/hyperledger/besu/ethereum/trie/verkle/node/StoredNode.java b/src/main/java/org/hyperledger/besu/ethereum/trie/verkle/node/StoredNode.java index 53bd6a9..a5b78bc 100644 --- a/src/main/java/org/hyperledger/besu/ethereum/trie/verkle/node/StoredNode.java +++ b/src/main/java/org/hyperledger/besu/ethereum/trie/verkle/node/StoredNode.java @@ -168,6 +168,22 @@ public String print() { return String.format("(stored) %s", node.print()); } + /** + * Generates DOT representation for the StoredNode. + * + * @return DOT representation of the StoredNode. + */ + @Override + public String toDot(Boolean showRepeatingEdges) { + String result = + getClass().getSimpleName() + + getLocation().orElse(Bytes.EMPTY) + + "[location=\"" + + getLocation().orElse(Bytes.EMPTY) + + "\"]\n"; + return result; + } + private Node load() { if (loadedNode.isEmpty()) { loadedNode = nodeFactory.retrieve(location, null); diff --git a/src/test/java/org/hyperledger/besu/ethereum/trie/verkle/DotDisplayTest.java b/src/test/java/org/hyperledger/besu/ethereum/trie/verkle/DotDisplayTest.java new file mode 100644 index 0000000..4d862cf --- /dev/null +++ b/src/test/java/org/hyperledger/besu/ethereum/trie/verkle/DotDisplayTest.java @@ -0,0 +1,137 @@ +/* + * Copyright Besu Contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * + */ +package org.hyperledger.besu.ethereum.trie.verkle; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; +import java.util.stream.Collectors; + +import org.apache.tuweni.bytes.Bytes32; +import org.junit.jupiter.api.Test; + +public class DotDisplayTest { + + /** + * Reads the content of a file from the resources folder. + * + * @param fileName The name of the file in the resources folder. + * @return The content of the file as a String. + * @throws IOException If an I/O error occurs. + */ + private String getResources(final String fileName) throws IOException { + var classLoader = DotDisplayTest.class.getClassLoader(); + try (BufferedReader reader = + new BufferedReader( + new InputStreamReader( + classLoader.getResourceAsStream(fileName), StandardCharsets.UTF_8))) { + + return reader.lines().collect(Collectors.joining("\n")); + } + } + + @Test + public void testToDotTrieOneValueNoRepeatingEdgesExport() throws IOException { + SimpleVerkleTrie trie = new SimpleVerkleTrie<>(); + Bytes32 key = + Bytes32.fromHexString("0x00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff"); + Bytes32 value = + Bytes32.fromHexString("0x1000000000000000000000000000000000000000000000000000000000000000"); + trie.put(key, value); + + final String fileName = "expectedTreeOneValueNoRepeatingEdges.txt"; + final String expectedTree = getResources(fileName); + final String actualTree = trie.toDotTree(); + + assertEquals(expectedTree, actualTree); + } + + @Test + public void testToDotTrieOneValueNoRepeatingEdges() throws IOException { + SimpleVerkleTrie trie = new SimpleVerkleTrie<>(); + Bytes32 key = + Bytes32.fromHexString("0x00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff"); + Bytes32 value = + Bytes32.fromHexString("0x1000000000000000000000000000000000000000000000000000000000000000"); + trie.put(key, value); + + final String fileName = "expectedTreeOneValueNoRepeatingEdges.txt"; + final String expectedTree = getResources(fileName); + final String actualTree = trie.toDotTree(); + assertEquals(expectedTree, actualTree); + } + + @Test + public void testToDotTrieTwoValuesNoRepeatingEdges() throws IOException { + SimpleVerkleTrie trie = new SimpleVerkleTrie(); + Bytes32 key1 = + Bytes32.fromHexString("0x00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff"); + Bytes32 value1 = + Bytes32.fromHexString("0x1000000000000000000000000000000000000000000000000000000000000000"); + Bytes32 key2 = + Bytes32.fromHexString("0x00112233445566778899aabbccddeeff00112233445566778899aabbccddee00"); + Bytes32 value2 = + Bytes32.fromHexString("0x0100000000000000000000000000000000000000000000000000000000000000"); + + trie.put(key1, value1); + trie.put(key2, value2); + + final String fileName = "expectedTreeTwoValuesNoRepeatingEdges.txt"; + final String expectedTree = getResources(fileName); + + final String actualTree = trie.toDotTree(); + assertEquals(expectedTree, actualTree); + } + + @Test + public void testToDotTrieOneValueRepeatingEdges() throws IOException { + SimpleVerkleTrie trie = new SimpleVerkleTrie<>(); + Bytes32 key = + Bytes32.fromHexString("0x00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff"); + Bytes32 value = + Bytes32.fromHexString("0x1000000000000000000000000000000000000000000000000000000000000000"); + trie.put(key, value); + + final String fileName = "expectedTreeOneValueRepeatingEdges.txt"; + final String expectedTree = getResources(fileName); + final String actualTree = trie.toDotTree(true); + assertEquals(expectedTree, actualTree); + } + + @Test + public void testToDotTrieTwoValuesRepeatingEdges() throws IOException { + SimpleVerkleTrie trie = new SimpleVerkleTrie(); + Bytes32 key1 = + Bytes32.fromHexString("0x00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff"); + Bytes32 value1 = + Bytes32.fromHexString("0x1000000000000000000000000000000000000000000000000000000000000000"); + Bytes32 key2 = + Bytes32.fromHexString("0x00112233445566778899aabbccddeeff00112233445566778899aabbccddee00"); + Bytes32 value2 = + Bytes32.fromHexString("0x0100000000000000000000000000000000000000000000000000000000000000"); + + trie.put(key1, value1); + trie.put(key2, value2); + + final String fileName = "expectedTreeTwoValuesRepeatingEdges.txt"; + final String expectedTree = getResources(fileName); + final String actualTree = trie.toDotTree(true); + assertEquals(expectedTree, actualTree); + } +} diff --git a/src/test/java/org/hyperledger/besu/ethereum/trie/verkle/DotExporterTest.java b/src/test/java/org/hyperledger/besu/ethereum/trie/verkle/DotExporterTest.java new file mode 100644 index 0000000..da2a350 --- /dev/null +++ b/src/test/java/org/hyperledger/besu/ethereum/trie/verkle/DotExporterTest.java @@ -0,0 +1,68 @@ +/* + * Copyright Besu Contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * + */ +package org.hyperledger.besu.ethereum.trie.verkle; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; +import java.util.stream.Collectors; + +import org.apache.tuweni.bytes.Bytes32; +import org.junit.jupiter.api.Test; + +public class DotExporterTest { + + /** + * Reads the content of a file from the resources folder. + * + * @param fileName The name of the file in the resources folder. + * @return The content of the file as a String. + * @throws IOException If an I/O error occurs. + */ + private String getResources(final String fileName) throws IOException { + + var classLoader = DotDisplayTest.class.getClassLoader(); + try (BufferedReader reader = + new BufferedReader( + new InputStreamReader( + classLoader.getResourceAsStream(fileName), StandardCharsets.UTF_8))) { + + return reader.lines().collect(Collectors.joining("\n")); + } + } + + @Test + public void testToDotTrieOneValueNoRepeatingEdgesExport() throws IOException { + SimpleVerkleTrie trie = new SimpleVerkleTrie<>(); + Bytes32 key = + Bytes32.fromHexString("0x00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff"); + Bytes32 value = + Bytes32.fromHexString("0x1000000000000000000000000000000000000000000000000000000000000000"); + trie.put(key, value); + + trie.dotTreeToFile("src/test/resources/VerkleTrie.gv"); + + final String fileName = "expectedTreeOneValueNoRepeatingEdges.txt"; + final String expectedTree = getResources(fileName); + + final String actualFromFile = getResources("VerkleTrie.gv"); + + assertEquals(expectedTree, actualFromFile); + } +} diff --git a/src/test/java/org/hyperledger/besu/ethereum/trie/verkle/SimpleVerkleTrieTest.java b/src/test/java/org/hyperledger/besu/ethereum/trie/verkle/SimpleVerkleTrieTest.java index 430b0bd..8bbc538 100644 --- a/src/test/java/org/hyperledger/besu/ethereum/trie/verkle/SimpleVerkleTrieTest.java +++ b/src/test/java/org/hyperledger/besu/ethereum/trie/verkle/SimpleVerkleTrieTest.java @@ -25,6 +25,66 @@ public class SimpleVerkleTrieTest { + @Test + public void testToDotTrieOneValueNoRepeatingEdges() { + SimpleVerkleTrie trie = new SimpleVerkleTrie<>(); + Bytes32 key = + Bytes32.fromHexString("0x00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff"); + Bytes32 value = + Bytes32.fromHexString("0x1000000000000000000000000000000000000000000000000000000000000000"); + trie.put(key, value); + + System.out.println(trie.toDotTree()); + } + + @Test + public void testToDotTrieTwoValuesNoRepeatingEdges() { + SimpleVerkleTrie trie = new SimpleVerkleTrie(); + Bytes32 key1 = + Bytes32.fromHexString("0x00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff"); + Bytes32 value1 = + Bytes32.fromHexString("0x1000000000000000000000000000000000000000000000000000000000000000"); + Bytes32 key2 = + Bytes32.fromHexString("0x00112233445566778899aabbccddeeff00112233445566778899aabbccddee00"); + Bytes32 value2 = + Bytes32.fromHexString("0x0100000000000000000000000000000000000000000000000000000000000000"); + + trie.put(key1, value1); + trie.put(key2, value2); + + System.out.println(trie.toDotTree()); + } + + @Test + public void testToDotTrieOneValueRepeatingEdges() { + SimpleVerkleTrie trie = new SimpleVerkleTrie<>(); + Bytes32 key = + Bytes32.fromHexString("0x00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff"); + Bytes32 value = + Bytes32.fromHexString("0x1000000000000000000000000000000000000000000000000000000000000000"); + trie.put(key, value); + + System.out.println(trie.toDotTree(true)); + } + + @Test + public void testToDotTrieTwoValuesRepeatingEdges() { + SimpleVerkleTrie trie = new SimpleVerkleTrie(); + Bytes32 key1 = + Bytes32.fromHexString("0x00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff"); + Bytes32 value1 = + Bytes32.fromHexString("0x1000000000000000000000000000000000000000000000000000000000000000"); + Bytes32 key2 = + Bytes32.fromHexString("0x00112233445566778899aabbccddeeff00112233445566778899aabbccddee00"); + Bytes32 value2 = + Bytes32.fromHexString("0x0100000000000000000000000000000000000000000000000000000000000000"); + + trie.put(key1, value1); + trie.put(key2, value2); + + System.out.println(trie.toDotTree(true)); + } + @Test public void testEmptyTrie() { SimpleVerkleTrie trie = new SimpleVerkleTrie(); diff --git a/src/test/resources/VerkleTrie.gv b/src/test/resources/VerkleTrie.gv new file mode 100644 index 0000000..67a9c05 --- /dev/null +++ b/src/test/resources/VerkleTrie.gv @@ -0,0 +1,519 @@ +digraph VerkleTrie { +InternalNode0x[location="0x", commitment="0x0000000000000000000000000000000000000000000000000000000000000000"] +InternalNode0x -> StemNode0x00 +StemNode0x00[location="0x00", stem="0x00112233445566778899aabbccddeeff00112233445566778899aabbccddee", leftCommitment="0x0000000000000000000000000000000000000000000000000000000000000000", rightCommitment="0x0000000000000000000000000000000000000000000000000000000000000000"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +StemNode0x00 -> LeafNode0x00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff +LeafNode0x00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff[location="0x00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", suffix="-1", value="0x1000000000000000000000000000000000000000000000000000000000000000"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +} \ No newline at end of file diff --git a/src/test/resources/expectedTreeOneValueNoRepeatingEdges.txt b/src/test/resources/expectedTreeOneValueNoRepeatingEdges.txt new file mode 100644 index 0000000..67a9c05 --- /dev/null +++ b/src/test/resources/expectedTreeOneValueNoRepeatingEdges.txt @@ -0,0 +1,519 @@ +digraph VerkleTrie { +InternalNode0x[location="0x", commitment="0x0000000000000000000000000000000000000000000000000000000000000000"] +InternalNode0x -> StemNode0x00 +StemNode0x00[location="0x00", stem="0x00112233445566778899aabbccddeeff00112233445566778899aabbccddee", leftCommitment="0x0000000000000000000000000000000000000000000000000000000000000000", rightCommitment="0x0000000000000000000000000000000000000000000000000000000000000000"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +StemNode0x00 -> LeafNode0x00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff +LeafNode0x00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff[location="0x00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", suffix="-1", value="0x1000000000000000000000000000000000000000000000000000000000000000"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +} \ No newline at end of file diff --git a/src/test/resources/expectedTreeOneValueRepeatingEdges.txt b/src/test/resources/expectedTreeOneValueRepeatingEdges.txt new file mode 100644 index 0000000..c0c52a2 --- /dev/null +++ b/src/test/resources/expectedTreeOneValueRepeatingEdges.txt @@ -0,0 +1,1027 @@ +digraph VerkleTrie { +InternalNode0x[location="0x", commitment="0x0000000000000000000000000000000000000000000000000000000000000000"] +InternalNode0x -> StemNode0x00 +StemNode0x00[location="0x00", stem="0x00112233445566778899aabbccddeeff00112233445566778899aabbccddee", leftCommitment="0x0000000000000000000000000000000000000000000000000000000000000000", rightCommitment="0x0000000000000000000000000000000000000000000000000000000000000000"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> LeafNode0x00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff +LeafNode0x00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff[location="0x00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", suffix="-1", value="0x1000000000000000000000000000000000000000000000000000000000000000"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +} \ No newline at end of file diff --git a/src/test/resources/expectedTreeTwoValuesNoRepeatingEdges.txt b/src/test/resources/expectedTreeTwoValuesNoRepeatingEdges.txt new file mode 100644 index 0000000..453e2ad --- /dev/null +++ b/src/test/resources/expectedTreeTwoValuesNoRepeatingEdges.txt @@ -0,0 +1,520 @@ +digraph VerkleTrie { +InternalNode0x[location="0x", commitment="0x0000000000000000000000000000000000000000000000000000000000000000"] +InternalNode0x -> StemNode0x00 +StemNode0x00[location="0x00", stem="0x00112233445566778899aabbccddeeff00112233445566778899aabbccddee", leftCommitment="0x0000000000000000000000000000000000000000000000000000000000000000", rightCommitment="0x0000000000000000000000000000000000000000000000000000000000000000"] +StemNode0x00 -> LeafNode0x00112233445566778899aabbccddeeff00112233445566778899aabbccddee00 +LeafNode0x00112233445566778899aabbccddeeff00112233445566778899aabbccddee00[location="0x00112233445566778899aabbccddeeff00112233445566778899aabbccddee00", suffix="0", value="0x0100000000000000000000000000000000000000000000000000000000000000"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +NullLeafNode0x [location="0x"] +StemNode0x00 -> LeafNode0x00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff +LeafNode0x00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff[location="0x00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", suffix="-1", value="0x1000000000000000000000000000000000000000000000000000000000000000"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +NullNode0x[location="0x"] +} \ No newline at end of file diff --git a/src/test/resources/expectedTreeTwoValuesRepeatingEdges.txt b/src/test/resources/expectedTreeTwoValuesRepeatingEdges.txt new file mode 100644 index 0000000..5cc59b0 --- /dev/null +++ b/src/test/resources/expectedTreeTwoValuesRepeatingEdges.txt @@ -0,0 +1,1027 @@ +digraph VerkleTrie { +InternalNode0x[location="0x", commitment="0x0000000000000000000000000000000000000000000000000000000000000000"] +InternalNode0x -> StemNode0x00 +StemNode0x00[location="0x00", stem="0x00112233445566778899aabbccddeeff00112233445566778899aabbccddee", leftCommitment="0x0000000000000000000000000000000000000000000000000000000000000000", rightCommitment="0x0000000000000000000000000000000000000000000000000000000000000000"] +StemNode0x00 -> LeafNode0x00112233445566778899aabbccddeeff00112233445566778899aabbccddee00 +LeafNode0x00112233445566778899aabbccddeeff00112233445566778899aabbccddee00[location="0x00112233445566778899aabbccddeeff00112233445566778899aabbccddee00", suffix="0", value="0x0100000000000000000000000000000000000000000000000000000000000000"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> NullLeafNode0x +NullLeafNode0x [location="0x"] +StemNode0x00 -> LeafNode0x00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff +LeafNode0x00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff[location="0x00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", suffix="-1", value="0x1000000000000000000000000000000000000000000000000000000000000000"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +InternalNode0x -> NullNode0x +NullNode0x[location="0x"] +} \ No newline at end of file From 49456ed821e1e69481450e8f19565f6e34110f13 Mon Sep 17 00:00:00 2001 From: Neo Date: Tue, 21 Nov 2023 20:19:08 +0300 Subject: [PATCH 2/3] update deps Signed-off-by: Neo --- build.gradle | 2 ++ gradle/versions.gradle | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/build.gradle b/build.gradle index 8fa900e..cc6989c 100644 --- a/build.gradle +++ b/build.gradle @@ -60,6 +60,8 @@ dependencies { implementation 'io.tmio:tuweni-rlp' implementation 'org.hyperledger.besu:ipa-multipoint' implementation 'org.hyperledger.besu.internal:trie:23.1.3-SNAPSHOT' + implementation 'org.slf4j:slf4j-api' + implementation 'ch.qos.logback:logback-classic' testImplementation 'org.junit.jupiter:junit-jupiter-api' testImplementation 'org.junit.jupiter:junit-jupiter-params' diff --git a/gradle/versions.gradle b/gradle/versions.gradle index 265d460..7bb4973 100644 --- a/gradle/versions.gradle +++ b/gradle/versions.gradle @@ -23,6 +23,10 @@ dependencyManagement { dependency 'org.assertj:assertj-core:3.24.2' + dependency 'org.slf4j:slf4j-api:2.0.9' + + dependency 'ch.qos.logback:logback-classic:1.4.11' + dependencySet(group: 'io.tmio', version: '2.4.2') { entry 'tuweni-bytes' entry 'tuweni-rlp' From 37c90d4cb7cf01b01bb9d770aa3476aeecf2bbf6 Mon Sep 17 00:00:00 2001 From: Neo Date: Wed, 22 Nov 2023 13:02:33 +0300 Subject: [PATCH 3/3] use dependencies with apache licence Signed-off-by: Neo --- build.gradle | 4 ++-- gradle/versions.gradle | 7 ++++--- .../besu/ethereum/trie/verkle/exporter/DotExporter.java | 6 +++--- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/build.gradle b/build.gradle index e116ae1..a166a6c 100644 --- a/build.gradle +++ b/build.gradle @@ -60,8 +60,8 @@ dependencies { implementation 'io.tmio:tuweni-rlp' implementation 'org.hyperledger.besu:ipa-multipoint' implementation 'org.hyperledger.besu.internal:trie:23.1.3-SNAPSHOT' - implementation 'org.slf4j:slf4j-api' - implementation 'ch.qos.logback:logback-classic' + implementation 'org.apache.logging.log4j:log4j-api' + implementation 'org.apache.logging.log4j:log4j-core' testImplementation 'org.junit.jupiter:junit-jupiter-api' testImplementation 'org.junit.jupiter:junit-jupiter-params' diff --git a/gradle/versions.gradle b/gradle/versions.gradle index 7bb4973..c81bcb7 100644 --- a/gradle/versions.gradle +++ b/gradle/versions.gradle @@ -23,9 +23,10 @@ dependencyManagement { dependency 'org.assertj:assertj-core:3.24.2' - dependency 'org.slf4j:slf4j-api:2.0.9' - - dependency 'ch.qos.logback:logback-classic:1.4.11' + dependencySet(group: 'org.apache.logging.log4j', version: '2.20.0') { + entry 'log4j-api' + entry 'log4j-core' + } dependencySet(group: 'io.tmio', version: '2.4.2') { entry 'tuweni-bytes' diff --git a/src/main/java/org/hyperledger/besu/ethereum/trie/verkle/exporter/DotExporter.java b/src/main/java/org/hyperledger/besu/ethereum/trie/verkle/exporter/DotExporter.java index 082e859..f09a10e 100644 --- a/src/main/java/org/hyperledger/besu/ethereum/trie/verkle/exporter/DotExporter.java +++ b/src/main/java/org/hyperledger/besu/ethereum/trie/verkle/exporter/DotExporter.java @@ -27,13 +27,13 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; /** Utility class for exporting Verkle Trie representations to DOT files. */ public class DotExporter { - private static final Logger LOG = LoggerFactory.getLogger(DotExporter.class); + private static final Logger LOG = LogManager.getLogger(DotExporter.class); private static final Pattern FILE_EXTENSION_PATTERN = Pattern.compile("\\.(dot|gv)$"); private static final String DEFAULT_FILE_NAME = "./VerkleTrie.gv";