From 3eb98c6d6dd685339c37db51c95290521b1e608e Mon Sep 17 00:00:00 2001 From: Dennis Kobert Date: Sat, 21 Sep 2024 11:06:43 +0200 Subject: [PATCH] Add path-bool library (#1952) * Add path-bool library * Cleanup code * Cargo format * Integrate boolean ops into graphite * Add test for editor crash * Fix edge sort floating point instability * Add unit test for red-dress failure * Backport tests and aux functions * Use curvature based sorting * Convert linear cubic splines to line segments * Deduplicate reversed path segments * Fix epsilon for empty segments * Remove parameter based intersection pruning * Add support for reversed paths * Add benchmark infrastructure * Add intersection benchmark * Add recursion bound * Implement support for overlapping path segments * Remove rouge prinln * Fix sorting for bezier segments with one control point at the start of the segment * Cleanup log statements * Directly translate graphite paths to Path segments * Round data before passing it to path_bool * Fix flag_faces traversal order * Add test for white dots in bottom right of painted dreams * Make rounding configurable * Update demo artwork to remove manual path modifications * Convert from path segments to manipulator groups directly * Remove dead code * Fix clippy lints * Replace functions in path segment with methods and add documentation * Add more documentation * Close subpaths * Reorganize files and add README.md * Add license information * Code review * Fix license info * Adopt new node macro and fix demo artwork * Close subpaths with Z --------- Co-authored-by: Keavon Chambers --- Cargo.lock | 85 + Cargo.toml | 2 + demo-artwork/painted-dreams.graphite | 2 +- .../document/graph_operation/utility_types.rs | 6 +- .../node_graph/document_node_definitions.rs | 3 +- .../document/node_graph/node_properties.rs | 9 +- libraries/bezier-rs/src/bezier/core.rs | 13 +- libraries/path-bool/.gitignore | 2 + libraries/path-bool/Cargo.toml | 38 + libraries/path-bool/LICENSE-APACHE | 201 ++ libraries/path-bool/LICENSE-MIT | 10 + libraries/path-bool/NOTICE | 6 + libraries/path-bool/README.md | 68 + .../visual-tests/dangling-01/difference.svg | 7 + .../visual-tests/dangling-01/division.svg | 7 + .../visual-tests/dangling-01/exclusion.svg | 7 + .../visual-tests/dangling-01/fracture.svg | 7 + .../visual-tests/dangling-01/intersection.svg | 7 + .../visual-tests/dangling-01/original.svg | 16 + .../visual-tests/dangling-01/union.svg | 7 + .../visual-tests/dangling-02/difference.svg | 7 + .../visual-tests/dangling-02/division.svg | 7 + .../visual-tests/dangling-02/exclusion.svg | 7 + .../visual-tests/dangling-02/fracture.svg | 7 + .../visual-tests/dangling-02/intersection.svg | 7 + .../visual-tests/dangling-02/original.svg | 16 + .../visual-tests/dangling-02/union.svg | 7 + .../visual-tests/dangling-03/difference.svg | 7 + .../visual-tests/dangling-03/division.svg | 7 + .../visual-tests/dangling-03/exclusion.svg | 7 + .../visual-tests/dangling-03/fracture.svg | 7 + .../visual-tests/dangling-03/intersection.svg | 7 + .../visual-tests/dangling-03/original.svg | 16 + .../visual-tests/dangling-03/union.svg | 7 + .../visual-tests/dangling-04/difference.svg | 7 + .../visual-tests/dangling-04/division.svg | 7 + .../visual-tests/dangling-04/exclusion.svg | 7 + .../visual-tests/dangling-04/fracture.svg | 7 + .../visual-tests/dangling-04/intersection.svg | 7 + .../visual-tests/dangling-04/original.svg | 16 + .../visual-tests/dangling-04/union.svg | 7 + .../visual-tests/establish-ground-truth.sh | 5 + .../visual-tests/generate-ground-truth.sh | 10 + .../visual-tests/nesting-01/difference.svg | 10 + .../visual-tests/nesting-01/division.svg | 10 + .../visual-tests/nesting-01/exclusion.svg | 10 + .../visual-tests/nesting-01/fracture.svg | 10 + .../visual-tests/nesting-01/intersection.svg | 10 + .../visual-tests/nesting-01/original.svg | 25 + .../visual-tests/nesting-01/union.svg | 10 + .../visual-tests/nesting-02/difference.svg | 10 + .../visual-tests/nesting-02/division.svg | 10 + .../visual-tests/nesting-02/exclusion.svg | 10 + .../visual-tests/nesting-02/fracture.svg | 10 + .../visual-tests/nesting-02/intersection.svg | 10 + .../visual-tests/nesting-02/original.svg | 25 + .../visual-tests/nesting-02/union.svg | 10 + .../visual-tests/nesting-03/difference.svg | 7 + .../visual-tests/nesting-03/division.svg | 7 + .../visual-tests/nesting-03/exclusion.svg | 7 + .../visual-tests/nesting-03/fracture.svg | 7 + .../visual-tests/nesting-03/intersection.svg | 7 + .../visual-tests/nesting-03/original.svg | 16 + .../visual-tests/nesting-03/union.svg | 7 + .../visual-tests/nesting-04/difference.svg | 8 + .../visual-tests/nesting-04/division.svg | 8 + .../visual-tests/nesting-04/exclusion.svg | 8 + .../visual-tests/nesting-04/fracture.svg | 8 + .../visual-tests/nesting-04/intersection.svg | 8 + .../visual-tests/nesting-04/original.svg | 18 + .../visual-tests/nesting-04/union.svg | 8 + .../visual-tests/real-01/difference.svg | 8 + .../visual-tests/real-01/division.svg | 8 + .../visual-tests/real-01/exclusion.svg | 8 + .../visual-tests/real-01/fracture.svg | 8 + .../visual-tests/real-01/intersection.svg | 8 + .../visual-tests/real-01/original.svg | 22 + .../visual-tests/real-01/union.svg | 8 + .../visual-tests/real-02/difference.svg | 5 + .../visual-tests/real-02/division.svg | 5 + .../visual-tests/real-02/exclusion.svg | 5 + .../visual-tests/real-02/fracture.svg | 5 + .../visual-tests/real-02/intersection.svg | 5 + .../visual-tests/real-02/original.svg | 13 + .../visual-tests/real-02/union.svg | 5 + .../visual-tests/simple-01/difference.svg | 5 + .../visual-tests/simple-01/division.svg | 5 + .../visual-tests/simple-01/exclusion.svg | 5 + .../visual-tests/simple-01/fracture.svg | 5 + .../visual-tests/simple-01/intersection.svg | 5 + .../visual-tests/simple-01/original.svg | 13 + .../visual-tests/simple-01/union.svg | 5 + .../visual-tests/simple-02/difference.svg | 5 + .../visual-tests/simple-02/division.svg | 5 + .../visual-tests/simple-02/exclusion.svg | 5 + .../visual-tests/simple-02/fracture.svg | 5 + .../visual-tests/simple-02/intersection.svg | 5 + .../visual-tests/simple-02/original.svg | 14 + .../visual-tests/simple-02/union.svg | 5 + .../visual-tests/simple-03/difference.svg | 7 + .../visual-tests/simple-03/division.svg | 7 + .../visual-tests/simple-03/exclusion.svg | 7 + .../visual-tests/simple-03/fracture.svg | 7 + .../visual-tests/simple-03/intersection.svg | 7 + .../visual-tests/simple-03/original.svg | 20 + .../visual-tests/simple-03/union.svg | 7 + .../visual-tests/simple-04/difference.svg | 10 + .../visual-tests/simple-04/division.svg | 10 + .../visual-tests/simple-04/exclusion.svg | 10 + .../visual-tests/simple-04/fracture.svg | 10 + .../visual-tests/simple-04/intersection.svg | 10 + .../visual-tests/simple-04/original.svg | 25 + .../visual-tests/simple-04/union.svg | 10 + .../visual-tests/simple-05/difference.svg | 7 + .../visual-tests/simple-05/division.svg | 7 + .../visual-tests/simple-05/exclusion.svg | 7 + .../visual-tests/simple-05/fracture.svg | 7 + .../visual-tests/simple-05/intersection.svg | 7 + .../visual-tests/simple-05/original.svg | 17 + .../visual-tests/simple-05/union.svg | 7 + .../visual-tests/simple-06/difference.svg | 7 + .../visual-tests/simple-06/division.svg | 7 + .../visual-tests/simple-06/exclusion.svg | 7 + .../visual-tests/simple-06/fracture.svg | 7 + .../visual-tests/simple-06/intersection.svg | 7 + .../visual-tests/simple-06/original.svg | 17 + .../visual-tests/simple-06/union.svg | 7 + .../visual-tests/simple-07/difference.svg | 7 + .../visual-tests/simple-07/division.svg | 7 + .../visual-tests/simple-07/exclusion.svg | 7 + .../visual-tests/simple-07/fracture.svg | 7 + .../visual-tests/simple-07/intersection.svg | 7 + .../visual-tests/simple-07/original.svg | 16 + .../visual-tests/simple-07/union.svg | 7 + .../visual-tests/simple-08/difference.svg | 7 + .../visual-tests/simple-08/division.svg | 7 + .../visual-tests/simple-08/exclusion.svg | 7 + .../visual-tests/simple-08/fracture.svg | 7 + .../visual-tests/simple-08/intersection.svg | 7 + .../visual-tests/simple-08/original.svg | 16 + .../visual-tests/simple-08/union.svg | 7 + .../__fixtures__/visual-tests/template.svg | 41 + libraries/path-bool/benches/painted_dreams.rs | 15 + .../benches/path_segment_intersection.rs | 29 + libraries/path-bool/flake.nix | 48 + libraries/path-bool/shell.nix | 81 + libraries/path-bool/src/lib.rs | 261 +++ .../path-bool/src/parsing/path_command.rs | 124 ++ libraries/path-bool/src/parsing/path_data.rs | 166 ++ libraries/path-bool/src/path.rs | 138 ++ .../src/path/intersection_path_segment.rs | 298 +++ libraries/path-bool/src/path/line_segment.rs | 33 + .../path-bool/src/path/line_segment_aabb.rs | 89 + .../path_cubic_segment_self_intersection.rs | 39 + libraries/path-bool/src/path/path_segment.rs | 720 +++++++ libraries/path-bool/src/path_boolean.rs | 1858 +++++++++++++++++ libraries/path-bool/src/util/aabb.rs | 64 + libraries/path-bool/src/util/epsilons.rs | 6 + libraries/path-bool/src/util/math.rs | 23 + libraries/path-bool/src/util/quad_tree.rs | 121 ++ libraries/path-bool/src/visual_tests.rs | 183 ++ node-graph/graph-craft/src/document.rs | 1 - node-graph/gstd/Cargo.toml | 1 + node-graph/gstd/src/vector.rs | 161 +- .../interpreted-executor/src/node_registry.rs | 1 - 165 files changed, 5990 insertions(+), 78 deletions(-) create mode 100644 libraries/path-bool/.gitignore create mode 100644 libraries/path-bool/Cargo.toml create mode 100644 libraries/path-bool/LICENSE-APACHE create mode 100644 libraries/path-bool/LICENSE-MIT create mode 100644 libraries/path-bool/NOTICE create mode 100644 libraries/path-bool/README.md create mode 100644 libraries/path-bool/__fixtures__/visual-tests/dangling-01/difference.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/dangling-01/division.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/dangling-01/exclusion.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/dangling-01/fracture.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/dangling-01/intersection.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/dangling-01/original.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/dangling-01/union.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/dangling-02/difference.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/dangling-02/division.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/dangling-02/exclusion.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/dangling-02/fracture.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/dangling-02/intersection.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/dangling-02/original.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/dangling-02/union.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/dangling-03/difference.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/dangling-03/division.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/dangling-03/exclusion.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/dangling-03/fracture.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/dangling-03/intersection.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/dangling-03/original.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/dangling-03/union.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/dangling-04/difference.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/dangling-04/division.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/dangling-04/exclusion.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/dangling-04/fracture.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/dangling-04/intersection.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/dangling-04/original.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/dangling-04/union.svg create mode 100755 libraries/path-bool/__fixtures__/visual-tests/establish-ground-truth.sh create mode 100755 libraries/path-bool/__fixtures__/visual-tests/generate-ground-truth.sh create mode 100644 libraries/path-bool/__fixtures__/visual-tests/nesting-01/difference.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/nesting-01/division.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/nesting-01/exclusion.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/nesting-01/fracture.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/nesting-01/intersection.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/nesting-01/original.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/nesting-01/union.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/nesting-02/difference.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/nesting-02/division.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/nesting-02/exclusion.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/nesting-02/fracture.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/nesting-02/intersection.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/nesting-02/original.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/nesting-02/union.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/nesting-03/difference.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/nesting-03/division.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/nesting-03/exclusion.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/nesting-03/fracture.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/nesting-03/intersection.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/nesting-03/original.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/nesting-03/union.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/nesting-04/difference.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/nesting-04/division.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/nesting-04/exclusion.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/nesting-04/fracture.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/nesting-04/intersection.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/nesting-04/original.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/nesting-04/union.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/real-01/difference.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/real-01/division.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/real-01/exclusion.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/real-01/fracture.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/real-01/intersection.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/real-01/original.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/real-01/union.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/real-02/difference.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/real-02/division.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/real-02/exclusion.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/real-02/fracture.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/real-02/intersection.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/real-02/original.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/real-02/union.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/simple-01/difference.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/simple-01/division.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/simple-01/exclusion.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/simple-01/fracture.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/simple-01/intersection.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/simple-01/original.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/simple-01/union.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/simple-02/difference.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/simple-02/division.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/simple-02/exclusion.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/simple-02/fracture.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/simple-02/intersection.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/simple-02/original.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/simple-02/union.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/simple-03/difference.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/simple-03/division.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/simple-03/exclusion.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/simple-03/fracture.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/simple-03/intersection.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/simple-03/original.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/simple-03/union.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/simple-04/difference.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/simple-04/division.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/simple-04/exclusion.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/simple-04/fracture.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/simple-04/intersection.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/simple-04/original.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/simple-04/union.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/simple-05/difference.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/simple-05/division.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/simple-05/exclusion.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/simple-05/fracture.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/simple-05/intersection.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/simple-05/original.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/simple-05/union.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/simple-06/difference.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/simple-06/division.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/simple-06/exclusion.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/simple-06/fracture.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/simple-06/intersection.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/simple-06/original.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/simple-06/union.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/simple-07/difference.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/simple-07/division.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/simple-07/exclusion.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/simple-07/fracture.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/simple-07/intersection.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/simple-07/original.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/simple-07/union.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/simple-08/difference.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/simple-08/division.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/simple-08/exclusion.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/simple-08/fracture.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/simple-08/intersection.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/simple-08/original.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/simple-08/union.svg create mode 100644 libraries/path-bool/__fixtures__/visual-tests/template.svg create mode 100644 libraries/path-bool/benches/painted_dreams.rs create mode 100644 libraries/path-bool/benches/path_segment_intersection.rs create mode 100644 libraries/path-bool/flake.nix create mode 100644 libraries/path-bool/shell.nix create mode 100644 libraries/path-bool/src/lib.rs create mode 100644 libraries/path-bool/src/parsing/path_command.rs create mode 100644 libraries/path-bool/src/parsing/path_data.rs create mode 100644 libraries/path-bool/src/path.rs create mode 100644 libraries/path-bool/src/path/intersection_path_segment.rs create mode 100644 libraries/path-bool/src/path/line_segment.rs create mode 100644 libraries/path-bool/src/path/line_segment_aabb.rs create mode 100644 libraries/path-bool/src/path/path_cubic_segment_self_intersection.rs create mode 100644 libraries/path-bool/src/path/path_segment.rs create mode 100644 libraries/path-bool/src/path_boolean.rs create mode 100644 libraries/path-bool/src/util/aabb.rs create mode 100644 libraries/path-bool/src/util/epsilons.rs create mode 100644 libraries/path-bool/src/util/math.rs create mode 100644 libraries/path-bool/src/util/quad_tree.rs create mode 100644 libraries/path-bool/src/visual_tests.rs diff --git a/Cargo.lock b/Cargo.lock index 30ddb44b..6b8d50de 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -563,6 +563,12 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d2c54ff287cfc0a34f38a6b832ea1bd8e448a330b3e40a50859e6488bee07f22" +[[package]] +name = "bit_field" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc827186963e592360843fb5ba4b973e145841266c1357f7180c43526f2e5b61" + [[package]] name = "bitflags" version = "1.3.2" @@ -1645,6 +1651,22 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "exr" +version = "1.72.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "887d93f60543e9a9362ef8a21beedd0a833c5d9610e18c67abe15a5963dcb1a4" +dependencies = [ + "bit_field", + "flume", + "half", + "lebe", + "miniz_oxide 0.7.4", + "rayon-core", + "smallvec", + "zune-inflate", +] + [[package]] name = "fastnoise-lite" version = "1.1.1" @@ -1732,6 +1754,15 @@ dependencies = [ "bitflags 1.3.2", ] +[[package]] +name = "flume" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55ac459de2512911e4b674ce33cf20befaba382d05b62b008afc1c8b57cbf181" +dependencies = [ + "spin", +] + [[package]] name = "fnv" version = "1.0.7" @@ -2453,6 +2484,7 @@ dependencies = [ "js-sys", "log", "node-macro", + "path-bool", "rand 0.8.5", "rand_chacha 0.3.1", "reqwest 0.12.7", @@ -3085,7 +3117,13 @@ dependencies = [ "bytemuck", "byteorder", "color_quant", + "exr", + "gif", + "jpeg-decoder", "num-traits", + "png", + "qoi", + "tiff", ] [[package]] @@ -3312,6 +3350,9 @@ name = "jpeg-decoder" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f5d4a7da358eff58addd2877a45865158f0d78c911d43a5784ceb7bbf52833b0" +dependencies = [ + "rayon", +] [[package]] name = "js-sys" @@ -3392,6 +3433,12 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" +[[package]] +name = "lebe" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8" + [[package]] name = "libc" version = "0.2.158" @@ -4269,6 +4316,20 @@ version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" +[[package]] +name = "path-bool" +version = "0.1.0" +dependencies = [ + "criterion", + "glam", + "glob", + "image 0.24.9", + "regex", + "resvg", + "slotmap", + "svg", +] + [[package]] name = "pathdiff" version = "0.2.1" @@ -4650,6 +4711,15 @@ version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43d84d1d7a6ac92673717f9f6d1518374ef257669c24ebc5ac25d5033828be58" +[[package]] +name = "qoi" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f6d64c71eb498fe9eae14ce4ec935c555749aef511cca85b5568910d6e48001" +dependencies = [ + "bytemuck", +] + [[package]] name = "quick-xml" version = "0.31.0" @@ -5844,6 +5914,12 @@ version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" +[[package]] +name = "svg" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02d815ad337e8449d2374d4248448645edfe74e699343dd5719139d93fa87112" + [[package]] name = "svg_fmt" version = "0.4.3" @@ -8274,6 +8350,15 @@ version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f423a2c17029964870cfaabb1f13dfab7d092a62a29a89264f4d36990ca414a" +[[package]] +name = "zune-inflate" +version = "0.2.54" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73ab332fe2f6680068f3582b16a24f90ad7096d5d39b974d1c0aff0125116f02" +dependencies = [ + "simd-adler32", +] + [[package]] name = "zune-jpeg" version = "0.4.13" diff --git a/Cargo.toml b/Cargo.toml index c377646f..1ca3a9bc 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,6 +16,7 @@ members = [ "node-graph/gpu-executor", "node-graph/gpu-compiler/gpu-compiler-bin-wrapper", "libraries/dyn-any", + "libraries/path-bool", "libraries/bezier-rs", "libraries/raw-rs", "libraries/raw-rs/tag-derive", @@ -32,6 +33,7 @@ graphene-core = { path = "node-graph/gcore" } graph-craft = { path = "node-graph/graph-craft", features = ["serde"] } wgpu-executor = { path = "node-graph/wgpu-executor" } bezier-rs = { path = "libraries/bezier-rs", features = ["dyn-any"] } +path-bool = { path = "libraries/path-bool", features = ["parsing"] } node-macro = { path = "node-graph/node-macro" } # Workspace dependencies diff --git a/demo-artwork/painted-dreams.graphite b/demo-artwork/painted-dreams.graphite index bc8896fc..d225444f 100644 --- a/demo-artwork/painted-dreams.graphite +++ b/demo-artwork/painted-dreams.graphite @@ -1 +1 @@ -{"network_interface":{"network":{"exports":[{"Node":{"node_id":392274448837115448,"output_index":0,"lambda":false}}],"nodes":[[13353438235848911576,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"transform":[1.0,0.0,0.0,1.0,0.0,0.0],"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"line_cap":"Butt","line_join":"Miter","line_join_miter_limit":4.0,"transform":[1.0,0.0,0.0,1.0,0.0,0.0]},"fill":"None"},"alpha_blending":{"opacity":1.0,"blend_mode":"Normal"},"colinear_manipulators":[],"point_domain":{"id":[],"positions":[]},"segment_domain":{"ids":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"ids":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[6379137305818664393,18442321214082298093,18118267825025549699,6351696498298648253,17863574903157697896,4691860614575868200,301778328144628917,10625296323957562985,533731991408535384,13357220652574593654,15992617814592812350],"remove":[],"delta":[[4691860614575868200,[528.2962962962963,283.8518518518518]],[18118267825025549699,[642.0740740740741,0.0]],[17863574903157697896,[606.8148151308641,95.19407372365433]],[6379137305818664393,[625.4814814814813,0.0]],[18442321214082298093,[565.6296296296297,122.96296296296298]],[15992617814592812350,[621.0370370370368,0.0]],[533731991408535384,[501.6296296296296,175.40740740740742]],[301778328144628917,[493.5149940383244,200.29629629629628]],[13357220652574593654,[574.2222222222222,108.44444444444449]],[6351696498298648253,[646.8148148148149,0.0]],[10625296323957562985,[473.4814814814815,272.5925925925926]]]},"segments":{"add":[13662059715350867364,3384102572540409881,12035095010819582754,10146665273368938971,318560030360358929,8462655819889292900,3303411878775644985,8661113083384527971,2035327810332855521,11346538709718766144,3710133387837274291],"remove":[],"start_point":[[3384102572540409881,18442321214082298093],[2035327810332855521,533731991408535384],[8661113083384527971,10625296323957562985],[3710133387837274291,15992617814592812350],[318560030360358929,17863574903157697896],[11346538709718766144,13357220652574593654],[10146665273368938971,6351696498298648253],[3303411878775644985,301778328144628917],[13662059715350867364,6379137305818664393],[12035095010819582754,18118267825025549699],[8462655819889292900,4691860614575868200]],"end_point":[[8462655819889292900,301778328144628917],[3303411878775644985,10625296323957562985],[3710133387837274291,6379137305818664393],[12035095010819582754,6351696498298648253],[10146665273368938971,17863574903157697896],[318560030360358929,4691860614575868200],[2035327810332855521,13357220652574593654],[11346538709718766144,15992617814592812350],[13662059715350867364,18442321214082298093],[3384102572540409881,18118267825025549699],[8661113083384527971,533731991408535384]],"handle_primary":[[8462655819889292900,[0.0,0.0]],[3303411878775644985,[0.0,0.0]],[13662059715350867364,[0.0,0.0]],[12035095010819582754,[0.0,0.0]],[2035327810332855521,[42.96296296296293,-41.7777777777778]],[3384102572540409881,[0.0,0.0]],[318560030360358929,[-46.95465552079859,46.40007297527743]],[8661113083384527971,[0.2962962962963047,0.2962962962963047]],[11346538709718766144,[9.925839724176626,-9.951533978271286]],[3710133387837274291,[0.0,0.0]],[10146665273368938971,[0.0,0.0]]],"handle_end":[[3303411878775644985,[-6.2222222222222285,-40.59259259259261]],[8661113083384527971,[-42.34888386913234,41.180638796880466]],[13662059715350867364,[68.68148181185177,-54.8859262904691]],[12035095010819582754,[0.0,0.0]],[10146665273368938971,[48.16592595101224,-47.597037061827145]],[3710133387837274291,[0.0,0.0]],[318560030360358929,[-97.48148148148152,-81.18518518518522]],[8462655819889292900,[-21.74426522093495,47.99999999999997]],[2035327810332855521,[-8.299214014278164,8.32069754812484]],[3384102572540409881,[0.5807410754567854,77.36888852918523]],[11346538709718766144,[1.1377781018271662,63.71555518874077]]],"stroke":[[10146665273368938971,0],[12035095010819582754,0],[318560030360358929,0],[8661113083384527971,0],[3710133387837274291,0],[13662059715350867364,0],[8462655819889292900,0],[11346538709718766144,0],[2035327810332855521,0],[3303411878775644985,0],[3384102572540409881,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"Primary","segment":11346538709718766144},{"ty":"End","segment":2035327810332855521}],[{"ty":"End","segment":8661113083384527971},{"ty":"Primary","segment":2035327810332855521}],[{"ty":"End","segment":10146665273368938971},{"ty":"Primary","segment":318560030360358929}],[{"ty":"End","segment":12035095010819582754},{"ty":"Primary","segment":10146665273368938971}]],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null,"size":464,"align":8}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16671141883125519098,{"inputs":[{"Node":{"node_id":16306737306999003555,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.92156863,"green":0.6039216,"blue":0.18039216,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[6445954214067437701,{"inputs":[{"Node":{"node_id":13670206802546093234,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"BooleanOperation":"SubtractFront"},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null,"size":104,"align":8}},"import_index":1}}],"manual_composition":null,"implementation":{"ProtoNode":{"name":"graphene_std::vector::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::ImpureMemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[140396870212231820,{"inputs":[{"Node":{"node_id":18095952297474762348,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null,"size":104,"align":8}},"import_index":1}}],"manual_composition":null,"implementation":{"ProtoNode":{"name":"graphene_std::vector::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::ImpureMemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[5449860184735415958,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"transform":[1.0,0.0,0.0,1.0,0.0,0.0],"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"line_cap":"Butt","line_join":"Miter","line_join_miter_limit":4.0,"transform":[1.0,0.0,0.0,1.0,0.0,0.0]},"fill":"None"},"alpha_blending":{"opacity":1.0,"blend_mode":"Normal"},"colinear_manipulators":[],"point_domain":{"id":[],"positions":[]},"segment_domain":{"ids":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"ids":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[17520941196305861319,6029995238423674441,16590926169549948521,12817219955590128894,4723170318056755559,12317789037775437786,17339925811006567497,4659274885664969740,1541401134848201833,17321098837874422287,11084016020553554647,9729762716079513741,13279221198527484331,7727030009292816503,15701538241214188894],"remove":[],"delta":[[16590926169549948521,[869.0,147.0]],[17321098837874422287,[802.6666666666667,656.4444444444445]],[11084016020553554647,[655.0,636.0]],[12817219955590128894,[933.0,273.0]],[15701538241214188894,[0.0,0.0]],[6029995238423674441,[898.0,46.0]],[9729762716079513741,[585.0,666.0]],[4659274885664969740,[896.0,523.0]],[12317789037775437786,[902.0,394.0]],[17520941196305861319,[889.0,0.0]],[17339925811006567497,[898.0,468.0]],[13279221198527484331,[564.0,768.0]],[4723170318056755559,[923.0,349.0]],[1541401134848201833,[886.0,572.0]],[7727030009292816503,[0.0,768.0]]]},"segments":{"add":[862900208337901235,4806484166818510930,11569179934425192262,9808624553037921371,9730229894941201870,1248401493076165062,8832757535144158913,15056691877609602335,8919277736361106420,16631919016540861133,9314952320711038398,10137845066833192587,14740183693208469558,3307452201570141575,3876401232874291775],"remove":[],"start_point":[[4806484166818510930,6029995238423674441],[3307452201570141575,7727030009292816503],[1248401493076165062,12317789037775437786],[9808624553037921371,12817219955590128894],[10137845066833192587,9729762716079513741],[3876401232874291775,15701538241214188894],[11569179934425192262,16590926169549948521],[15056691877609602335,4659274885664969740],[9730229894941201870,4723170318056755559],[16631919016540861133,17321098837874422287],[9314952320711038398,11084016020553554647],[862900208337901235,17520941196305861319],[14740183693208469558,13279221198527484331],[8919277736361106420,1541401134848201833],[8832757535144158913,17339925811006567497]],"end_point":[[862900208337901235,6029995238423674441],[9808624553037921371,4723170318056755559],[11569179934425192262,12817219955590128894],[8832757535144158913,4659274885664969740],[3307452201570141575,15701538241214188894],[9730229894941201870,12317789037775437786],[14740183693208469558,7727030009292816503],[8919277736361106420,17321098837874422287],[15056691877609602335,1541401134848201833],[10137845066833192587,13279221198527484331],[4806484166818510930,16590926169549948521],[9314952320711038398,9729762716079513741],[3876401232874291775,17520941196305861319],[16631919016540861133,11084016020553554647],[1248401493076165062,17339925811006567497]],"handle_primary":[[9730229894941201870,[-24.00371914417652,11.366922485048674]],[9314952320711038398,[-34.0,-7.0]],[3876401232874291775,[0.0,0.0]],[8919277736361106420,[10.458809984597837,40.44073194044492]],[14740183693208469558,[0.0,0.0]],[4806484166818510930,[11.595886737767424,32.210796493798]],[11569179934425192262,[-4.0,51.0]],[9808624553037921371,[18.0,36.0]],[862900208337901235,[0.0,0.0]],[3307452201570141575,[0.0,0.0]],[16631919016540861133,[-63.996421719362885,-1.2074796550824587]],[1248401493076165062,[21.0,27.0]],[10137845066833192587,[-19.0,43.0]],[15056691877609602335,[0.0,0.0]],[8832757535144158913,[14.888888888888914,4.8888888888888005]]],"handle_end":[[862900208337901235,[-9.000000000000114,-25.0]],[14740183693208469558,[0.0,0.0]],[9808624553037921371,[28.703703703703695,-13.592592592592496]],[9314952320711038398,[19.0,-43.0]],[10137845066833192587,[0.0,0.0]],[16631919016540861133,[34.0,7.0]],[8919277736361106420,[70.66666666666652,1.333333333333485]],[4806484166818510930,[3.365858386031487,-42.91469442190146]],[9730229894941201870,[-21.0,-27.0]],[15056691877609602335,[-10.0,-38.66666666666663]],[11569179934425192262,[-18.0,-36.0]],[8832757535144158913,[33.33333333333326,-9.666666666666742]],[1248401493076165062,[30.59259259259261,-36.59259259259255]],[3307452201570141575,[0.0,0.0]],[3876401232874291775,[0.0,0.0]]],"stroke":[[16631919016540861133,0],[4806484166818510930,0],[862900208337901235,0],[9730229894941201870,0],[3307452201570141575,0],[9314952320711038398,0],[1248401493076165062,0],[9808624553037921371,0],[11569179934425192262,0],[3876401232874291775,0],[10137845066833192587,0],[8919277736361106420,0],[15056691877609602335,0],[8832757535144158913,0],[14740183693208469558,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":10137845066833192587},{"ty":"Primary","segment":14740183693208469558}],[{"ty":"End","segment":14740183693208469558},{"ty":"Primary","segment":3307452201570141575}],[{"ty":"End","segment":11569179934425192262},{"ty":"Primary","segment":9808624553037921371}],[{"ty":"End","segment":16631919016540861133},{"ty":"Primary","segment":9314952320711038398}],[{"ty":"End","segment":9808624553037921371},{"ty":"Primary","segment":9730229894941201870}],[{"ty":"End","segment":4806484166818510930},{"ty":"Primary","segment":11569179934425192262}],[{"ty":"End","segment":15056691877609602335},{"ty":"Primary","segment":8919277736361106420}],[{"ty":"End","segment":9730229894941201870},{"ty":"Primary","segment":1248401493076165062}],[{"ty":"End","segment":862900208337901235},{"ty":"Primary","segment":4806484166818510930}],[{"ty":"End","segment":3307452201570141575},{"ty":"Primary","segment":3876401232874291775}],[{"ty":"End","segment":8919277736361106420},{"ty":"Primary","segment":16631919016540861133}],[{"ty":"End","segment":9314952320711038398},{"ty":"Primary","segment":10137845066833192587}]],"remove_g1_continuous":[[{"ty":"Primary","segment":8832757535144158913},{"ty":"End","segment":1248401493076165062}]]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null,"size":464,"align":8}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12709602171929957216,{"inputs":[{"Node":{"node_id":17753909951719808506,"output_index":0,"lambda":false}},{"Node":{"node_id":12922148192688274227,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16609137733952262762,{"inputs":[{"Node":{"node_id":17397123104674848450,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.3137255,"green":0.44705883,"blue":0.45490196,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.3137255,"green":0.44705883,"blue":0.45490196,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[7855094781869605606,{"inputs":[{"Node":{"node_id":14141479077115894852,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"BooleanOperation":"SubtractBack"},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null,"size":104,"align":8}},"import_index":1}}],"manual_composition":null,"implementation":{"ProtoNode":{"name":"graphene_std::vector::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::ImpureMemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[8460565235419043665,{"inputs":[{"Node":{"node_id":990192925663920333,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[0.0,412.1]},"exposed":false}},{"Value":{"tagged_value":{"F64":27.2},"exposed":false}},{"Value":{"tagged_value":{"U32":8},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::RepeatNode"}},"visible":true,"skip_deduplication":false}],[6194305264313730032,{"inputs":[{"Node":{"node_id":4560146526699152877,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null,"size":104,"align":8}},"import_index":1}}],"manual_composition":null,"implementation":{"ProtoNode":{"name":"graphene_std::vector::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::ImpureMemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14950060858756810933,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"transform":[1.0,0.0,0.0,1.0,0.0,0.0],"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"line_cap":"Butt","line_join":"Miter","line_join_miter_limit":4.0,"transform":[1.0,0.0,0.0,1.0,0.0,0.0]},"fill":"None"},"alpha_blending":{"opacity":1.0,"blend_mode":"Normal"},"colinear_manipulators":[],"point_domain":{"id":[],"positions":[]},"segment_domain":{"ids":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"ids":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[9346093213164033195,3249248431686392864,9577388580635291078],"remove":[],"delta":[[9346093213164033195,[1211.0,0.0]],[3249248431686392864,[1536.0,95.0]],[9577388580635291078,[1536.0,0.0]]]},"segments":{"add":[9585086796709645600,13980191878100735848,1147165232046305110],"remove":[],"start_point":[[1147165232046305110,9577388580635291078],[9585086796709645600,9346093213164033195],[13980191878100735848,3249248431686392864]],"end_point":[[1147165232046305110,9346093213164033195],[9585086796709645600,3249248431686392864],[13980191878100735848,9577388580635291078]],"handle_primary":[[9585086796709645600,[0.0,0.0]],[13980191878100735848,[4.547473508864641e-13,2.8421709430404014e-14]],[1147165232046305110,[0.0,0.0]]],"handle_end":[[1147165232046305110,[0.0,0.0]],[9585086796709645600,[-281.0,-17.00000000000003]],[13980191878100735848,[0.0,0.0]]],"stroke":[[1147165232046305110,0],[9585086796709645600,0],[13980191878100735848,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":13980191878100735848},{"ty":"Primary","segment":1147165232046305110}]],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null,"size":464,"align":8}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14698962747138962125,{"inputs":[{"Node":{"node_id":17562801632450633291,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null,"size":104,"align":8}},"import_index":1}}],"manual_composition":null,"implementation":{"ProtoNode":{"name":"graphene_std::vector::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::ImpureMemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[18031616785650843168,{"inputs":[{"Node":{"node_id":17952673493105230490,"output_index":0,"lambda":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SolidifyStrokeNode"}},"visible":true,"skip_deduplication":false}],[11196821089257149774,{"inputs":[{"Node":{"node_id":5888633415105234509,"output_index":0,"lambda":false}},{"Node":{"node_id":18031616785650843168,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[8359580532088731394,{"inputs":[{"Node":{"node_id":6726954210929537972,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[8269257328703012432,{"inputs":[{"Node":{"node_id":4102754869474520966,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.92156863,"green":0.6039216,"blue":0.18039216,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.92156863,"green":0.6039216,"blue":0.18039216,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[13203761224559198689,{"inputs":[{"Node":{"node_id":4809200889774783438,"output_index":0,"lambda":false}},{"Node":{"node_id":14690269209726153565,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13670206802546093234,{"inputs":[{"Node":{"node_id":17285637344898461972,"output_index":0,"lambda":false}},{"Node":{"node_id":7855094781869605606,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7201841978411396053,{"inputs":[{"Node":{"node_id":4328376070224119511,"output_index":0,"lambda":false}},{"Node":{"node_id":17735408893002232096,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[18087203100637857224,{"inputs":[{"Node":{"node_id":1009114585722052052,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[8024056141472336300,615797591512564389],"remove":[],"delta":[[8024056141472336300,[1199.703703703704,-13.037037037037038]],[615797591512564389,[1392.8888888888887,-13.037037037037038]]]},"segments":{"add":[8102915503612902542,3691917426521533819,5443069106382978903],"remove":[15219710962280166713,2],"start_point":[[8102915503612902542,2],[3691917426521533819,8024056141472336300],[5443069106382978903,615797591512564389]],"end_point":[[5443069106382978903,3],[3691917426521533819,615797591512564389],[8102915503612902542,8024056141472336300]],"handle_primary":[[3691917426521533819,null],[8102915503612902542,null],[5443069106382978903,null]],"handle_end":[[5443069106382978903,null],[8102915503612902542,null],[3691917426521533819,null]],"stroke":[[5443069106382978903,0],[8102915503612902542,0],[3691917426521533819,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null,"size":464,"align":8}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11429506195623419966,{"inputs":[{"Node":{"node_id":11301831865756336526,"output_index":0,"lambda":false}},{"Node":{"node_id":5449860184735415958,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12185047359007423618,{"inputs":[{"Node":{"node_id":12004065064978143915,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.3137255,"green":0.44705883,"blue":0.45490196,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.92156863,"green":0.6039216,"blue":0.18039216,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[7018444885869143173,{"inputs":[{"Node":{"node_id":12234961922142600898,"output_index":0,"lambda":false}},{"Node":{"node_id":8426490990601560741,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1001728975241745659,{"inputs":[{"Node":{"node_id":12770183061753030023,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null,"size":104,"align":8}},"import_index":1}}],"manual_composition":null,"implementation":{"ProtoNode":{"name":"graphene_std::vector::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::ImpureMemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[392274448837115448,{"inputs":[{"Value":{"tagged_value":{"ArtboardGroup":{"artboards":[]}},"exposed":true}},{"Node":{"node_id":6787585796949551500,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"IVec2":[0,0]},"exposed":false}},{"Value":{"tagged_value":{"IVec2":[1536,768]},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.93333334,"green":0.8627451,"blue":0.7254902,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null,"size":488,"align":8}},"import_index":1}},{"Value":{"tagged_value":{"String":""},"exposed":false}},{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null,"size":488,"align":8}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null,"size":488,"align":8}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null,"size":488,"align":8}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null,"size":488,"align":8}},"import_index":5}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToArtboardNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Network":{"import_type":{"Fn":[{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},{"Concrete":{"name":"graphene_core::graphic_element::ArtboardGroup","alias":null,"size":12,"align":4}}]},"import_index":0}},{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::AppendArtboardNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17562801632450633291,{"inputs":[{"Node":{"node_id":10286817149456341619,"output_index":0,"lambda":false}},{"Node":{"node_id":5449860184735415958,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3750439930725791025,{"inputs":[{"Node":{"node_id":12276520439585231336,"output_index":0,"lambda":false}},{"Node":{"node_id":14228923746783465609,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[682567808439406093,{"inputs":[{"Node":{"node_id":7755499790391969923,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[300.0,50.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":15},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::RepeatNode"}},"visible":true,"skip_deduplication":false}],[17740294143355019755,{"inputs":[{"Node":{"node_id":15301503532602557206,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[16759836951269190891,{"inputs":[{"Node":{"node_id":11429506195623419966,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null,"size":104,"align":8}},"import_index":1}}],"manual_composition":null,"implementation":{"ProtoNode":{"name":"graphene_std::vector::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::ImpureMemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17495267820524300686,{"inputs":[{"Node":{"node_id":3050731459444225191,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[1248.4973005620557,-153.1867628889006]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.2972951295167027},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0000000000000002,1.0000000000000002]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[5.5511151231257815e-17,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null,"size":16,"align":8}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null,"size":8,"align":8}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null,"size":16,"align":8}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null,"size":16,"align":8}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null,"size":16,"align":8}},"import_index":5}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::transform::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12234961922142600898,{"inputs":[{"Node":{"node_id":1627123781166851142,"output_index":0,"lambda":false}},{"Node":{"node_id":18351415092709164412,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11095670964487764044,{"inputs":[{"Node":{"node_id":17603523494627491590,"output_index":0,"lambda":false}},{"Node":{"node_id":8359580532088731394,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11301831865756336526,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"transform":[1.0,0.0,0.0,1.0,0.0,0.0],"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"line_cap":"Butt","line_join":"Miter","line_join_miter_limit":4.0,"transform":[1.0,0.0,0.0,1.0,0.0,0.0]},"fill":"None"},"alpha_blending":{"opacity":1.0,"blend_mode":"Normal"},"colinear_manipulators":[],"point_domain":{"id":[],"positions":[]},"segment_domain":{"ids":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"ids":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[3251241957527197760,11100418327549747778,8048619563638005414,1078998931754662073],"remove":[],"delta":[[8048619563638005414,[944.0577392578124,302.0703430175781]],[3251241957527197760,[875.8001811251517,185.6784024477276]],[11100418327549747778,[910.880658436214,243.0946502057613]],[1078998931754662073,[942.0246913580248,264.2962962962963]]]},"segments":{"add":[6165219920202055745,10795897848378052161,3439025775805007707,12551435438068218604],"remove":[],"start_point":[[12551435438068218604,1078998931754662073],[10795897848378052161,11100418327549747778],[3439025775805007707,8048619563638005414],[6165219920202055745,3251241957527197760]],"end_point":[[12551435438068218604,3251241957527197760],[3439025775805007707,1078998931754662073],[10795897848378052161,8048619563638005414],[6165219920202055745,11100418327549747778]],"handle_primary":[[3439025775805007707,[-2.629814161991817e-6,5.151861046215345e-6]],[10795897848378052161,[11.46027223334628,13.82427457744465]],[12551435438068218604,[-14.61728395061732,-27.456790123456813]],[6165219920202055745,[0.0,0.0]]],"handle_end":[[3439025775805007707,[14.61728395061732,27.456790123456813]],[10795897848378052161,[-4.732636377154108,-19.33783272951229]],[12551435438068218604,[23.33217876876199,5.204454965879364]],[6165219920202055745,[-29.36625514403283,-35.42386831275718]]],"stroke":[[3439025775805007707,0],[10795897848378052161,0],[12551435438068218604,0],[6165219920202055745,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":6165219920202055745},{"ty":"Primary","segment":10795897848378052161}],[{"ty":"End","segment":3439025775805007707},{"ty":"Primary","segment":12551435438068218604}]],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null,"size":464,"align":8}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[6468742191365679953,{"inputs":[{"Node":{"node_id":8887924609778270360,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[],"remove":[],"delta":[[3,[-0.1481481481481931,1.2345475561822152]]]},"segments":{"add":[],"remove":[],"start_point":[],"end_point":[],"handle_primary":[[2,[-27.982926733699912,20.685525022906972]],[3,[-80.59259259259258,83.55555555555577]]],"handle_end":[[3,[54.71604938271605,12.037037037036953]]],"stroke":[]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null,"size":464,"align":8}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":false,"skip_deduplication":false}],[15301503532602557206,{"inputs":[{"Node":{"node_id":6728362629909402903,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null,"size":104,"align":8}},"import_index":1}}],"manual_composition":null,"implementation":{"ProtoNode":{"name":"graphene_std::vector::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::ImpureMemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[6787585796949551500,{"inputs":[{"Node":{"node_id":11095670964487764044,"output_index":0,"lambda":false}},{"Node":{"node_id":16177422101884031678,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[18003287685830153881,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"transform":[1.0,0.0,0.0,1.0,0.0,0.0],"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"line_cap":"Butt","line_join":"Miter","line_join_miter_limit":4.0,"transform":[1.0,0.0,0.0,1.0,0.0,0.0]},"fill":"None"},"alpha_blending":{"opacity":1.0,"blend_mode":"Normal"},"colinear_manipulators":[],"point_domain":{"id":[],"positions":[]},"segment_domain":{"ids":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"ids":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[4475009837548700636,4481635366652149569,1608608093193158603,4765910415851982345],"remove":[1647009925892902058],"delta":[[1608608093193158603,[609.7777777777777,620.0]],[4475009837548700636,[525.7325506063205,282.1042056224195]],[4481635366652149569,[684.8888888888889,395.55555555555554]],[4765910415851982345,[283.33331298828125,354.6666564941406]]]},"segments":{"add":[3045825504718908919,8024777209266880257,3983292299330016176,11103925991989272298],"remove":[13489289770112164650],"start_point":[[8024777209266880257,4481635366652149569],[11103925991989272298,4765910415851982345],[3983292299330016176,1608608093193158603],[3045825504718908919,4475009837548700636]],"end_point":[[3045825504718908919,4481635366652149569],[8024777209266880257,1608608093193158603],[11103925991989272298,4475009837548700636],[3983292299330016176,4765910415851982345]],"handle_primary":[[8024777209266880257,[11.111111111111086,62.22222222222217]],[3045825504718908919,[62.22222222222217,43.111111111111086]],[11103925991989272298,[0.0,0.0]],[3983292299330016176,[0.0,0.0]]],"handle_end":[[8024777209266880257,[34.66666666666674,-85.33333333333337]],[11103925991989272298,[-113.5844024581724,39.08097956276566]],[3045825504718908919,[-11.111111111111086,-62.22222222222217]],[3983292299330016176,[0.0,0.0]]],"stroke":[[3045825504718908919,0],[8024777209266880257,0],[3983292299330016176,0],[11103925991989272298,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":3983292299330016176},{"ty":"Primary","segment":11103925991989272298}],[{"ty":"End","segment":3045825504718908919},{"ty":"Primary","segment":8024777209266880257}]],"remove_g1_continuous":[[{"ty":"End","segment":13489289770112164650},{"ty":"Primary","segment":3045825504718908919}],[{"ty":"End","segment":11103925991989272298},{"ty":"Primary","segment":3045825504718908919}]]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null,"size":464,"align":8}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12770183061753030023,{"inputs":[{"Node":{"node_id":17495267820524300686,"output_index":0,"lambda":false}},{"Node":{"node_id":1009114585722052052,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17299978721726771610,{"inputs":[{"Node":{"node_id":1809704172129195322,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[459.4,0.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":-8.6},"exposed":false}},{"Value":{"tagged_value":{"U32":5},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::RepeatNode"}},"visible":true,"skip_deduplication":false}],[9135110142507605216,{"inputs":[{"Node":{"node_id":11196821089257149774,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"BooleanOperation":"SubtractFront"},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null,"size":104,"align":8}},"import_index":1}}],"manual_composition":null,"implementation":{"ProtoNode":{"name":"graphene_std::vector::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::ImpureMemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7104261880154687267,{"inputs":[{"Node":{"node_id":2834866505092039323,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null,"size":104,"align":8}},"import_index":1}}],"manual_composition":null,"implementation":{"ProtoNode":{"name":"graphene_std::vector::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::ImpureMemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[18271512507682813443,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"transform":[1.0,0.0,0.0,1.0,0.0,0.0],"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"line_cap":"Butt","line_join":"Miter","line_join_miter_limit":4.0,"transform":[1.0,0.0,0.0,1.0,0.0,0.0]},"fill":"None"},"alpha_blending":{"opacity":1.0,"blend_mode":"Normal"},"colinear_manipulators":[],"point_domain":{"id":[],"positions":[]},"segment_domain":{"ids":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"ids":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[10872099980755217048,13049263474526562389,2409359561719399794,9175973472325454282,14263506369487797530,5496457317579994340,7125168137854779179,9658821733796680583,425878374398720476,5252668597335249558],"remove":[],"delta":[[5496457317579994340,[929.3607681755832,198.40877914951983]],[7125168137854779179,[912.2962962962964,205.6296296296296]],[5252668597335249558,[888.2516734908237,208.88931872324497]],[14263506369487797530,[886.5185185185185,178.66666666666669]],[13049263474526562389,[903.1111111111112,55.70370370370371]],[10872099980755217048,[889.0,0.0]],[2409359561719399794,[892.7407407407408,111.70370370370372]],[9658821733796680583,[920.5925925925926,208.0]],[9175973472325454282,[881.4814814814815,152.5925925925926]],[425878374398720476,[898.633744855967,207.99999999999997]]]},"segments":{"add":[16241193756011776206,13961346931609713434,6443321953815072406,13223251807271379465,6545223889678917273,9745298522639115232,8058164935346100149,9187894839116405225,5210886161307886529,11050813873332011119],"remove":[],"start_point":[[13961346931609713434,13049263474526562389],[11050813873332011119,5252668597335249558],[9187894839116405225,9658821733796680583],[13223251807271379465,9175973472325454282],[8058164935346100149,7125168137854779179],[6545223889678917273,14263506369487797530],[6443321953815072406,2409359561719399794],[5210886161307886529,425878374398720476],[16241193756011776206,10872099980755217048],[9745298522639115232,5496457317579994340]],"end_point":[[11050813873332011119,10872099980755217048],[8058164935346100149,9658821733796680583],[13961346931609713434,2409359561719399794],[16241193756011776206,13049263474526562389],[13223251807271379465,14263506369487797530],[9187894839116405225,425878374398720476],[6545223889678917273,5496457317579994340],[6443321953815072406,9175973472325454282],[5210886161307886529,5252668597335249558],[9745298522639115232,7125168137854779179]],"handle_primary":[[9745298522639115232,[0.0,0.0]],[11050813873332011119,[-5.947146741852521,-2.1403475298293415]],[13223251807271379465,[3.2812071330587287,8.329218106995853]],[13961346931609713434,[6.522611384544012,17.67970980547415]],[6545223889678917273,[0.0,0.0]],[9187894839116405225,[-8.263374485596842,1.880201188843188]],[8058164935346100149,[0.0,0.0]],[16241193756011776206,[0.0,0.0]],[6443321953815072406,[-9.144953020396894,24.145964868041293]],[5210886161307886529,[-1.1368683772161605e-13,-2.8421709430404014e-14]]],"handle_end":[[11050813873332011119,[-86.26684502769479,250.37037037037035]],[9187894839116405225,[4.974851394604343,2.0557841792410443]],[13961346931609713434,[10.984910836762538,-29.00411522633746]],[16241193756011776206,[-7.506172839506348,-20.345679012345684]],[9745298522639115232,[7.703703703703695,-2.074074074074076]],[8058164935346100149,[-5.925925925925867,-2.370370370370381]],[5210886161307886529,[5.947146741852521,2.1403475298293415]],[13223251807271379465,[0.7901234567900701,-9.492455418381354]],[6545223889678917273,[-25.3424782807499,-1.3461362597164737]],[6443321953815072406,[-3.3276401397055917,-8.447086508484054]]],"stroke":[[5210886161307886529,0],[11050813873332011119,0],[13223251807271379465,0],[16241193756011776206,0],[6545223889678917273,0],[9187894839116405225,0],[13961346931609713434,0],[8058164935346100149,0],[6443321953815072406,0],[9745298522639115232,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":5210886161307886529},{"ty":"Primary","segment":11050813873332011119}],[{"ty":"End","segment":16241193756011776206},{"ty":"Primary","segment":13961346931609713434}],[{"ty":"End","segment":6443321953815072406},{"ty":"Primary","segment":13223251807271379465}],[{"ty":"End","segment":13961346931609713434},{"ty":"Primary","segment":6443321953815072406}]],"remove_g1_continuous":[[{"ty":"Primary","segment":9187894839116405225},{"ty":"End","segment":8058164935346100149}]]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null,"size":464,"align":8}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[8511737864852441844,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"()","alias":null,"size":0,"align":1}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::generator_nodes::CircleNode"}},"visible":true,"skip_deduplication":false}],[10286817149456341619,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"transform":[1.0,0.0,0.0,1.0,0.0,0.0],"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"line_cap":"Butt","line_join":"Miter","line_join_miter_limit":4.0,"transform":[1.0,0.0,0.0,1.0,0.0,0.0]},"fill":"None"},"alpha_blending":{"opacity":1.0,"blend_mode":"Normal"},"colinear_manipulators":[],"point_domain":{"id":[],"positions":[]},"segment_domain":{"ids":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"ids":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[10786213048155734586,12599396287665855262,6164201091766276213,6781153531246981076,15695128662656633322,8241402276734357681,10333377922713208038,3749627916562964805,2535476870476707501],"remove":[],"delta":[[15695128662656633322,[825.6790123456792,509.4320987654323]],[10786213048155734586,[917.7283950617284,502.91358024691374]],[2535476870476707501,[887.5061728395062,568.6913580246915]],[6781153531246981076,[872.6913580246915,513.7777777777779]],[10333377922713208038,[843.4567901234569,550.1234567901236]],[8241402276734357681,[853.3333333333336,529.1851851851854]],[6164201091766276213,[902.9135802469136,506.8641975308643]],[3749627916562964805,[866.172839506173,558.2222222222224]],[12599396287665855262,[902.5185185185188,498.56790123456807]]]},"segments":{"add":[15700595221504820396,6369399239389505343,17761347836385237495,3021925106447084698,14489254209548096966,3461110970422306113,14847678502054094837,14515109677644612103,264894972572137143],"remove":[],"start_point":[[6369399239389505343,12599396287665855262],[3461110970422306113,8241402276734357681],[264894972572137143,2535476870476707501],[17761347836385237495,6164201091766276213],[14847678502054094837,10333377922713208038],[15700595221504820396,10786213048155734586],[14489254209548096966,15695128662656633322],[14515109677644612103,3749627916562964805],[3021925106447084698,6781153531246981076]],"end_point":[[14489254209548096966,8241402276734357681],[15700595221504820396,12599396287665855262],[264894972572137143,10786213048155734586],[14515109677644612103,2535476870476707501],[3461110970422306113,10333377922713208038],[14847678502054094837,3749627916562964805],[6369399239389505343,6164201091766276213],[17761347836385237495,6781153531246981076],[3021925106447084698,15695128662656633322]],"handle_primary":[[17761347836385237495,[0.0,0.0]],[6369399239389505343,[-7.1111111111111995,-5.530864197530889]],[264894972572137143,[0.0,0.0]],[15700595221504820396,[0.0,0.0]],[14847678502054094837,[0.7901234567900701,2.765432098765473]],[14489254209548096966,[-0.3950434518873181,1.0617032941893854]],[3461110970422306113,[0.38915905346209456,1.493515242756871]],[3021925106447084698,[-16.59259259259261,2.370370370370324]],[14515109677644612103,[8.888888888888914,0.0]]],"handle_end":[[264894972572137143,[3.753086419753003,37.1358024691358]],[3461110970422306113,[-0.7901234567900701,-2.765432098765473]],[14515109677644612103,[0.0,0.0]],[14847678502054094837,[-8.888888888888914,0.0]],[14489254209548096966,[-0.5712718875797691,-2.192428171126153]],[3021925106447084698,[0.5488119028742631,-1.474965354794051]],[15700595221504820396,[7.1111111111111995,5.530864197530889]],[17761347836385237495,[16.59259259259261,-2.370370370370324]],[6369399239389505343,[0.0,0.0]]],"stroke":[[14847678502054094837,0],[264894972572137143,0],[3021925106447084698,0],[3461110970422306113,0],[6369399239389505343,0],[17761347836385237495,0],[14489254209548096966,0],[15700595221504820396,0],[14515109677644612103,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":15700595221504820396},{"ty":"Primary","segment":6369399239389505343}],[{"ty":"End","segment":6369399239389505343},{"ty":"Primary","segment":17761347836385237495}],[{"ty":"End","segment":3461110970422306113},{"ty":"Primary","segment":14847678502054094837}],[{"ty":"End","segment":14489254209548096966},{"ty":"Primary","segment":3461110970422306113}],[{"ty":"End","segment":14515109677644612103},{"ty":"Primary","segment":264894972572137143}],[{"ty":"End","segment":3021925106447084698},{"ty":"Primary","segment":14489254209548096966}],[{"ty":"End","segment":17761347836385237495},{"ty":"Primary","segment":3021925106447084698}],[{"ty":"End","segment":14847678502054094837},{"ty":"Primary","segment":14515109677644612103}]],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null,"size":464,"align":8}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[6726954210929537972,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"transform":[1.0,0.0,0.0,1.0,0.0,0.0],"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"line_cap":"Butt","line_join":"Miter","line_join_miter_limit":4.0,"transform":[1.0,0.0,0.0,1.0,0.0,0.0]},"fill":"None"},"alpha_blending":{"opacity":1.0,"blend_mode":"Normal"},"colinear_manipulators":[],"point_domain":{"id":[],"positions":[]},"segment_domain":{"ids":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"ids":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[177515045030371783,4609870404630548899,1458337690478625792,16230687409600568539,8055802412900565217,12390708657704154619,12909592102393222573,6873550371723398444,13416153271806375161,2492294980235986276,12448133448335459077,7624137673235413199],"remove":[],"delta":[[13416153271806375161,[531.8518518518517,131.2592592592593]],[12390708657704154619,[596.6748971193416,72.42798353909465]],[6873550371723398444,[538.6666666666667,136.0]],[4609870404630548899,[589.432098765432,64.79012345679011]],[8055802412900565217,[480.4444444444445,219.7777777777778]],[7624137673235413199,[617.8765432098766,2.465190328815662e-32]],[12448133448335459077,[610.3703703703706,2.4308653429145085e-63]],[177515045030371783,[604.2883706752018,0.0]],[1458337690478625792,[473.1851851851851,213.62962962962965]],[2492294980235986276,[604.4434936307387,42.970116997735616]],[12909592102393222573,[607.8024691358027,0.0]],[16230687409600568539,[491.55555555555554,311.55555555555566]]]},"segments":{"add":[12529947318087068663,5578827639764758986,1705877195608053135,2463526518527501592,9361245670457788924,921651403153242564,9825559201153691780,15749222431214672690,14294722277069184337,4341232355541306629,3818841110886669992],"remove":[5057709998225566481,16939098306153440303,11060716078587457450,17843645051722826880,17799038492181728804],"start_point":[[5578827639764758986,1458337690478625792],[921651403153242564,4609870404630548899],[1705877195608053135,16230687409600568539],[15749222431214672690,2492294980235986276],[9361245670457788924,6873550371723398444],[4341232355541306629,12390708657704154619],[14294722277069184337,12448133448335459077],[2463526518527501592,8055802412900565217],[9825559201153691780,13416153271806375161],[12529947318087068663,177515045030371783],[3818841110886669992,7624137673235413199]],"end_point":[[2463526518527501592,6873550371723398444],[3818841110886669992,12448133448335459077],[9361245670457788924,12390708657704154619],[12529947318087068663,4609870404630548899],[14294722277069184337,2492294980235986276],[9825559201153691780,1458337690478625792],[15749222431214672690,12909592102393222573],[1705877195608053135,8055802412900565217],[4341232355541306629,7624137673235413199],[921651403153242564,13416153271806375161],[5578827639764758986,16230687409600568539]],"handle_primary":[[1705877195608053135,[0.0,0.0]],[9361245670457788924,[22.844654233974516,-21.876660410500975]],[3818841110886669992,[0.0,0.0]],[9825559201153691780,[-30.00610951685011,28.39287782239575]],[14294722277069184337,[-0.2633744855968416,28.576131687242796]],[12529947318087068663,[0.0,0.0]],[4341232355541306629,[19.753086419753117,-26.73251028806584]],[5578827639764758986,[-19.25925925925924,60.44444444444443]],[2463526518527501592,[9.74414620103056,-24.528368023283747]],[921651403153242564,[-7.513106110924076,12.956274823940417]],[15749222431214672690,[3.877242131088792,-22.333682252383095]]],"handle_end":[[15749222431214672690,[0.0,0.0]],[921651403153242564,[27.555555555555657,-26.07407407407412]],[2463526518527501592,[-34.96296296296305,33.481481481481495]],[1705877195608053135,[-19.33333333333331,48.66666666666666]],[12529947318087068663,[12.90534979423876,-22.255144032921805]],[14294722277069184337,[0.0,0.0]],[5578827639764758986,[0.0,0.0]],[9361245670457788924,[-16.14969885498249,21.855925783742933]],[4341232355541306629,[0.0,0.0]],[3818841110886669992,[0.0,0.0]],[9825559201153691780,[6.194184133897295,-19.440208666385132]]],"stroke":[[1705877195608053135,0],[12529947318087068663,0],[14294722277069184337,0],[3818841110886669992,0],[2463526518527501592,0],[9825559201153691780,0],[15749222431214672690,0],[4341232355541306629,0],[9361245670457788924,0],[921651403153242564,0],[5578827639764758986,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":11060716078587457450},{"ty":"Primary","segment":5578827639764758986}],[{"ty":"End","segment":1705877195608053135},{"ty":"Primary","segment":2463526518527501592}],[{"ty":"Primary","segment":16939098306153440303},{"ty":"End","segment":9361245670457788924}],[{"ty":"End","segment":2463526518527501592},{"ty":"Primary","segment":9361245670457788924}],[{"ty":"End","segment":1705877195608053135},{"ty":"Primary","segment":17799038492181728804}],[{"ty":"End","segment":9361245670457788924},{"ty":"Primary","segment":5057709998225566481}],[{"ty":"End","segment":12529947318087068663},{"ty":"Primary","segment":921651403153242564}],[{"ty":"End","segment":9361245670457788924},{"ty":"Primary","segment":17843645051722826880}],[{"ty":"End","segment":921651403153242564},{"ty":"Primary","segment":9825559201153691780}],[{"ty":"End","segment":9361245670457788924},{"ty":"Primary","segment":4341232355541306629}],[{"ty":"End","segment":17799038492181728804},{"ty":"Primary","segment":16939098306153440303}],[{"ty":"End","segment":12529947318087068663},{"ty":"Primary","segment":11060716078587457450}],[{"ty":"Primary","segment":5578827639764758986},{"ty":"End","segment":9825559201153691780}],[{"ty":"End","segment":17843645051722826880},{"ty":"Primary","segment":15749222431214672690}]],"remove_g1_continuous":[[{"ty":"End","segment":5057709998225566481},{"ty":"Primary","segment":14294722277069184337}],[{"ty":"Primary","segment":15749222431214672690},{"ty":"End","segment":14294722277069184337}],[{"ty":"Primary","segment":14294722277069184337},{"ty":"End","segment":3818841110886669992}],[{"ty":"End","segment":4341232355541306629},{"ty":"Primary","segment":3818841110886669992}]]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null,"size":464,"align":8}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17603523494627491590,{"inputs":[{"Node":{"node_id":10995640810984321903,"output_index":0,"lambda":false}},{"Node":{"node_id":17740294143355019755,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4301099429811409147,{"inputs":[{"Node":{"node_id":8460565235419043665,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[81.3755165062,-154.9064700048801]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.4164633072520061},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.9999999999999998,0.9999999999999998]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null,"size":16,"align":8}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null,"size":8,"align":8}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null,"size":16,"align":8}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null,"size":16,"align":8}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null,"size":16,"align":8}},"import_index":5}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::transform::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3109716240255919254,{"inputs":[{"Node":{"node_id":5877930116725120460,"output_index":0,"lambda":false}},{"Node":{"node_id":18053728639616073084,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2723198387862533596,{"inputs":[{"Node":{"node_id":14030142873804552388,"output_index":0,"lambda":false}},{"Node":{"node_id":11201759760883367635,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[18351415092709164412,{"inputs":[{"Node":{"node_id":1009114585722052052,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.3137255,"green":0.44705883,"blue":0.45490196,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[6484183251661832039,{"inputs":[{"Node":{"node_id":11264395591110193456,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[474.2,0.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":-7.2},"exposed":false}},{"Value":{"tagged_value":{"U32":5},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::RepeatNode"}},"visible":true,"skip_deduplication":false}],[12922148192688274227,{"inputs":[{"Node":{"node_id":18188505856445531484,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null,"size":16,"align":8}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null,"size":8,"align":8}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null,"size":16,"align":8}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null,"size":16,"align":8}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null,"size":16,"align":8}},"import_index":5}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::transform::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7755499790391969923,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"()","alias":null,"size":0,"align":1}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::generator_nodes::CircleNode"}},"visible":true,"skip_deduplication":false}],[1508440849951861669,{"inputs":[{"Node":{"node_id":8566844905246185636,"output_index":0,"lambda":false}},{"Node":{"node_id":7480253252288032958,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[5856350938151339368,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"transform":[1.0,0.0,0.0,1.0,0.0,0.0],"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"line_cap":"Butt","line_join":"Miter","line_join_miter_limit":4.0,"transform":[1.0,0.0,0.0,1.0,0.0,0.0]},"fill":"None"},"alpha_blending":{"opacity":1.0,"blend_mode":"Normal"},"colinear_manipulators":[],"point_domain":{"id":[],"positions":[]},"segment_domain":{"ids":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"ids":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[5138872293174440313,14935583009751134816,9014079831396927156,7008812441195504980,9603704700847490044,7238075805746621699,2355002738045707979,5021902985892894619,17629528758352690600,5995306636877552],"remove":[10768931421586254879],"delta":[[7238075805746621699,[798.6831275720165,497.9094650205762]],[5021902985892894619,[857.679012345679,478.2880658436215]],[9603704700847490044,[821.037037037037,464.2962962962963]],[2355002738045707979,[826.2057613168724,485.0041152263375]],[17629528758352690600,[892.148148148148,480.2962962962963]],[7008812441195504980,[888.8888888888887,421.3333333333333]],[14935583009751134816,[914.9629629629628,418.3703703703703]],[5995306636877552,[912.8888888888888,479.7037037037037]],[9014079831396927156,[908.4444444444443,429.9259259259259]],[5138872293174440313,[922.9629629629628,422.22222222222223]]]},"segments":{"add":[7250062683967197158,14131440324578863745,4499620435559196394,14571502160667941876,7203043366367198812,239843798079287870,7655921914272804429,12687760936062936386,7117413478945421556,9071432674597727163],"remove":[3746587001535987651],"start_point":[[239843798079287870,2355002738045707979],[14571502160667941876,7008812441195504980],[7250062683967197158,5138872293174440313],[4499620435559196394,9014079831396927156],[9071432674597727163,7238075805746621699],[14131440324578863745,14935583009751134816],[7117413478945421556,5995306636877552],[7203043366367198812,9603704700847490044],[12687760936062936386,17629528758352690600],[7655921914272804429,5021902985892894619]],"end_point":[[14131440324578863745,9014079831396927156],[14571502160667941876,9603704700847490044],[4499620435559196394,7008812441195504980],[9071432674597727163,2355002738045707979],[239843798079287870,5021902985892894619],[7203043366367198812,7238075805746621699],[7117413478945421556,5138872293174440313],[12687760936062936386,5995306636877552],[7655921914272804429,17629528758352690600],[7250062683967197158,14935583009751134816]],"handle_primary":[[9071432674597727163,[4.345679012345499,-3.555555555555543]],[14571502160667941876,[-0.5925925925926094,0.0]],[14131440324578863745,[0.0,0.0]],[7117413478945421556,[0.0,0.0]],[4499620435559196394,[-0.2962962962963047,-0.2962962962963047]],[7203043366367198812,[0.0,0.2962962962963047]],[12687760936062936386,[10.666666666666742,3.555555555555543]],[239843798079287870,[9.61316872427983,-1.843621399176982]],[7655921914272804429,[18.172839506172863,-1.9753086419753456]],[7250062683967197158,[0.0,0.0]]],"handle_end":[[14131440324578863745,[2.962962962963047,-3.259259259259238]],[7655921914272804429,[-10.666666666666742,-3.555555555555543]],[7250062683967197158,[0.0,0.0]],[4499620435559196394,[8.59259259259261,5.629629629629619]],[7203043366367198812,[-1.1851851851852189,-25.18518518518516]],[12687760936062936386,[0.0,0.0]],[9071432674597727163,[-9.913826570592164,1.9012818080587977]],[14571502160667941876,[24.395061728395035,-0.36213991769540144]],[239843798079287870,[-21.502976534539364,2.3372800581021456]],[7117413478945421556,[15.703703703703695,33.48148148148147]]],"stroke":[[7655921914272804429,0],[7250062683967197158,0],[14571502160667941876,0],[239843798079287870,0],[7203043366367198812,0],[12687760936062936386,0],[14131440324578863745,0],[7117413478945421556,0],[9071432674597727163,0],[4499620435559196394,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":7655921914272804429},{"ty":"Primary","segment":12687760936062936386}],[{"ty":"End","segment":239843798079287870},{"ty":"Primary","segment":7655921914272804429}],[{"ty":"Primary","segment":239843798079287870},{"ty":"End","segment":9071432674597727163}],[{"ty":"End","segment":12687760936062936386},{"ty":"Primary","segment":7117413478945421556}],[{"ty":"End","segment":7250062683967197158},{"ty":"Primary","segment":14131440324578863745}]],"remove_g1_continuous":[[{"ty":"End","segment":9071432674597727163},{"ty":"Primary","segment":3746587001535987651}],[{"ty":"End","segment":3746587001535987651},{"ty":"Primary","segment":239843798079287870}]]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null,"size":464,"align":8}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14257963317028524134,{"inputs":[{"Node":{"node_id":1001728975241745659,"output_index":0,"lambda":false}},{"Node":{"node_id":7104088139635280554,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1491840484128555837,{"inputs":[{"Node":{"node_id":1508440849951861669,"output_index":0,"lambda":false}},{"Node":{"node_id":9808637865669223270,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[5888633415105234509,{"inputs":[{"Node":{"node_id":3750439930725791025,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null,"size":104,"align":8}},"import_index":1}}],"manual_composition":null,"implementation":{"ProtoNode":{"name":"graphene_std::vector::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::ImpureMemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1258994191538244490,{"inputs":[{"Node":{"node_id":5488285068107445023,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[5486211022469996717,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"transform":[1.0,0.0,0.0,1.0,0.0,0.0],"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"line_cap":"Butt","line_join":"Miter","line_join_miter_limit":4.0,"transform":[1.0,0.0,0.0,1.0,0.0,0.0]},"fill":"None"},"alpha_blending":{"opacity":1.0,"blend_mode":"Normal"},"colinear_manipulators":[],"point_domain":{"id":[],"positions":[]},"segment_domain":{"ids":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"ids":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[266134622800431246,12075466065090700811,7115673652122600762,9852238672814254137],"remove":[134095410253559933],"delta":[[12075466065090700811,[877.0370370370372,136.5925925925926]],[9852238672814254137,[879.7947439326053,110.54094004739208]],[7115673652122600762,[646.5386352539062,343.99395751953125]],[266134622800431246,[525.7325506063205,282.1042056224195]]]},"segments":{"add":[17255728395700231433,3166693019207180063,10242199012993595528,2159953159628520134],"remove":[10196443086284452827,3769008694104161528,13980530488817762548],"start_point":[[17255728395700231433,12075466065090700811],[3166693019207180063,7115673652122600762],[10242199012993595528,266134622800431246],[2159953159628520134,9852238672814254137]],"end_point":[[10242199012993595528,9852238672814254137],[3166693019207180063,266134622800431246],[17255728395700231433,7115673652122600762],[2159953159628520134,12075466065090700811]],"handle_primary":[[2159953159628520134,[0.0,0.0]],[10242199012993595528,[137.37856050479058,-43.88198340019727]],[17255728395700231433,[0.0010773420832492775,-0.01370555995902123]],[3166693019207180063,[-126.67994767097883,-51.72627287889763]]],"handle_end":[[3166693019207180063,[0.0,0.0]],[17255728395700231433,[165.46136474609386,67.5615980360243]],[10242199012993595528,[-15.794743932605344,36.71831921186718]],[2159953159628520134,[0.0,0.0]]],"stroke":[[10242199012993595528,0],[3166693019207180063,0],[17255728395700231433,0],[2159953159628520134,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"Primary","segment":3166693019207180063},{"ty":"End","segment":17255728395700231433}]],"remove_g1_continuous":[[{"ty":"End","segment":3166693019207180063},{"ty":"Primary","segment":13980530488817762548}],[{"ty":"Primary","segment":3769008694104161528},{"ty":"End","segment":10196443086284452827}],[{"ty":"End","segment":10242199012993595528},{"ty":"Primary","segment":2159953159628520134}],[{"ty":"Primary","segment":10242199012993595528},{"ty":"End","segment":3166693019207180063}]]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null,"size":464,"align":8}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14139129879376457893,{"inputs":[{"Node":{"node_id":11373527190663101881,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[5954536408321808728,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"transform":[1.0,0.0,0.0,1.0,0.0,0.0],"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"line_cap":"Butt","line_join":"Miter","line_join_miter_limit":4.0,"transform":[1.0,0.0,0.0,1.0,0.0,0.0]},"fill":"None"},"alpha_blending":{"opacity":1.0,"blend_mode":"Normal"},"colinear_manipulators":[],"point_domain":{"id":[],"positions":[]},"segment_domain":{"ids":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"ids":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[8323145223085840944,87630150944518163,8212340198835025146,6057321578372831916,16788403743390653241,16686047298905200065,15635903913637220842,8652457572576966876,3124531241960914803,18307826411292029066,9969822516610975381,16995054111951247369,16808246968731723098],"remove":[],"delta":[[6057321578372831916,[708.148148148148,616.2962962962962]],[16686047298905200065,[283.3333333333333,354.66666666666663]],[15635903913637220842,[468.4799499511719,219.78570556640625]],[87630150944518163,[879.1111111111111,595.8518518518517]],[16808246968731723098,[891.5555555555554,768.0]],[18307826411292029066,[601.1756940654021,9.999999747378752e-6]],[8652457572576966876,[514.4523315429688,146.72100830078125]],[9969822516610975381,[0.0,0.0]],[8323145223085840944,[891.5555555555554,569.3827160493826]],[8212340198835025146,[830.8148148148148,633.7777777777776]],[16995054111951247369,[0.0,768.0]],[3124531241960914803,[589.9588477366256,64.65843621399176]],[16788403743390653241,[467.99999999999994,487.3333333333333]]]},"segments":{"add":[14879480148926424885,5227512358023446442,17410347049685436697,9544743211426701912,14715945740984195653,515539069333222772,9242150930423817167,8823161072525575433,15885450050057549950,1662692131856898001,178608879920007638,12162371359208565273,16224358815792062223],"remove":[],"start_point":[[5227512358023446442,87630150944518163],[16224358815792062223,16808246968731723098],[9242150930423817167,15635903913637220842],[15885450050057549950,3124531241960914803],[9544743211426701912,6057321578372831916],[17410347049685436697,8212340198835025146],[12162371359208565273,16995054111951247369],[1662692131856898001,18307826411292029066],[178608879920007638,9969822516610975381],[14879480148926424885,8323145223085840944],[515539069333222772,16686047298905200065],[8823161072525575433,8652457572576966876],[14715945740984195653,16788403743390653241]],"end_point":[[12162371359208565273,16808246968731723098],[17410347049685436697,6057321578372831916],[14715945740984195653,16686047298905200065],[14879480148926424885,87630150944518163],[5227512358023446442,8212340198835025146],[9544743211426701912,16788403743390653241],[1662692131856898001,9969822516610975381],[515539069333222772,15635903913637220842],[15885450050057549950,18307826411292029066],[8823161072525575433,3124531241960914803],[16224358815792062223,8323145223085840944],[178608879920007638,16995054111951247369],[9242150930423817167,8652457572576966876]],"handle_primary":[[1662692131856898001,[0.0,0.0]],[17410347049685436697,[-26.37037037037044,2.3703703703704377]],[14879480148926424885,[0.0,0.0]],[12162371359208565273,[0.0,0.0]],[8823161072525575433,[11.259252477575274,-22.666663275824646]],[9544743211426701912,[-57.48148148148141,-21.629629629629676]],[178608879920007638,[0.0,0.0]],[5227512358023446442,[-4.444444444444457,18.074074074074133]],[16224358815792062223,[0.0,0.0]],[515539069333222772,[48.66666666666663,-23.999999999999943]],[9242150930423817167,[27.25925925925918,-22.518518518518533]],[14715945740984195653,[-92.66666666666656,-80.66666666666669]],[15885450050057549950,[11.193415637860312,-27.25925925925926]]],"handle_end":[[17410347049685436697,[57.48148148148141,21.629629629629676]],[8823161072525575433,[-12.439135136214697,30.29295262583988]],[14879480148926424885,[4.444444444444457,-18.074074074074133]],[178608879920007638,[0.0,0.0]],[14715945740984195653,[0.0,0.0]],[1662692131856898001,[0.0,0.0]],[515539069333222772,[-95.07216232621772,78.5378732260062]],[15885450050057549950,[0.0,0.0]],[9242150930423817167,[-9.36826657882972,18.859808361471693]],[16224358815792062223,[0.0,0.0]],[12162371359208565273,[0.0,0.0]],[5227512358023446442,[26.37037037037044,-2.3703703703704377]],[9544743211426701912,[92.66666666666656,80.66666666666669]]],"stroke":[[9544743211426701912,0],[1662692131856898001,0],[8823161072525575433,0],[12162371359208565273,0],[515539069333222772,0],[9242150930423817167,0],[5227512358023446442,0],[14879480148926424885,0],[15885450050057549950,0],[178608879920007638,0],[16224358815792062223,0],[17410347049685436697,0],[14715945740984195653,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":515539069333222772},{"ty":"Primary","segment":9242150930423817167}],[{"ty":"End","segment":9544743211426701912},{"ty":"Primary","segment":14715945740984195653}],[{"ty":"End","segment":1662692131856898001},{"ty":"Primary","segment":178608879920007638}],[{"ty":"End","segment":17410347049685436697},{"ty":"Primary","segment":9544743211426701912}],[{"ty":"End","segment":12162371359208565273},{"ty":"Primary","segment":16224358815792062223}],[{"ty":"End","segment":8823161072525575433},{"ty":"Primary","segment":15885450050057549950}],[{"ty":"End","segment":9242150930423817167},{"ty":"Primary","segment":8823161072525575433}],[{"ty":"End","segment":15885450050057549950},{"ty":"Primary","segment":1662692131856898001}],[{"ty":"End","segment":14879480148926424885},{"ty":"Primary","segment":5227512358023446442}],[{"ty":"End","segment":178608879920007638},{"ty":"Primary","segment":12162371359208565273}],[{"ty":"End","segment":5227512358023446442},{"ty":"Primary","segment":17410347049685436697}]],"remove_g1_continuous":[[{"ty":"End","segment":14715945740984195653},{"ty":"Primary","segment":515539069333222772}]]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null,"size":464,"align":8}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[18053728639616073084,{"inputs":[{"Node":{"node_id":6616450276140292763,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[17351444026127625357,{"inputs":[{"Node":{"node_id":14808063168960305551,"output_index":0,"lambda":false}},{"Node":{"node_id":13916027199283115943,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17735408893002232096,{"inputs":[{"Node":{"node_id":14228923746783465609,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[17285637344898461972,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"transform":[1.0,0.0,0.0,1.0,0.0,0.0],"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"line_cap":"Butt","line_join":"Miter","line_join_miter_limit":4.0,"transform":[1.0,0.0,0.0,1.0,0.0,0.0]},"fill":"None"},"alpha_blending":{"opacity":1.0,"blend_mode":"Normal"},"colinear_manipulators":[],"point_domain":{"id":[],"positions":[]},"segment_domain":{"ids":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"ids":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[16608607268690234590,17457877227823502997,13436129231170586617,5992570223148766873],"remove":[],"delta":[[16608607268690234590,[0.0,340.0]],[13436129231170586617,[481.3333333333333,768.0]],[5992570223148766873,[-2.273736754432321e-13,768.0]],[17457877227823502997,[273.0,476.0]]]},"segments":{"add":[13284808974014161135,5472571334856691465,8776124420595946733,4274372337254864190],"remove":[],"start_point":[[4274372337254864190,5992570223148766873],[13284808974014161135,16608607268690234590],[8776124420595946733,13436129231170586617],[5472571334856691465,17457877227823502997]],"end_point":[[13284808974014161135,17457877227823502997],[5472571334856691465,13436129231170586617],[8776124420595946733,5992570223148766873],[4274372337254864190,16608607268690234590]],"handle_primary":[[8776124420595946733,[0.0,0.0]],[4274372337254864190,[0.0,0.0]],[13284808974014161135,[161.73791370620617,43.57576470888159]],[5472571334856691465,[146.0,-13.0]]],"handle_end":[[13284808974014161135,[-165.43581782916667,14.730586519035386]],[8776124420595946733,[0.0,0.0]],[4274372337254864190,[0.0,0.0]],[5472571334856691465,[0.4078646547782227,-253.307727480567]]],"stroke":[[5472571334856691465,0],[8776124420595946733,0],[13284808974014161135,0],[4274372337254864190,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":13284808974014161135},{"ty":"Primary","segment":5472571334856691465}],[{"ty":"End","segment":8776124420595946733},{"ty":"Primary","segment":4274372337254864190}]],"remove_g1_continuous":[[{"ty":"Primary","segment":13284808974014161135},{"ty":"End","segment":4274372337254864190}]]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null,"size":464,"align":8}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15900830679378240619,{"inputs":[{"Node":{"node_id":2287485748649359627,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null,"size":104,"align":8}},"import_index":1}}],"manual_composition":null,"implementation":{"ProtoNode":{"name":"graphene_std::vector::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::ImpureMemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1662641269094032596,{"inputs":[{"Node":{"node_id":16304636129468583592,"output_index":0,"lambda":false}},{"Node":{"node_id":14139765080256493579,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[6728362629909402903,{"inputs":[{"Node":{"node_id":5856350938151339368,"output_index":0,"lambda":false}},{"Node":{"node_id":5449860184735415958,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12276520439585231336,{"inputs":[{"Node":{"node_id":2871608309888343463,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[997.5029638869316,545.7213923090854]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null,"size":16,"align":8}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null,"size":8,"align":8}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null,"size":16,"align":8}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null,"size":16,"align":8}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null,"size":16,"align":8}},"import_index":5}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::transform::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10995640810984321903,{"inputs":[{"Node":{"node_id":12353675714904258944,"output_index":0,"lambda":false}},{"Node":{"node_id":10265035897167064154,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15354358358546908017,{"inputs":[{"Node":{"node_id":14950060858756810933,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.92156863,"green":0.6039216,"blue":0.18039216,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.93333334,"green":0.8627451,"blue":0.7254902,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[4328376070224119511,{"inputs":[{"Value":{"tagged_value":{"GraphicGroup":{"elements":[],"transform":[1.0,0.0,0.0,1.0,0.0,0.0],"alpha_blending":{"opacity":1.0,"blend_mode":"Normal"}}},"exposed":true}},{"Node":{"node_id":13446205009526451196,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1009114585722052052,{"inputs":[{"Node":{"node_id":15692102598187739001,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null,"size":104,"align":8}},"import_index":1}}],"manual_composition":null,"implementation":{"ProtoNode":{"name":"graphene_std::vector::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::ImpureMemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14684142559936015947,{"inputs":[{"Node":{"node_id":15930698052919171086,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[4771789845668099116,{"inputs":[{"Node":{"node_id":17351444026127625357,"output_index":0,"lambda":false}},{"Node":{"node_id":14684142559936015947,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14690269209726153565,{"inputs":[{"Node":{"node_id":7376049709233607419,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[18188505856445531484,{"inputs":[{"Node":{"node_id":6468742191365679953,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.92156863,"green":0.6039216,"blue":0.18039216,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.92156863,"green":0.6039216,"blue":0.18039216,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[5014806436727666175,{"inputs":[{"Node":{"node_id":7855094781869605606,"output_index":0,"lambda":false}},{"Node":{"node_id":8863346544623578893,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2834866505092039323,{"inputs":[{"Node":{"node_id":18003287685830153881,"output_index":0,"lambda":false}},{"Node":{"node_id":14139765080256493579,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14139765080256493579,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"transform":[1.0,0.0,0.0,1.0,0.0,0.0],"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"line_cap":"Butt","line_join":"Miter","line_join_miter_limit":4.0,"transform":[1.0,0.0,0.0,1.0,0.0,0.0]},"fill":"None"},"alpha_blending":{"opacity":1.0,"blend_mode":"Normal"},"colinear_manipulators":[],"point_domain":{"id":[],"positions":[]},"segment_domain":{"ids":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"ids":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[3507505346656189771,2904729023031858224,854708012647259796,4175610638601362388,7821224334582795476,2195807584570698921],"remove":[1009888023123207923,16332448509429125699],"delta":[[7821224334582795476,[1093.0,600.0]],[3507505346656189771,[552.0,768.0000000000001]],[2195807584570698921,[993.0,767.9999999999999]],[4175610638601362388,[957.0,324.0]],[854708012647259796,[740.0,298.0]],[2904729023031858224,[491.3420376907663,506.7530051313737]]]},"segments":{"add":[4553965744616493549,13993263006398686359,6577640955869157325,17304574948462342226,8570276641842028192,17183285389582020412],"remove":[546565283439891712,5710832026764395735],"start_point":[[17304574948462342226,4175610638601362388],[8570276641842028192,2195807584570698921],[6577640955869157325,854708012647259796],[4553965744616493549,3507505346656189771],[17183285389582020412,7821224334582795476],[13993263006398686359,2904729023031858224]],"end_point":[[6577640955869157325,4175610638601362388],[17183285389582020412,2195807584570698921],[8570276641842028192,3507505346656189771],[4553965744616493549,2904729023031858224],[17304574948462342226,7821224334582795476],[13993263006398686359,854708012647259796]],"handle_primary":[[17183285389582020412,[-24.08196064282073,82.4624712920831]],[6577640955869157325,[102.0,-45.0]],[4553965744616493549,[0.0,0.0]],[13993263006398686359,[0.0,-84.7537417270637]],[17304574948462342226,[50.35246044959922,33.38607084805801]],[8570276641842028192,[0.0,0.0]]],"handle_end":[[4553965744616493549,[0.0,135.2464055295568]],[17183285389582020412,[0.0,0.0]],[13993263006398686359,[-102.0,45.0]],[8570276641842028192,[0.0,0.0]],[17304574948462342226,[33.0,-113.0]],[6577640955869157325,[-50.35246044959922,-33.38607084805801]]],"stroke":[[4553965744616493549,0],[6577640955869157325,0],[13993263006398686359,0],[17183285389582020412,0],[17304574948462342226,0],[8570276641842028192,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"Primary","segment":8570276641842028192},{"ty":"End","segment":17183285389582020412}],[{"ty":"End","segment":6577640955869157325},{"ty":"Primary","segment":17304574948462342226}],[{"ty":"End","segment":4553965744616493549},{"ty":"Primary","segment":13993263006398686359}],[{"ty":"End","segment":17304574948462342226},{"ty":"Primary","segment":17183285389582020412}],[{"ty":"End","segment":13993263006398686359},{"ty":"Primary","segment":6577640955869157325}]],"remove_g1_continuous":[[{"ty":"End","segment":5710832026764395735},{"ty":"Primary","segment":8570276641842028192}],[{"ty":"End","segment":17183285389582020412},{"ty":"Primary","segment":546565283439891712}],[{"ty":"End","segment":546565283439891712},{"ty":"Primary","segment":5710832026764395735}],[{"ty":"Primary","segment":8570276641842028192},{"ty":"End","segment":546565283439891712}]]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null,"size":464,"align":8}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10080296672372912698,{"inputs":[{"Node":{"node_id":12867379765049504290,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"BooleanOperation":"SubtractFront"},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null,"size":104,"align":8}},"import_index":1}}],"manual_composition":null,"implementation":{"ProtoNode":{"name":"graphene_std::vector::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::ImpureMemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12353675714904258944,{"inputs":[{"Node":{"node_id":13203761224559198689,"output_index":0,"lambda":false}},{"Node":{"node_id":17271572793812678706,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17271572793812678706,{"inputs":[{"Node":{"node_id":15900830679378240619,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[14228923746783465609,{"inputs":[{"Node":{"node_id":16304636129468583592,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[2003133867055127539,13758328146055368475],"remove":[],"delta":[[4648964341912884959,[324.66666666666646,0.0]],[13758328146055368475,[1299.3064572949788,786.3993743175897]],[2003133867055127539,[1011.111083984375,786.3993530273438]],[16569120368910754547,[-43.0,0.0]]]},"segments":{"add":[8214025514312603513,7334532063810723038,13431612844608018700],"remove":[3433930674303663828,6602880736207868665],"start_point":[[7334532063810723038,16569120368910754547],[8214025514312603513,2003133867055127539],[13431612844608018700,13758328146055368475]],"end_point":[[8214025514312603513,4648964341912884959],[13431612844608018700,2003133867055127539],[7334532063810723038,13758328146055368475]],"handle_primary":[[7334532063810723038,null],[8214025514312603513,null],[9030015329489789075,[69.08057198853999,-80.19415805947563]],[13431612844608018700,null]],"handle_end":[[2197140374690997530,[-24.333333333333485,-86.99999999999977]],[8214025514312603513,null],[9030015329489789075,[0.0,0.0]],[7334532063810723038,null],[13431612844608018700,null]],"stroke":[[7334532063810723038,0],[13431612844608018700,0],[8214025514312603513,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[[{"ty":"End","segment":9030015329489789075},{"ty":"Primary","segment":2197140374690997530}],[{"ty":"Primary","segment":9030015329489789075},{"ty":"End","segment":3433930674303663828}]]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null,"size":464,"align":8}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11210964267417873667,{"inputs":[{"Node":{"node_id":14516211820212764316,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[91.7203910728,-99.9607940061]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.40698564029617024},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null,"size":16,"align":8}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null,"size":8,"align":8}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null,"size":16,"align":8}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null,"size":16,"align":8}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null,"size":16,"align":8}},"import_index":5}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::transform::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1097494158696050491,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":15.0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"()","alias":null,"size":0,"align":1}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::generator_nodes::CircleNode"}},"visible":true,"skip_deduplication":false}],[8887924609778270360,{"inputs":[{"Node":{"node_id":5014806436727666175,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null,"size":104,"align":8}},"import_index":1}}],"manual_composition":null,"implementation":{"ProtoNode":{"name":"graphene_std::vector::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::ImpureMemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17036604842139972912,{"inputs":[{"Node":{"node_id":1491840484128555837,"output_index":0,"lambda":false}},{"Node":{"node_id":13602951545837529973,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12145355397916841389,{"inputs":[{"Node":{"node_id":16759836951269190891,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.92156863,"green":0.6039216,"blue":0.18039216,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[4470272391975492611,{"inputs":[{"Node":{"node_id":7018444885869143173,"output_index":0,"lambda":false}},{"Node":{"node_id":12145355397916841389,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13602951545837529973,{"inputs":[{"Node":{"node_id":11210964267417873667,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.3137255,"green":0.44705883,"blue":0.45490196,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.8509804,"green":0.24313726,"blue":0.18431373,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[12004065064978143915,{"inputs":[{"Node":{"node_id":10080296672372912698,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[],"remove":[],"delta":[[7,[-4.444444444444445,0.0]]]},"segments":{"add":[],"remove":[],"start_point":[],"end_point":[],"handle_primary":[[8,[59.91830783420136,-46.277437940056075]]],"handle_end":[[8,[-65.77767718279807,-16.01762333622696]]],"stroke":[]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null,"size":464,"align":8}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[990192925663920333,{"inputs":[{"Node":{"node_id":1097494158696050491,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[466.8,0.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":-7.9},"exposed":false}},{"Value":{"tagged_value":{"U32":5},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::RepeatNode"}},"visible":true,"skip_deduplication":false}],[2025899804080897524,{"inputs":[{"Node":{"node_id":17740496701763775226,"output_index":0,"lambda":false}},{"Node":{"node_id":3214181946162459584,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11264395591110193456,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":10.0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"()","alias":null,"size":0,"align":1}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::generator_nodes::CircleNode"}},"visible":true,"skip_deduplication":false}],[13027689870767713939,{"inputs":[{"Node":{"node_id":7201841978411396053,"output_index":0,"lambda":false}},{"Node":{"node_id":13340751444307201866,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14496934933990319842,{"inputs":[{"Node":{"node_id":12709602171929957216,"output_index":0,"lambda":false}},{"Node":{"node_id":12185047359007423618,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13739729101529293427,{"inputs":[{"Node":{"node_id":18003287685830153881,"output_index":0,"lambda":false}},{"Node":{"node_id":14139765080256493579,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3214181946162459584,{"inputs":[{"Node":{"node_id":5449860184735415958,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.93333334,"green":0.8627451,"blue":0.7254902,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.93333334,"green":0.8627451,"blue":0.7254902,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[804622576568168609,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"transform":[1.0,0.0,0.0,1.0,0.0,0.0],"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"line_cap":"Butt","line_join":"Miter","line_join_miter_limit":4.0,"transform":[1.0,0.0,0.0,1.0,0.0,0.0]},"fill":"None"},"alpha_blending":{"opacity":1.0,"blend_mode":"Normal"},"colinear_manipulators":[],"point_domain":{"id":[],"positions":[]},"segment_domain":{"ids":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"ids":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[13654185056786459919,6952183320761642858,2802617302192982616,7639287212006638253,15117515618866904690,15750781936547583892,7025422618543191491,3831533579307185652,16937470333767479918,10412162547161259027,5269777039739103358],"remove":[],"delta":[[7025422618543191491,[911.5555555555554,345.3333333333333]],[15750781936547583892,[840.6666666666665,368.66666666666663]],[7639287212006638253,[862.8888888888888,349.3333333333333]],[3831533579307185652,[880.4444444444443,357.3333333333333]],[6952183320761642858,[933.9259259259262,324.3456790123457]],[10412162547161259027,[887.3333333333333,376.0]],[5269777039739103358,[902.2222222222222,394.66666666666663]],[16937470333767479918,[876.6666666666665,359.55555555555554]],[13654185056786459919,[946.1728395061732,330.8641975308642]],[2802617302192982616,[911.7777777777776,334.88888888888886]],[15117515618866904690,[819.1111111111109,354.44444444444434]]]},"segments":{"add":[10498175376126066982,10426255560432238561,11214998966879437330,1241631398419524272,15286139376878919277,15838384105575178137,12854270992100552972,379744301215040936,4069217348643062888,10438163357339042361,9330486019469919863],"remove":[],"start_point":[[10438163357339042361,10412162547161259027],[15286139376878919277,15117515618866904690],[379744301215040936,3831533579307185652],[11214998966879437330,2802617302192982616],[4069217348643062888,16937470333767479918],[10498175376126066982,13654185056786459919],[9330486019469919863,5269777039739103358],[1241631398419524272,7639287212006638253],[12854270992100552972,7025422618543191491],[15838384105575178137,15750781936547583892],[10426255560432238561,6952183320761642858]],"end_point":[[11214998966879437330,7639287212006638253],[15838384105575178137,7025422618543191491],[15286139376878919277,15750781936547583892],[10438163357339042361,5269777039739103358],[10426255560432238561,2802617302192982616],[379744301215040936,16937470333767479918],[4069217348643062888,10412162547161259027],[10498175376126066982,6952183320761642858],[9330486019469919863,13654185056786459919],[12854270992100552972,3831533579307185652],[1241631398419524272,15117515618866904690]],"handle_primary":[[15838384105575178137,[22.222222222222285,5.555555555555543]],[12854270992100552972,[-0.4444444444443434,0.0]],[379744301215040936,[-0.2222222222221717,0.0]],[1241631398419524272,[-17.111111111111086,12.888888888888856]],[4069217348643062888,[0.0,0.0]],[10438163357339042361,[1.3333333333332575,10.888888888888856]],[10426255560432238561,[-0.39506172839503506,-0.19753086419757435]],[11214998966879437330,[-16.666666666666515,-3.777777777777771]],[9330486019469919863,[5.555555555555429,-0.2222222222221717]],[10498175376126066982,[0.0,0.0]],[15286139376878919277,[-0.5188510642573192,0.6084707935380038]]],"handle_end":[[11214998966879437330,[17.111111111111086,-12.888888888888856]],[10426255560432238561,[16.666666666666515,3.777777777777771]],[15286139376878919277,[-22.222222222222285,-5.555555555555543]],[10498175376126066982,[4.9382716049382225,0.19753086419757435]],[379744301215040936,[0.0,0.0]],[4069217348643062888,[-1.3333333333332575,-10.888888888888856]],[9330486019469919863,[0.0,0.0]],[10438163357339042361,[-5.555555555555429,0.2222222222221717]],[15838384105575178137,[-20.0,2.0]],[12854270992100552972,[33.77777777777783,2.2222222222222285]],[1241631398419524272,[0.5951379226228255,-0.6979344728938486]]],"stroke":[[4069217348643062888,0],[10426255560432238561,0],[11214998966879437330,0],[1241631398419524272,0],[9330486019469919863,0],[10498175376126066982,0],[15838384105575178137,0],[379744301215040936,0],[15286139376878919277,0],[10438163357339042361,0],[12854270992100552972,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":10426255560432238561},{"ty":"Primary","segment":11214998966879437330}],[{"ty":"End","segment":15286139376878919277},{"ty":"Primary","segment":15838384105575178137}],[{"ty":"End","segment":1241631398419524272},{"ty":"Primary","segment":15286139376878919277}],[{"ty":"End","segment":4069217348643062888},{"ty":"Primary","segment":10438163357339042361}],[{"ty":"End","segment":11214998966879437330},{"ty":"Primary","segment":1241631398419524272}],[{"ty":"End","segment":379744301215040936},{"ty":"Primary","segment":4069217348643062888}],[{"ty":"End","segment":10438163357339042361},{"ty":"Primary","segment":9330486019469919863}]],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null,"size":464,"align":8}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17753909951719808506,{"inputs":[{"Node":{"node_id":2185437945364824599,"output_index":0,"lambda":false}},{"Node":{"node_id":9563008199132558110,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[8566844905246185636,{"inputs":[{"Node":{"node_id":6852799892628327372,"output_index":0,"lambda":false}},{"Node":{"node_id":17131529656312051452,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[18095952297474762348,{"inputs":[{"Node":{"node_id":5954536408321808728,"output_index":0,"lambda":false}},{"Node":{"node_id":5449860184735415958,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[8426490990601560741,{"inputs":[{"Node":{"node_id":10760002922115563021,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.93333334,"green":0.8627451,"blue":0.7254902,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.92156863,"green":0.6039216,"blue":0.18039216,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[7651693425519490419,{"inputs":[{"Node":{"node_id":4771789845668099116,"output_index":0,"lambda":false}},{"Node":{"node_id":15817956847588799375,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[6616450276140292763,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"transform":[1.0,0.0,0.0,1.0,0.0,0.0],"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"line_cap":"Butt","line_join":"Miter","line_join_miter_limit":4.0,"transform":[1.0,0.0,0.0,1.0,0.0,0.0]},"fill":"None"},"alpha_blending":{"opacity":1.0,"blend_mode":"Normal"},"colinear_manipulators":[],"point_domain":{"id":[],"positions":[]},"segment_domain":{"ids":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"ids":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[14760110820354327749,9465415708990918986,13517856880347849115,12398030966924498647,2930103517622848405,9496337687212684441],"remove":[],"delta":[[13517856880347849115,[777.1851851851851,92.44444444444446]],[9496337687212684441,[732.148148148148,57.18518518518518]],[12398030966924498647,[823.4074074074074,97.4814814814815]],[2930103517622848405,[819.2592592592591,69.33333333333334]],[9465415708990918986,[706.3703703703703,86.51851851851853]],[14760110820354327749,[614.8148148148148,129.1851851851852]]]},"segments":{"add":[18226408581696793441,16628058317667581864,3809009367670994230,13496648265229692336,10686631697241750410,11696351847604335156],"remove":[],"start_point":[[10686631697241750410,2930103517622848405],[18226408581696793441,14760110820354327749],[16628058317667581864,9465415708990918986],[3809009367670994230,13517856880347849115],[11696351847604335156,9496337687212684441],[13496648265229692336,12398030966924498647]],"end_point":[[13496648265229692336,2930103517622848405],[11696351847604335156,14760110820354327749],[16628058317667581864,13517856880347849115],[3809009367670994230,12398030966924498647],[10686631697241750410,9496337687212684441],[18226408581696793441,9465415708990918986]],"handle_primary":[[11696351847604335156,[-29.333333333333258,11.55555555555555]],[16628058317667581864,[41.185185185185105,-9.7777777777778]],[13496648265229692336,[14.222222222222172,-0.8888888888888857]],[18226408581696793441,[0.0,0.0]],[3809009367670994230,[21.33333333333337,4.740740740740733]],[10686631697241750410,[-13.037037037036953,-4.444444444444457]]],"handle_end":[[13496648265229692336,[13.037037037036953,4.444444444444457]],[16628058317667581864,[-21.33333333333337,-4.740740740740733]],[3809009367670994230,[-14.222222222222172,0.8888888888888857]],[10686631697241750410,[29.333333333333258,-11.55555555555555]],[11696351847604335156,[54.81481481481478,-42.37037037037035]],[18226408581696793441,[-41.185185185185105,9.7777777777778]]],"stroke":[[3809009367670994230,0],[13496648265229692336,0],[18226408581696793441,0],[16628058317667581864,0],[10686631697241750410,0],[11696351847604335156,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":13496648265229692336},{"ty":"Primary","segment":10686631697241750410}],[{"ty":"End","segment":16628058317667581864},{"ty":"Primary","segment":3809009367670994230}],[{"ty":"End","segment":10686631697241750410},{"ty":"Primary","segment":11696351847604335156}],[{"ty":"End","segment":18226408581696793441},{"ty":"Primary","segment":16628058317667581864}],[{"ty":"End","segment":3809009367670994230},{"ty":"Primary","segment":13496648265229692336}]],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null,"size":464,"align":8}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4560146526699152877,{"inputs":[{"Node":{"node_id":5486211022469996717,"output_index":0,"lambda":false}},{"Node":{"node_id":13646498613066619660,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11684705487012407227,{"inputs":[{"Node":{"node_id":18068340617333437755,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.92156863,"green":0.6039216,"blue":0.18039216,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.8509804,"green":0.24313726,"blue":0.18431373,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[16785043320296790229,{"inputs":[{"Node":{"node_id":18087203100637857224,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"F64":20.0},"exposed":false}},{"Value":{"tagged_value":{"VecF64":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"LineCap":"Butt"},"exposed":false}},{"Value":{"tagged_value":{"LineJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false}],[16999130951959724657,{"inputs":[{"Node":{"node_id":13646498613066619660,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[],"remove":[],"delta":[[11,[-1.3333333333333333,-1.3333333333333333]],[9,[0.0,-2.6666666666666665]],[12,[-2.6666666666666665,0.0]],[10,[0.0,-2.6666666666666665]],[8,[0.251505927280391,-2.273736754432321e-13]]]},"segments":{"add":[],"remove":[],"start_point":[],"end_point":[],"handle_primary":[[8,[7.803277823764688,41.0359405336701]]],"handle_end":[[7,[-7.460968634658116,-39.23578253960113]]],"stroke":[]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null,"size":464,"align":8}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16177422101884031678,{"inputs":[{"Node":{"node_id":13353438235848911576,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[11201759760883367635,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"transform":[1.0,0.0,0.0,1.0,0.0,0.0],"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"line_cap":"Butt","line_join":"Miter","line_join_miter_limit":4.0,"transform":[1.0,0.0,0.0,1.0,0.0,0.0]},"fill":"None"},"alpha_blending":{"opacity":1.0,"blend_mode":"Normal"},"colinear_manipulators":[],"point_domain":{"id":[],"positions":[]},"segment_domain":{"ids":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"ids":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[5173348374891662425,12314285668680405002,7388288026322342161,12796056970187696453],"remove":[],"delta":[[7388288026322342161,[1277.0,319.0]],[5173348374891662425,[969.0,0.0]],[12314285668680405002,[1085.0,181.0]],[12796056970187696453,[1418.0,0.0]]]},"segments":{"add":[10860608091363771974,9177623211202289793,18091265337503274797,9065140293539496953],"remove":[],"start_point":[[9065140293539496953,12796056970187696453],[9177623211202289793,12314285668680405002],[18091265337503274797,7388288026322342161],[10860608091363771974,5173348374891662425]],"end_point":[[9177623211202289793,7388288026322342161],[18091265337503274797,12796056970187696453],[10860608091363771974,12314285668680405002],[9065140293539496953,5173348374891662425]],"handle_primary":[[9065140293539496953,[0.0,0.0]],[10860608091363771974,[0.0,0.0]],[18091265337503274797,[178.0,-35.0]],[9177623211202289793,[-33.0,137.0]]],"handle_end":[[9065140293539496953,[0.0,0.0]],[18091265337503274797,[168.99998492988766,81.0]],[9177623211202289793,[-77.81941867085992,15.301571086966838]],[10860608091363771974,[25.066898104916696,-104.0656072840481]]],"stroke":[[18091265337503274797,0],[9065140293539496953,0],[9177623211202289793,0],[10860608091363771974,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":10860608091363771974},{"ty":"Primary","segment":9177623211202289793}],[{"ty":"End","segment":9177623211202289793},{"ty":"Primary","segment":18091265337503274797}]],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null,"size":464,"align":8}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11312003311374164325,{"inputs":[{"Node":{"node_id":4301099429811409147,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.8509804,"green":0.24313726,"blue":0.18431373,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.3137255,"green":0.44705883,"blue":0.45490196,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[10760002922115563021,{"inputs":[{"Node":{"node_id":14257963317028524134,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"BooleanOperation":"SubtractFront"},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null,"size":104,"align":8}},"import_index":1}}],"manual_composition":null,"implementation":{"ProtoNode":{"name":"graphene_std::vector::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::ImpureMemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11373527190663101881,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"transform":[1.0,0.0,0.0,1.0,0.0,0.0],"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"line_cap":"Butt","line_join":"Miter","line_join_miter_limit":4.0,"transform":[1.0,0.0,0.0,1.0,0.0,0.0]},"fill":"None"},"alpha_blending":{"opacity":1.0,"blend_mode":"Normal"},"colinear_manipulators":[],"point_domain":{"id":[],"positions":[]},"segment_domain":{"ids":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"ids":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[12058665768506126331,6802441093413090533,4854280308383915721,17729943149159368459,7436032950540776377,2189722519288419244,15817054697695831753,15744271344233846756,13877679667762731651,13567509413382199058,5664077098702810122,14178520291283306679,15575201098426093294],"remove":[],"delta":[[13567509413382199058,[702.6831275720166,195.95061728395063]],[6802441093413090533,[783.4074074074074,172.74074074074073]],[15744271344233846756,[785.7777777777777,205.62962962962965]],[4854280308383915721,[813.9259259259259,200.2962962962963]],[7436032950540776377,[815.4074074074074,203.25925925925927]],[14178520291283306679,[668.4444444444443,183.1111111111111]],[15575201098426093294,[636.7407407407406,173.33333333333331]],[5664077098702810122,[686.5185185185185,191.1111111111111]],[13877679667762731651,[743.4074074074074,234.66666666666669]],[17729943149159368459,[801.1851851851852,199.90123456790124]],[15817054697695831753,[806.716049382716,206.22222222222223]],[2189722519288419244,[796.0493827160494,202.2716049382716]],[12058665768506126331,[693.7283950617283,174.35390946502056]]]},"segments":{"add":[2336956120616260883,1639796012074210121,3918280827204321712,13932755083907220179,14941832641240060361,94092576912261794,18299135553255571870,3109091330258982137,11037018395008586448,16261506098907231989,8279051592565434787,2367379450383978497,5102625335252315850],"remove":[],"start_point":[[3918280827204321712,4854280308383915721],[1639796012074210121,6802441093413090533],[16261506098907231989,13567509413382199058],[14941832641240060361,7436032950540776377],[94092576912261794,2189722519288419244],[13932755083907220179,17729943149159368459],[18299135553255571870,15817054697695831753],[5102625335252315850,15575201098426093294],[8279051592565434787,5664077098702810122],[11037018395008586448,13877679667762731651],[2367379450383978497,14178520291283306679],[3109091330258982137,15744271344233846756],[2336956120616260883,12058665768506126331]],"end_point":[[5102625335252315850,12058665768506126331],[18299135553255571870,15744271344233846756],[13932755083907220179,7436032950540776377],[14941832641240060361,2189722519288419244],[2367379450383978497,15575201098426093294],[3918280827204321712,17729943149159368459],[16261506098907231989,5664077098702810122],[1639796012074210121,4854280308383915721],[3109091330258982137,13877679667762731651],[2336956120616260883,6802441093413090533],[94092576912261794,15817054697695831753],[11037018395008586448,13567509413382199058],[8279051592565434787,14178520291283306679]],"handle_primary":[[2367379450383978497,[-5.037037037036953,-1.7777777777777717]],[11037018395008586448,[0.0,0.0]],[1639796012074210121,[0.0,0.0]],[18299135553255571870,[0.0,0.0]],[8279051592565434787,[-16.75720164609038,-2.1399176954732297]],[3109091330258982137,[0.0,0.0]],[2336956120616260883,[0.0,0.0]],[3918280827204321712,[0.0,0.0]],[13932755083907220179,[0.0,0.0]],[5102625335252315850,[0.0,0.0]],[94092576912261794,[0.0,0.0]],[14941832641240060361,[0.0,0.0]],[16261506098907231989,[0.0,0.0]]],"handle_end":[[3918280827204321712,[0.0,0.0]],[1639796012074210121,[-19.259259259259352,-3.259259259259238]],[14941832641240060361,[7.1111111111111995,1.7777777777778]],[11037018395008586448,[13.168724279835374,22.12345679012344]],[2367379450383978497,[12.740740740740648,5.037037037037038]],[8279051592565434787,[5.037037037036953,1.7777777777777717]],[2336956120616260883,[-65.77777777777783,13.333333333333314]],[16261506098907231989,[12.1395654462896,1.5502392023748983]],[3109091330258982137,[18.962962962963047,2.074074074074048]],[18299135553255571870,[10.07407407407402,2.7654320987654444]],[94092576912261794,[0.0,0.0]],[5102625335252315850,[-27.12757201646093,2.633744855967052]],[13932755083907220179,[0.0,0.0]]],"stroke":[[3109091330258982137,0],[2336956120616260883,0],[13932755083907220179,0],[5102625335252315850,0],[16261506098907231989,0],[14941832641240060361,0],[1639796012074210121,0],[18299135553255571870,0],[3918280827204321712,0],[94092576912261794,0],[2367379450383978497,0],[8279051592565434787,0],[11037018395008586448,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":3918280827204321712},{"ty":"Primary","segment":13932755083907220179}],[{"ty":"End","segment":13932755083907220179},{"ty":"Primary","segment":14941832641240060361}],[{"ty":"End","segment":94092576912261794},{"ty":"Primary","segment":18299135553255571870}],[{"ty":"End","segment":16261506098907231989},{"ty":"Primary","segment":8279051592565434787}],[{"ty":"End","segment":8279051592565434787},{"ty":"Primary","segment":2367379450383978497}]],"remove_g1_continuous":[[{"ty":"Primary","segment":16261506098907231989},{"ty":"End","segment":11037018395008586448}]]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null,"size":464,"align":8}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[9563008199132558110,{"inputs":[{"Node":{"node_id":7855094781869605606,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.8509804,"green":0.24313726,"blue":0.18431373,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.8509804,"green":0.24313726,"blue":0.18431373,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[18081743490344004315,{"inputs":[{"Node":{"node_id":13588160462734303101,"output_index":0,"lambda":false}},{"Node":{"node_id":11684705487012407227,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[6852799892628327372,{"inputs":[{"Node":{"node_id":2025899804080897524,"output_index":0,"lambda":false}},{"Node":{"node_id":16671141883125519098,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17952673493105230490,{"inputs":[{"Node":{"node_id":14228923746783465609,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"F64":20.0},"exposed":false}},{"Value":{"tagged_value":{"VecF64":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"LineCap":"Butt"},"exposed":false}},{"Value":{"tagged_value":{"LineJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false}],[8863346544623578893,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"transform":[1.0,0.0,0.0,1.0,0.0,0.0],"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"line_cap":"Butt","line_join":"Miter","line_join_miter_limit":4.0,"transform":[1.0,0.0,0.0,1.0,0.0,0.0]},"fill":"None"},"alpha_blending":{"opacity":1.0,"blend_mode":"Normal"},"colinear_manipulators":[],"point_domain":{"id":[],"positions":[]},"segment_domain":{"ids":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"ids":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[5480246971175127548,949359986970918930,6461719056721357962,6265491311473200676],"remove":[947514826240006203],"delta":[[5480246971175127548,[364.0,767.9999999999999]],[949359986970918930,[0.0,608.0]],[6461719056721357962,[173.33333333333331,506.66666666666674]],[6265491311473200676,[-2.273736754432321e-13,768.0000000000001]]]},"segments":{"add":[8951068186878308228,9717584104793611782,15710828508798332384,12480300844056666979],"remove":[11231973846952426191,6561081452252813685,15926511461198813522],"start_point":[[12480300844056666979,6265491311473200676],[15710828508798332384,5480246971175127548],[8951068186878308228,6461719056721357962],[9717584104793611782,949359986970918930]],"end_point":[[8951068186878308228,5480246971175127548],[12480300844056666979,949359986970918930],[9717584104793611782,6461719056721357962],[15710828508798332384,6265491311473200676]],"handle_primary":[[8951068186878308228,[121.00000000000006,-37.99999999999994]],[15710828508798332384,null],[12480300844056666979,null],[9717584104793611782,[0.0,0.0]]],"handle_end":[[12480300844056666979,null],[15710828508798332384,null],[8951068186878308228,[-92.0,-81.99999999999989]],[9717584104793611782,[-63.1770926995265,19.84073985604961]]],"stroke":[[8951068186878308228,0],[12480300844056666979,0],[15710828508798332384,0],[9717584104793611782,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":6561081452252813685},{"ty":"Primary","segment":9717584104793611782}],[{"ty":"Primary","segment":9717584104793611782},{"ty":"End","segment":12480300844056666979}],[{"ty":"Primary","segment":8951068186878308228},{"ty":"End","segment":9717584104793611782}]],"remove_g1_continuous":[[{"ty":"Primary","segment":11231973846952426191},{"ty":"End","segment":9717584104793611782}],[{"ty":"End","segment":15926511461198813522},{"ty":"Primary","segment":8951068186878308228}]]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null,"size":464,"align":8}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13588160462734303101,{"inputs":[{"Node":{"node_id":17036604842139972912,"output_index":0,"lambda":false}},{"Node":{"node_id":11312003311374164325,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4421418468606442725,{"inputs":[{"Node":{"node_id":8863346544623578893,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.93333334,"green":0.8627451,"blue":0.7254902,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.93333334,"green":0.8627451,"blue":0.7254902,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[4807760870555738383,{"inputs":[{"Node":{"node_id":876963243827503916,"output_index":0,"lambda":false}},{"Node":{"node_id":8269257328703012432,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[9808637865669223270,{"inputs":[{"Node":{"node_id":140396870212231820,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[15692102598187739001,{"inputs":[{"Node":{"node_id":14950060858756810933,"output_index":0,"lambda":false}},{"Node":{"node_id":11201759760883367635,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10265035897167064154,{"inputs":[{"Node":{"node_id":14698962747138962125,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[17131529656312051452,{"inputs":[{"Node":{"node_id":16999130951959724657,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.92156863,"green":0.6039216,"blue":0.18039216,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.92156863,"green":0.6039216,"blue":0.18039216,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[7104088139635280554,{"inputs":[{"Node":{"node_id":16785043320296790229,"output_index":0,"lambda":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SolidifyStrokeNode"}},"visible":true,"skip_deduplication":false}],[18068340617333437755,{"inputs":[{"Node":{"node_id":8297015715799006244,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[73.0306419396,-200.8521460039]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.42594097420784194},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.9999999999999998,0.9999999999999998]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null,"size":16,"align":8}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null,"size":8,"align":8}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null,"size":16,"align":8}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null,"size":16,"align":8}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null,"size":16,"align":8}},"import_index":5}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::transform::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2185437945364824599,{"inputs":[{"Node":{"node_id":18081743490344004315,"output_index":0,"lambda":false}},{"Node":{"node_id":4421418468606442725,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1627123781166851142,{"inputs":[{"Node":{"node_id":4807760870555738383,"output_index":0,"lambda":false}},{"Node":{"node_id":15354358358546908017,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4102754869474520966,{"inputs":[{"Node":{"node_id":2723198387862533596,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null,"size":104,"align":8}},"import_index":1}}],"manual_composition":null,"implementation":{"ProtoNode":{"name":"graphene_std::vector::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::ImpureMemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14141479077115894852,{"inputs":[{"Node":{"node_id":15433707377961038695,"output_index":0,"lambda":false}},{"Node":{"node_id":17285637344898461972,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17397123104674848450,{"inputs":[{"Node":{"node_id":1662641269094032596,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null,"size":104,"align":8}},"import_index":1}}],"manual_composition":null,"implementation":{"ProtoNode":{"name":"graphene_std::vector::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::ImpureMemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13340751444307201866,{"inputs":[{"Node":{"node_id":9135110142507605216,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.93333334,"green":0.8627451,"blue":0.7254902,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.93333334,"green":0.8627451,"blue":0.7254902,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[12741076678082295759,{"inputs":[{"Node":{"node_id":14139765080256493579,"output_index":0,"lambda":false}},{"Node":{"node_id":5449860184735415958,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13916027199283115943,{"inputs":[{"Node":{"node_id":6194305264313730032,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[15930698052919171086,{"inputs":[{"Node":{"node_id":13739729101529293427,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"BooleanOperation":"SubtractFront"},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null,"size":104,"align":8}},"import_index":1}}],"manual_composition":null,"implementation":{"ProtoNode":{"name":"graphene_std::vector::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::ImpureMemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17223836790030950966,{"inputs":[{"Node":{"node_id":14030142873804552388,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.8509804,"green":0.24313726,"blue":0.18431373,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.8509804,"green":0.24313726,"blue":0.18431373,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[13446205009526451196,{"inputs":[{"Node":{"node_id":14139765080256493579,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.92156863,"green":0.6039216,"blue":0.18039216,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.92156863,"green":0.6039216,"blue":0.18039216,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[15433707377961038695,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"transform":[1.0,0.0,0.0,1.0,0.0,0.0],"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"line_cap":"Butt","line_join":"Miter","line_join_miter_limit":4.0,"transform":[1.0,0.0,0.0,1.0,0.0,0.0]},"fill":"None"},"alpha_blending":{"opacity":1.0,"blend_mode":"Normal"},"colinear_manipulators":[],"point_domain":{"id":[],"positions":[]},"segment_domain":{"ids":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"ids":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[16723991032614525258,1623125309784127684,7209807874503344461,3123395482103162919,2668496811386192321],"remove":[12344391980636687302],"delta":[[7209807874503344461,[188.0,694.6666666666669]],[1623125309784127684,[643.9258958566198,633.6997633965701]],[2668496811386192321,[0.0,768.0]],[16723991032614525258,[553.0000000000001,768.0]],[3123395482103162919,[-2.273736754432321e-13,689.0]]]},"segments":{"add":[3656277643115996070,6789459806904610761,16287649713110748258,16456150086799119359,1652964032977338610],"remove":[1848051273241122771],"start_point":[[6789459806904610761,1623125309784127684],[16456150086799119359,2668496811386192321],[3656277643115996070,16723991032614525258],[16287649713110748258,3123395482103162919],[1652964032977338610,7209807874503344461]],"end_point":[[16456150086799119359,16723991032614525258],[6789459806904610761,7209807874503344461],[16287649713110748258,2668496811386192321],[1652964032977338610,3123395482103162919],[3656277643115996070,1623125309784127684]],"handle_primary":[[16456150086799119359,[0.0,0.0]],[16287649713110748258,[0.0,0.0]],[1652964032977338610,[-81.48609837852206,84.6759456460087]],[6789459806904610761,[-213.92589585661983,-68.82675604113183]],[3656277643115996070,[0.0,0.0]]],"handle_end":[[16287649713110748258,[0.0,0.0]],[3656277643115996070,[0.0,0.0]],[16456150086799119359,[0.0,0.0]],[6789459806904610761,[187.33333333333343,-194.6666666666667]],[1652964032977338610,[56.00000000000023,11.0]]],"stroke":[[6789459806904610761,0],[3656277643115996070,0],[16287649713110748258,0],[1652964032977338610,0],[16456150086799119359,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":6789459806904610761},{"ty":"Primary","segment":1652964032977338610}],[{"ty":"End","segment":16287649713110748258},{"ty":"Primary","segment":16456150086799119359}]],"remove_g1_continuous":[[{"ty":"End","segment":1652964032977338610},{"ty":"Primary","segment":1848051273241122771}],[{"ty":"End","segment":3656277643115996070},{"ty":"Primary","segment":6789459806904610761}]]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null,"size":464,"align":8}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[5877930116725120460,{"inputs":[{"Node":{"node_id":4470272391975492611,"output_index":0,"lambda":false}},{"Node":{"node_id":1258994191538244490,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14516211820212764316,{"inputs":[{"Node":{"node_id":17299978721726771610,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[0.0,416.7]},"exposed":false}},{"Value":{"tagged_value":{"F64":30.6},"exposed":false}},{"Value":{"tagged_value":{"U32":8},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::RepeatNode"}},"visible":true,"skip_deduplication":false}],[3471746866096043087,{"inputs":[{"Node":{"node_id":5486211022469996717,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.3137255,"green":0.44705883,"blue":0.45490196,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[7480253252288032958,{"inputs":[{"Node":{"node_id":7104261880154687267,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.8509804,"green":0.24313726,"blue":0.18431373,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.8509804,"green":0.24313726,"blue":0.18431373,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[4809200889774783438,{"inputs":[{"Node":{"node_id":3109716240255919254,"output_index":0,"lambda":false}},{"Node":{"node_id":14139129879376457893,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16304636129468583592,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"transform":[1.0,0.0,0.0,1.0,0.0,0.0],"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"line_cap":"Butt","line_join":"Miter","line_join_miter_limit":4.0,"transform":[1.0,0.0,0.0,1.0,0.0,0.0]},"fill":"None"},"alpha_blending":{"opacity":1.0,"blend_mode":"Normal"},"colinear_manipulators":[],"point_domain":{"id":[],"positions":[]},"segment_domain":{"ids":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"ids":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[4648964341912884959,10156053545530752213,16569120368910754547],"remove":[],"delta":[[4648964341912884959,[665.0000000000001,768.0]],[16569120368910754547,[1361.0,768.0]],[10156053545530752213,[1094.162353515625,594.2965698242188]]]},"segments":{"add":[9030015329489789075,2197140374690997530,3433930674303663828],"remove":[],"start_point":[[2197140374690997530,10156053545530752213],[9030015329489789075,4648964341912884959],[3433930674303663828,16569120368910754547]],"end_point":[[2197140374690997530,16569120368910754547],[9030015329489789075,10156053545530752213],[3433930674303663828,4648964341912884959]],"handle_primary":[[3433930674303663828,[0.0,0.0]],[2197140374690997530,[79.20069951994813,30.807024746222492]],[9030015329489789075,[32.66666666666663,-95.99999999999989]]],"handle_end":[[2197140374690997530,[-24.333333333333485,-86.99999999999977]],[9030015329489789075,[-238.88331323750492,-92.9194336284096]],[3433930674303663828,[0.0,0.0]]],"stroke":[[9030015329489789075,0],[2197140374690997530,0],[3433930674303663828,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":9030015329489789075},{"ty":"Primary","segment":2197140374690997530}]],"remove_g1_continuous":[[{"ty":"Primary","segment":9030015329489789075},{"ty":"End","segment":3433930674303663828}],[{"ty":"End","segment":2197140374690997530},{"ty":"Primary","segment":3433930674303663828}]]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null,"size":464,"align":8}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2871608309888343463,{"inputs":[{"Node":{"node_id":12494428953087324640,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[0.0,200.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":8},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::RepeatNode"}},"visible":true,"skip_deduplication":false}],[5488285068107445023,{"inputs":[{"Node":{"node_id":7667878689218439065,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"BooleanOperation":"SubtractFront"},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null,"size":104,"align":8}},"import_index":1}}],"manual_composition":null,"implementation":{"ProtoNode":{"name":"graphene_std::vector::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::ImpureMemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3050731459444225191,{"inputs":[{"Node":{"node_id":682567808439406093,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[0.0,200.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":12},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::RepeatNode"}},"visible":true,"skip_deduplication":false}],[16306737306999003555,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"transform":[1.0,0.0,0.0,1.0,0.0,0.0],"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"line_cap":"Butt","line_join":"Miter","line_join_miter_limit":4.0,"transform":[1.0,0.0,0.0,1.0,0.0,0.0]},"fill":"None"},"alpha_blending":{"opacity":1.0,"blend_mode":"Normal"},"colinear_manipulators":[],"point_domain":{"id":[],"positions":[]},"segment_domain":{"ids":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"ids":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[6082833770141706533,7903705226822768120,17147466439590042359,13341364271767916194],"remove":[],"delta":[[7903705226822768120,[497.3827160493826,248.88888888888889]],[6082833770141706533,[504.0987654320987,184.6255144032922]],[13341364271767916194,[262.22222222222223,364.1481481481481]],[17147466439590042359,[526.0109927536641,282.1042175292969]]]},"segments":{"add":[14649965831690031908,801877719748058643,9659144961849433642,2255088856072565305],"remove":[],"start_point":[[2255088856072565305,13341364271767916194],[14649965831690031908,6082833770141706533],[9659144961849433642,17147466439590042359],[801877719748058643,7903705226822768120]],"end_point":[[801877719748058643,17147466439590042359],[2255088856072565305,6082833770141706533],[14649965831690031908,7903705226822768120],[9659144961849433642,13341364271767916194]],"handle_primary":[[9659144961849433642,[0.0,0.0]],[801877719748058643,[13.173601585124231,23.615912208504938]],[2255088856072565305,[0.0,0.0]],[14649965831690031908,[0.0,0.0]]],"handle_end":[[2255088856072565305,[-112.09876543209862,43.81893004115227]],[9659144961849433642,[195.55555555555569,-16.14814814814804]],[14649965831690031908,[-17.920501046401128,-32.12553353079403]],[801877719748058643,[0.0,0.0]]],"stroke":[[2255088856072565305,0],[801877719748058643,0],[9659144961849433642,0],[14649965831690031908,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":801877719748058643},{"ty":"Primary","segment":9659144961849433642}],[{"ty":"End","segment":14649965831690031908},{"ty":"Primary","segment":801877719748058643}]],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null,"size":464,"align":8}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[8297015715799006244,{"inputs":[{"Node":{"node_id":6484183251661832039,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[0.0,407.5]},"exposed":false}},{"Value":{"tagged_value":{"F64":23.8},"exposed":false}},{"Value":{"tagged_value":{"U32":8},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::RepeatNode"}},"visible":true,"skip_deduplication":false}],[12867379765049504290,{"inputs":[{"Node":{"node_id":6445954214067437701,"output_index":0,"lambda":false}},{"Node":{"node_id":8863346544623578893,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17740496701763775226,{"inputs":[{"Node":{"node_id":13027689870767713939,"output_index":0,"lambda":false}},{"Node":{"node_id":16609137733952262762,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14808063168960305551,{"inputs":[{"Node":{"node_id":14496934933990319842,"output_index":0,"lambda":false}},{"Node":{"node_id":3471746866096043087,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12494428953087324640,{"inputs":[{"Node":{"node_id":8511737864852441844,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[300.0,50.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":12},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::RepeatNode"}},"visible":true,"skip_deduplication":false}],[15817956847588799375,{"inputs":[{"Node":{"node_id":11201759760883367635,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.3137255,"green":0.44705883,"blue":0.45490196,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.3137255,"green":0.44705883,"blue":0.45490196,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[2287485748649359627,{"inputs":[{"Node":{"node_id":804622576568168609,"output_index":0,"lambda":false}},{"Node":{"node_id":5449860184735415958,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13646498613066619660,{"inputs":[{"Node":{"node_id":12741076678082295759,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null,"size":104,"align":8}},"import_index":1}}],"manual_composition":null,"implementation":{"ProtoNode":{"name":"graphene_std::vector::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::memo::ImpureMemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1809704172129195322,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":20.0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"()","alias":null,"size":0,"align":1}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::generator_nodes::CircleNode"}},"visible":true,"skip_deduplication":false}],[876963243827503916,{"inputs":[{"Node":{"node_id":7651693425519490419,"output_index":0,"lambda":false}},{"Node":{"node_id":17223836790030950966,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7376049709233607419,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"transform":[1.0,0.0,0.0,1.0,0.0,0.0],"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"line_cap":"Butt","line_join":"Miter","line_join_miter_limit":4.0,"transform":[1.0,0.0,0.0,1.0,0.0,0.0]},"fill":"None"},"alpha_blending":{"opacity":1.0,"blend_mode":"Normal"},"colinear_manipulators":[],"point_domain":{"id":[],"positions":[]},"segment_domain":{"ids":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"ids":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[16958489363675356032,7347160684180114694,4322398537034510509,3438797896265725901,16005438712872589849,1674257131044231065,10491326691824745018,9374180853656949931,13358295350421759755,15245407364463454564],"remove":[],"delta":[[1674257131044231065,[829.4320987654323,121.67901234567904]],[16005438712872589849,[817.1851851851852,94.61728395061728]],[13358295350421759755,[778.4691358024693,177.1851851851852]],[4322398537034510509,[776.888888888889,117.53086419753087]],[16958489363675356032,[658.172839506173,169.08641975308643]],[3438797896265725901,[795.4567901234569,94.41975308641976]],[7347160684180114694,[772.1481481481483,138.66666666666669]],[15245407364463454564,[773.530864197531,141.4320987654321]],[10491326691824745018,[811.851851851852,148.54320987654322]],[9374180853656949931,[784.0000000000002,176.98765432098767]]]},"segments":{"add":[11663644781855838202,198953627342130434,8327087349631976772,13015157349146777770,8528911024810728168,3235570761188242773,16847383896493391194,16846650637386857857,3784798568712268630,12873317883441611394],"remove":[],"start_point":[[13015157349146777770,3438797896265725901],[12873317883441611394,15245407364463454564],[8327087349631976772,4322398537034510509],[11663644781855838202,16958489363675356032],[198953627342130434,7347160684180114694],[3235570761188242773,1674257131044231065],[16846650637386857857,9374180853656949931],[16847383896493391194,10491326691824745018],[8528911024810728168,16005438712872589849],[3784798568712268630,13358295350421759755]],"end_point":[[11663644781855838202,7347160684180114694],[12873317883441611394,16958489363675356032],[3235570761188242773,10491326691824745018],[13015157349146777770,16005438712872589849],[198953627342130434,4322398537034510509],[8327087349631976772,3438797896265725901],[3784798568712268630,15245407364463454564],[16847383896493391194,9374180853656949931],[16846650637386857857,13358295350421759755],[8528911024810728168,1674257131044231065]],"handle_primary":[[12873317883441611394,[-19.75308641975323,2.172839506172835]],[198953627342130434,[0.0,0.3950617283950635]],[8327087349631976772,[-0.19753086419757435,-13.82716049382715]],[11663644781855838202,[0.0,0.0]],[16847383896493391194,[-17.185185185185105,13.234567901234584]],[16846650637386857857,[0.0,0.0]],[3784798568712268630,[-2.962962962963161,-10.864197530864232]],[3235570761188242773,[0.1975308641974607,7.703703703703709]],[13015157349146777770,[0.0,0.0]],[8528911024810728168,[5.530864197530946,5.925925925925924]]],"handle_end":[[3235570761188242773,[17.185185185185105,-13.234567901234584]],[11663644781855838202,[-74.27160493827171,29.03703703703698]],[12873317883441611394,[33.382716049382566,14.222222222222172]],[16847383896493391194,[0.0,0.0]],[8528911024810728168,[-0.1975308641974607,-7.703703703703709]],[16846650637386857857,[0.0,0.0]],[3784798568712268630,[2.9629629629629335,5.135802469135797]],[8327087349631976772,[0.0,0.0]],[13015157349146777770,[-5.530864197530946,-5.925925925925924]],[198953627342130434,[0.19753086419757435,13.82716049382715]]],"stroke":[[3784798568712268630,0],[3235570761188242773,0],[16847383896493391194,0],[198953627342130434,0],[11663644781855838202,0],[8327087349631976772,0],[8528911024810728168,0],[16846650637386857857,0],[12873317883441611394,0],[13015157349146777770,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":8528911024810728168},{"ty":"Primary","segment":3235570761188242773}],[{"ty":"End","segment":8327087349631976772},{"ty":"Primary","segment":13015157349146777770}],[{"ty":"End","segment":16847383896493391194},{"ty":"Primary","segment":16846650637386857857}],[{"ty":"End","segment":3235570761188242773},{"ty":"Primary","segment":16847383896493391194}],[{"ty":"End","segment":198953627342130434},{"ty":"Primary","segment":8327087349631976772}],[{"ty":"End","segment":13015157349146777770},{"ty":"Primary","segment":8528911024810728168}]],"remove_g1_continuous":[[{"ty":"End","segment":16846650637386857857},{"ty":"Primary","segment":3784798568712268630}],[{"ty":"End","segment":3784798568712268630},{"ty":"Primary","segment":12873317883441611394}]]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null,"size":464,"align":8}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7667878689218439065,{"inputs":[{"Node":{"node_id":18271512507682813443,"output_index":0,"lambda":false}},{"Node":{"node_id":5449860184735415958,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14030142873804552388,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"transform":[1.0,0.0,0.0,1.0,0.0,0.0],"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"line_cap":"Butt","line_join":"Miter","line_join_miter_limit":4.0,"transform":[1.0,0.0,0.0,1.0,0.0,0.0]},"fill":"None"},"alpha_blending":{"opacity":1.0,"blend_mode":"Normal"},"colinear_manipulators":[],"point_domain":{"id":[],"positions":[]},"segment_domain":{"ids":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"ids":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[11163144542703672167,7233902871991446034,9403888920678312544,5714042674660607880,9912917483675332510],"remove":[],"delta":[[5714042674660607880,[1536.0,0.0]],[7233902871991446034,[908.0,134.0]],[9912917483675332510,[1536.0,254.00000000000009]],[11163144542703672167,[763.0,0.0]],[9403888920678312544,[1271.0,199.0]]]},"segments":{"add":[7099980686025805826,11879054056208937348,7804540624589615499,3118709054343469746,12085471811343146506],"remove":[8174738144062904321],"start_point":[[3118709054343469746,9403888920678312544],[12085471811343146506,9912917483675332510],[7804540624589615499,5714042674660607880],[11879054056208937348,7233902871991446034],[7099980686025805826,11163144542703672167]],"end_point":[[12085471811343146506,5714042674660607880],[7099980686025805826,7233902871991446034],[11879054056208937348,9403888920678312544],[7804540624589615499,11163144542703672167],[3118709054343469746,9912917483675332510]],"handle_primary":[[12085471811343146506,[0.0,0.0]],[7804540624589615499,[0.0,0.0]],[3118709054343469746,[191.0,-106.0]],[7099980686025805826,[0.0,0.0]],[11879054056208937348,[68.41365603453937,54.51084151791355]]],"handle_end":[[11879054056208937348,[-121.83694366711715,67.61631428646292]],[12085471811343146506,[0.0,0.0]],[7099980686025805826,[-68.41365603453914,-54.51084151791349]],[3118709054343469746,[0.0,0.0]],[7804540624589615499,[0.0,0.0]]],"stroke":[[7099980686025805826,0],[3118709054343469746,0],[11879054056208937348,0],[7804540624589615499,0],[12085471811343146506,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":7099980686025805826},{"ty":"Primary","segment":11879054056208937348}],[{"ty":"End","segment":11879054056208937348},{"ty":"Primary","segment":3118709054343469746}],[{"ty":"End","segment":11879054056208937348},{"ty":"Primary","segment":8174738144062904321}]],"remove_g1_continuous":[[{"ty":"End","segment":3118709054343469746},{"ty":"Primary","segment":12085471811343146506}]]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null,"size":464,"align":8}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]},"network_metadata":{"persistent_metadata":{"node_metadata":[[4421418468606442725,{"persistent_metadata":{"reference":"Fill","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[2834866505092039323,{"persistent_metadata":{"reference":"Merge","display_name":"","input_names":["Graphical Data","Over"],"output_names":["Out"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14257963317028524134,{"persistent_metadata":{"reference":"Merge","display_name":"","input_names":["Graphical Data","Over"],"output_names":["Out"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13446205009526451196,{"persistent_metadata":{"reference":"Fill","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[5856350938151339368,{"persistent_metadata":{"reference":"Path","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6616450276140292763,{"persistent_metadata":{"reference":"Path","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8269257328703012432,{"persistent_metadata":{"reference":"Fill","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17735408893002232096,{"persistent_metadata":{"reference":"Fill","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[18053728639616073084,{"persistent_metadata":{"reference":"Fill","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[10286817149456341619,{"persistent_metadata":{"reference":"Path","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[18087203100637857224,{"persistent_metadata":{"reference":"Path","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,45]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[990192925663920333,{"persistent_metadata":{"reference":"Repeat","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[9563008199132558110,{"persistent_metadata":{"reference":"Fill","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[6484183251661832039,{"persistent_metadata":{"reference":"Repeat","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17603523494627491590,{"persistent_metadata":{"reference":"Merge","display_name":"Lip Top","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11201759760883367635,{"persistent_metadata":{"reference":"Path","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-71,54]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[682567808439406093,{"persistent_metadata":{"reference":"Repeat","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17351444026127625357,{"persistent_metadata":{"reference":"Merge","display_name":"Face Black","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8566844905246185636,{"persistent_metadata":{"reference":"Merge","display_name":"Mouth Orange","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11196821089257149774,{"persistent_metadata":{"reference":"Merge","display_name":"","input_names":["Graphical Data","Over"],"output_names":["Out"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14141479077115894852,{"persistent_metadata":{"reference":"Merge","display_name":"","input_names":["Graphical Data","Over"],"output_names":["Out"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-57,77]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16785043320296790229,{"persistent_metadata":{"reference":"Stroke","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,45]}}},"network_metadata":null}}],[4807760870555738383,{"persistent_metadata":{"reference":"Merge","display_name":"Top Right Main Orange","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17952673493105230490,{"persistent_metadata":{"reference":"Stroke","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,113]}}},"network_metadata":null}}],[12867379765049504290,{"persistent_metadata":{"reference":"Merge","display_name":"","input_names":["Graphical Data","Over"],"output_names":["Out"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7755499790391969923,{"persistent_metadata":{"reference":"Circle","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[2871608309888343463,{"persistent_metadata":{"reference":"Repeat","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[6852799892628327372,{"persistent_metadata":{"reference":"Merge","display_name":"Head Orange","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4301099429811409147,{"persistent_metadata":{"reference":"Transform","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15433707377961038695,{"persistent_metadata":{"reference":"Path","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-63,77]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3109716240255919254,{"persistent_metadata":{"reference":"Merge","display_name":"Front Eyebrow","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9808637865669223270,{"persistent_metadata":{"reference":"Fill","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[13353438235848911576,{"persistent_metadata":{"reference":"Path","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12922148192688274227,{"persistent_metadata":{"reference":"Transform","display_name":"","input_names":["Vector Data","Translation","Rotation","Scale","Skew","Pivot"],"output_names":["Data"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14228923746783465609,{"persistent_metadata":{"reference":"Path","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,115]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13916027199283115943,{"persistent_metadata":{"reference":"Fill","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[13203761224559198689,{"persistent_metadata":{"reference":"Merge","display_name":"Front Eye Shadow","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14139129879376457893,{"persistent_metadata":{"reference":"Fill","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17036604842139972912,{"persistent_metadata":{"reference":"Merge","display_name":"Hair Dots Blue","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17299978721726771610,{"persistent_metadata":{"reference":"Repeat","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17495267820524300686,{"persistent_metadata":{"reference":"Transform","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12276520439585231336,{"persistent_metadata":{"reference":"Transform","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14950060858756810933,{"persistent_metadata":{"reference":"Path","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-71,50]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15930698052919171086,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"","input_names":["Graphical Data","Operation"],"output_names":["Vector"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Cache","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1001728975241745659,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"","input_names":["Graphical Data","Operation"],"output_names":["Vector"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Cache","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14808063168960305551,{"persistent_metadata":{"reference":"Merge","display_name":"Face Blue","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7104261880154687267,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"","input_names":["Graphical Data","Operation"],"output_names":["Vector"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Cache","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13739729101529293427,{"persistent_metadata":{"reference":"Merge","display_name":"","input_names":["Graphical Data","Over"],"output_names":["Out"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3471746866096043087,{"persistent_metadata":{"reference":"Fill","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[18003287685830153881,{"persistent_metadata":{"reference":"Path","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,62]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15354358358546908017,{"persistent_metadata":{"reference":"Fill","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[4560146526699152877,{"persistent_metadata":{"reference":"Merge","display_name":"","input_names":["Graphical Data","Over"],"output_names":["Out"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10080296672372912698,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"","input_names":["Graphical Data","Operation"],"output_names":["Vector"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Cache","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14516211820212764316,{"persistent_metadata":{"reference":"Repeat","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[18271512507682813443,{"persistent_metadata":{"reference":"Path","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5954536408321808728,{"persistent_metadata":{"reference":"Path","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[140396870212231820,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"","input_names":["Graphical Data","Operation"],"output_names":["Vector"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Cache","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1627123781166851142,{"persistent_metadata":{"reference":"Merge","display_name":"Top Right Corner Orange","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10760002922115563021,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"","input_names":["Graphical Data","Operation"],"output_names":["Vector"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Cache","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12004065064978143915,{"persistent_metadata":{"reference":"Path","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3750439930725791025,{"persistent_metadata":{"reference":"Merge","display_name":"","input_names":["Graphical Data","Over"],"output_names":["Out"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2287485748649359627,{"persistent_metadata":{"reference":"Merge","display_name":"","input_names":["Graphical Data","Over"],"output_names":["Out"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14684142559936015947,{"persistent_metadata":{"reference":"Fill","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[11684705487012407227,{"persistent_metadata":{"reference":"Fill","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[5488285068107445023,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"","input_names":["Graphical Data","Operation"],"output_names":["Vector"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Cache","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4102754869474520966,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"","input_names":["Graphical Data","Operation"],"output_names":["Vector"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Cache","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15692102598187739001,{"persistent_metadata":{"reference":"Merge","display_name":"","input_names":["Graphical Data","Over"],"output_names":["Out"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-64,47]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6726954210929537972,{"persistent_metadata":{"reference":"Path","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12494428953087324640,{"persistent_metadata":{"reference":"Repeat","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[16177422101884031678,{"persistent_metadata":{"reference":"Fill","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[7480253252288032958,{"persistent_metadata":{"reference":"Fill","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[16609137733952262762,{"persistent_metadata":{"reference":"Fill","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[8359580532088731394,{"persistent_metadata":{"reference":"Fill","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[15817956847588799375,{"persistent_metadata":{"reference":"Fill","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[13027689870767713939,{"persistent_metadata":{"reference":"Merge","display_name":"Bottom Black - Dots","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5888633415105234509,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"","input_names":["Graphical Data","Operation"],"output_names":["Vector"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Cache","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11373527190663101881,{"persistent_metadata":{"reference":"Path","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9135110142507605216,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"","input_names":["Graphical Data","Operation"],"output_names":["Vector"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Cache","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6787585796949551500,{"persistent_metadata":{"reference":"Merge","display_name":"Hair Strand 1","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-8,12]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10265035897167064154,{"persistent_metadata":{"reference":"Fill","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[14496934933990319842,{"persistent_metadata":{"reference":"Merge","display_name":"Bottom Left Blue","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[18081743490344004315,{"persistent_metadata":{"reference":"Merge","display_name":"Hair Dots Orange","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[392274448837115448,{"persistent_metadata":{"reference":"Artboard","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-4,9]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Artboard","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-10,-3]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-2,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Append Artboards","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[6,-4]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15900830679378240619,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"","input_names":["Graphical Data","Operation"],"output_names":["Vector"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Cache","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[18188505856445531484,{"persistent_metadata":{"reference":"Fill","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[6194305264313730032,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"","input_names":["Graphical Data","Operation"],"output_names":["Vector"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Cache","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14698962747138962125,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"","input_names":["Graphical Data","Operation"],"output_names":["Vector"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Cache","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17740294143355019755,{"persistent_metadata":{"reference":"Fill","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[4328376070224119511,{"persistent_metadata":{"reference":"Merge","display_name":"Bottom Orange","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1258994191538244490,{"persistent_metadata":{"reference":"Fill","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[14030142873804552388,{"persistent_metadata":{"reference":"Path","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-36,56]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[18095952297474762348,{"persistent_metadata":{"reference":"Merge","display_name":"","input_names":["Graphical Data","Over"],"output_names":["Out"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12234961922142600898,{"persistent_metadata":{"reference":"Merge","display_name":"Top Right Black","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Layer":{"position":{"Stack":2}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12145355397916841389,{"persistent_metadata":{"reference":"Fill","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[1809704172129195322,{"persistent_metadata":{"reference":"Circle","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[7667878689218439065,{"persistent_metadata":{"reference":"Merge","display_name":"","input_names":["Graphical Data","Over"],"output_names":["Out"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[876963243827503916,{"persistent_metadata":{"reference":"Merge","display_name":"Top Right Red","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17271572793812678706,{"persistent_metadata":{"reference":"Fill","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[12709602171929957216,{"persistent_metadata":{"reference":"Merge","display_name":"Bottom Left Orange","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1508440849951861669,{"persistent_metadata":{"reference":"Merge","display_name":"Face Red","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6445954214067437701,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"","input_names":["Graphical Data","Operation"],"output_names":["Vector"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Cache","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8887924609778270360,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"","input_names":["Graphical Data","Operation"],"output_names":["Vector"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Cache","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17131529656312051452,{"persistent_metadata":{"reference":"Fill","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[2723198387862533596,{"persistent_metadata":{"reference":"Merge","display_name":"","input_names":["Graphical Data","Over"],"output_names":["Out"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11210964267417873667,{"persistent_metadata":{"reference":"Transform","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7855094781869605606,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"","input_names":["Graphical Data","Operation"],"output_names":["Vector"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,77]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Cache","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5014806436727666175,{"persistent_metadata":{"reference":"Merge","display_name":"","input_names":["Graphical Data","Over"],"output_names":["Out"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11301831865756336526,{"persistent_metadata":{"reference":"Path","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1009114585722052052,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"","input_names":["Graphical Data","Operation"],"output_names":["Vector"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-57,47]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Cache","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12353675714904258944,{"persistent_metadata":{"reference":"Merge","display_name":"Nose Shadow","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17753909951719808506,{"persistent_metadata":{"reference":"Merge","display_name":"Bottom Left Red","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5449860184735415958,{"persistent_metadata":{"reference":"Path","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-71,104]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8426490990601560741,{"persistent_metadata":{"reference":"Fill","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[11429506195623419966,{"persistent_metadata":{"reference":"Merge","display_name":"","input_names":["Graphical Data","Over"],"output_names":["Out"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1662641269094032596,{"persistent_metadata":{"reference":"Merge","display_name":"","input_names":["Graphical Data","Over"],"output_names":["Out"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13646498613066619660,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"","input_names":["Graphical Data","Operation"],"output_names":["Vector"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-36,98]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Cache","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10995640810984321903,{"persistent_metadata":{"reference":"Merge","display_name":"Lip Bottom","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7376049709233607419,{"persistent_metadata":{"reference":"Path","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[18068340617333437755,{"persistent_metadata":{"reference":"Transform","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[18031616785650843168,{"persistent_metadata":{"reference":"Solidify Stroke","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-36,113]}}},"network_metadata":null}}],[12741076678082295759,{"persistent_metadata":{"reference":"Merge","display_name":"","input_names":["Graphical Data","Over"],"output_names":["Out"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,98]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16671141883125519098,{"persistent_metadata":{"reference":"Fill","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[3214181946162459584,{"persistent_metadata":{"reference":"Fill","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[7651693425519490419,{"persistent_metadata":{"reference":"Merge","display_name":"Top Right Blue","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14690269209726153565,{"persistent_metadata":{"reference":"Fill","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[1097494158696050491,{"persistent_metadata":{"reference":"Circle","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[8511737864852441844,{"persistent_metadata":{"reference":"Circle","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[4809200889774783438,{"persistent_metadata":{"reference":"Merge","display_name":"Front Eye","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17285637344898461972,{"persistent_metadata":{"reference":"Path","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-63,71]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7201841978411396053,{"persistent_metadata":{"reference":"Merge","display_name":"Bottom Black","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Layer":{"position":{"Stack":2}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13588160462734303101,{"persistent_metadata":{"reference":"Merge","display_name":"Hair Dots Red","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17223836790030950966,{"persistent_metadata":{"reference":"Fill","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[1491840484128555837,{"persistent_metadata":{"reference":"Merge","display_name":"Face Shadow","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16306737306999003555,{"persistent_metadata":{"reference":"Path","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15301503532602557206,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"","input_names":["Graphical Data","Operation"],"output_names":["Vector"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Cache","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16999130951959724657,{"persistent_metadata":{"reference":"Path","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12185047359007423618,{"persistent_metadata":{"reference":"Fill","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[13340751444307201866,{"persistent_metadata":{"reference":"Fill","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[18351415092709164412,{"persistent_metadata":{"reference":"Fill","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[8863346544623578893,{"persistent_metadata":{"reference":"Path","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-50,80]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3050731459444225191,{"persistent_metadata":{"reference":"Repeat","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17397123104674848450,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"","input_names":["Graphical Data","Operation"],"output_names":["Vector"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Cache","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6728362629909402903,{"persistent_metadata":{"reference":"Merge","display_name":"","input_names":["Graphical Data","Over"],"output_names":["Out"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4470272391975492611,{"persistent_metadata":{"reference":"Merge","display_name":"Rose Sliver Silhouette","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2185437945364824599,{"persistent_metadata":{"reference":"Merge","display_name":"Bottom Left White","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11264395591110193456,{"persistent_metadata":{"reference":"Circle","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[12770183061753030023,{"persistent_metadata":{"reference":"Merge","display_name":"","input_names":["Graphical Data","Over"],"output_names":["Out"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4771789845668099116,{"persistent_metadata":{"reference":"Merge","display_name":"Cheek Shadow","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13670206802546093234,{"persistent_metadata":{"reference":"Merge","display_name":"","input_names":["Graphical Data","Over"],"output_names":["Out"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11095670964487764044,{"persistent_metadata":{"reference":"Merge","display_name":"Hair Strand 2","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14139765080256493579,{"persistent_metadata":{"reference":"Path","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-71,118]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13602951545837529973,{"persistent_metadata":{"reference":"Fill","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[5486211022469996717,{"persistent_metadata":{"reference":"Path","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-43,65]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16304636129468583592,{"persistent_metadata":{"reference":"Path","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-71,115]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5877930116725120460,{"persistent_metadata":{"reference":"Merge","display_name":"Rear Eyelash","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[804622576568168609,{"persistent_metadata":{"reference":"Path","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2025899804080897524,{"persistent_metadata":{"reference":"Merge","display_name":"Face White","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6468742191365679953,{"persistent_metadata":{"reference":"Path","display_name":"","input_names":["Vector Data","Modification"],"output_names":["Vector Data"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17740496701763775226,{"persistent_metadata":{"reference":"Merge","display_name":"Bottom Blue","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8297015715799006244,{"persistent_metadata":{"reference":"Repeat","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[7018444885869143173,{"persistent_metadata":{"reference":"Merge","display_name":"Top Right Black - Dots","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8460565235419043665,{"persistent_metadata":{"reference":"Repeat","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[7104088139635280554,{"persistent_metadata":{"reference":"Solidify Stroke","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-36,45]}}},"network_metadata":null}}],[16759836951269190891,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"","input_names":["Graphical Data","Operation"],"output_names":["Vector"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Cache","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17562801632450633291,{"persistent_metadata":{"reference":"Merge","display_name":"","input_names":["Graphical Data","Over"],"output_names":["Out"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11312003311374164325,{"persistent_metadata":{"reference":"Fill","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[816.1084477087345,-1547.8069517853935],"tilt":0.0,"zoom":0.4168731231231231},"node_graph_to_viewport":[0.4168731231231231,0.0,0.0,0.4168731231231231,1331.0,-60.999999999999886],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[[],[],[]],"selection_redo_history":[]}}},"collapsed":[],"name":"painted-dreams.graphite","commit_hash":"3a591dac6a53454813c8df6ceed5b44b91d1e816","document_ptz":{"pan":[-767.828955980962,-384.44760387523434],"tilt":0.0,"zoom":1.0},"document_mode":"DesignMode","view_mode":"Normal","overlays_visible":true,"rulers_visible":true,"graph_view_overlay_open":false,"snapping_state":{"snapping_enabled":true,"grid_snapping":false,"bounds":{"edges":true,"corners":true,"edge_midpoints":false,"centers":true,"align":true,"distribute":true},"nodes":{"paths":true,"path_intersections":true,"anchors":true,"line_midpoints":true,"normals":true,"tangents":true,"align":false},"grid":{"origin":[0.0,0.0],"grid_type":{"Rectangle":{"spacing":[1.0,1.0]}},"grid_color":{"red":0.6038274,"green":0.6038274,"blue":0.6038274,"alpha":1.0},"dot_display":false},"tolerance":8.0,"artboards":true}} \ No newline at end of file +{"network_interface":{"network":{"exports":[{"Node":{"node_id":392274448837115448,"output_index":0,"lambda":false}}],"nodes":[[13353438235848911576,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"transform":[1.0,0.0,0.0,1.0,0.0,0.0],"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"line_cap":"Butt","line_join":"Miter","line_join_miter_limit":4.0,"transform":[1.0,0.0,0.0,1.0,0.0,0.0]},"fill":"None"},"alpha_blending":{"opacity":1.0,"blend_mode":"Normal"},"colinear_manipulators":[],"point_domain":{"id":[],"positions":[]},"segment_domain":{"ids":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"ids":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[6379137305818664393,18442321214082298093,18118267825025549699,6351696498298648253,17863574903157697896,4691860614575868200,301778328144628917,10625296323957562985,533731991408535384,13357220652574593654,15992617814592812350],"remove":[],"delta":[[17863574903157697896,[606.8148151308641,95.19407372365433]],[18118267825025549699,[642.0740740740741,0.0]],[4691860614575868200,[528.2962962962963,283.8518518518518]],[301778328144628917,[493.5149940383244,200.29629629629628]],[18442321214082298093,[565.6296296296297,122.96296296296298]],[533731991408535384,[501.6296296296296,175.40740740740742]],[13357220652574593654,[574.2222222222222,108.44444444444449]],[15992617814592812350,[621.0370370370368,0.0]],[6351696498298648253,[646.8148148148149,0.0]],[10625296323957562985,[473.4814814814815,272.5925925925926]],[6379137305818664393,[625.4814814814813,0.0]]]},"segments":{"add":[13662059715350867364,3384102572540409881,12035095010819582754,10146665273368938971,318560030360358929,8462655819889292900,3303411878775644985,8661113083384527971,2035327810332855521,11346538709718766144,3710133387837274291],"remove":[],"start_point":[[11346538709718766144,13357220652574593654],[3710133387837274291,15992617814592812350],[3384102572540409881,18442321214082298093],[10146665273368938971,6351696498298648253],[2035327810332855521,533731991408535384],[13662059715350867364,6379137305818664393],[8462655819889292900,4691860614575868200],[318560030360358929,17863574903157697896],[3303411878775644985,301778328144628917],[8661113083384527971,10625296323957562985],[12035095010819582754,18118267825025549699]],"end_point":[[11346538709718766144,15992617814592812350],[8462655819889292900,301778328144628917],[10146665273368938971,17863574903157697896],[13662059715350867364,18442321214082298093],[8661113083384527971,533731991408535384],[3384102572540409881,18118267825025549699],[3710133387837274291,6379137305818664393],[12035095010819582754,6351696498298648253],[318560030360358929,4691860614575868200],[2035327810332855521,13357220652574593654],[3303411878775644985,10625296323957562985]],"handle_primary":[[3710133387837274291,[0.0,0.0]],[12035095010819582754,[0.0,0.0]],[318560030360358929,[-46.95465552079859,46.40007297527743]],[10146665273368938971,[0.0,0.0]],[3384102572540409881,[0.0,0.0]],[13662059715350867364,[0.0,0.0]],[11346538709718766144,[9.925839724176626,-9.951533978271286]],[8661113083384527971,[0.2962962962963047,0.2962962962963047]],[3303411878775644985,[0.0,0.0]],[2035327810332855521,[42.96296296296293,-41.7777777777778]],[8462655819889292900,[0.0,0.0]]],"handle_end":[[8462655819889292900,[-21.74426522093495,47.99999999999997]],[13662059715350867364,[68.68148181185177,-54.8859262904691]],[3303411878775644985,[-6.2222222222222285,-40.59259259259261]],[12035095010819582754,[0.0,0.0]],[8661113083384527971,[-42.34888386913234,41.180638796880466]],[3384102572540409881,[0.5807410754567854,77.36888852918523]],[2035327810332855521,[-8.299214014278164,8.32069754812484]],[11346538709718766144,[1.1377781018271662,63.71555518874077]],[10146665273368938971,[48.16592595101224,-47.597037061827145]],[318560030360358929,[-97.48148148148152,-81.18518518518522]],[3710133387837274291,[0.0,0.0]]],"stroke":[[2035327810332855521,0],[12035095010819582754,0],[3384102572540409881,0],[3710133387837274291,0],[318560030360358929,0],[8661113083384527971,0],[3303411878775644985,0],[10146665273368938971,0],[11346538709718766144,0],[13662059715350867364,0],[8462655819889292900,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":10146665273368938971},{"ty":"Primary","segment":318560030360358929}],[{"ty":"End","segment":12035095010819582754},{"ty":"Primary","segment":10146665273368938971}],[{"ty":"End","segment":8661113083384527971},{"ty":"Primary","segment":2035327810332855521}],[{"ty":"Primary","segment":11346538709718766144},{"ty":"End","segment":2035327810332855521}]],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null,"size":464,"align":8}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16671141883125519098,{"inputs":[{"Node":{"node_id":16306737306999003555,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.92156863,"green":0.6039216,"blue":0.18039216,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[6445954214067437701,{"inputs":[{"Node":{"node_id":13670206802546093234,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"BooleanOperation":"SubtractFront"},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null,"size":104,"align":8}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_std::vector::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::ImpureMemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[140396870212231820,{"inputs":[{"Node":{"node_id":18095952297474762348,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null,"size":104,"align":8}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_std::vector::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::ImpureMemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[5449860184735415958,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"transform":[1.0,0.0,0.0,1.0,0.0,0.0],"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"line_cap":"Butt","line_join":"Miter","line_join_miter_limit":4.0,"transform":[1.0,0.0,0.0,1.0,0.0,0.0]},"fill":"None"},"alpha_blending":{"opacity":1.0,"blend_mode":"Normal"},"colinear_manipulators":[],"point_domain":{"id":[],"positions":[]},"segment_domain":{"ids":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"ids":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[17520941196305861319,6029995238423674441,16590926169549948521,12817219955590128894,4723170318056755559,12317789037775437786,17339925811006567497,4659274885664969740,1541401134848201833,17321098837874422287,11084016020553554647,9729762716079513741,13279221198527484331,7727030009292816503,15701538241214188894],"remove":[],"delta":[[4659274885664969740,[896.0,523.0]],[9729762716079513741,[585.0,666.0]],[17339925811006567497,[898.0,468.0]],[6029995238423674441,[898.0,46.0]],[12817219955590128894,[933.0,273.0]],[17520941196305861319,[889.0,0.0]],[15701538241214188894,[0.0,0.0]],[11084016020553554647,[655.0,636.0]],[1541401134848201833,[886.0,572.0]],[7727030009292816503,[0.0,768.0]],[16590926169549948521,[869.0,147.0]],[13279221198527484331,[564.0,768.0]],[17321098837874422287,[802.6666666666667,656.4444444444445]],[4723170318056755559,[923.0,349.0]],[12317789037775437786,[902.0,394.0]]]},"segments":{"add":[862900208337901235,4806484166818510930,11569179934425192262,9808624553037921371,9730229894941201870,1248401493076165062,8832757535144158913,15056691877609602335,8919277736361106420,16631919016540861133,9314952320711038398,10137845066833192587,14740183693208469558,3307452201570141575,3876401232874291775],"remove":[],"start_point":[[8832757535144158913,17339925811006567497],[3307452201570141575,7727030009292816503],[9730229894941201870,4723170318056755559],[14740183693208469558,13279221198527484331],[9808624553037921371,12817219955590128894],[1248401493076165062,12317789037775437786],[11569179934425192262,16590926169549948521],[862900208337901235,17520941196305861319],[8919277736361106420,1541401134848201833],[9314952320711038398,11084016020553554647],[10137845066833192587,9729762716079513741],[15056691877609602335,4659274885664969740],[16631919016540861133,17321098837874422287],[4806484166818510930,6029995238423674441],[3876401232874291775,15701538241214188894]],"end_point":[[9314952320711038398,9729762716079513741],[3307452201570141575,15701538241214188894],[862900208337901235,6029995238423674441],[3876401232874291775,17520941196305861319],[4806484166818510930,16590926169549948521],[11569179934425192262,12817219955590128894],[1248401493076165062,17339925811006567497],[15056691877609602335,1541401134848201833],[8919277736361106420,17321098837874422287],[14740183693208469558,7727030009292816503],[10137845066833192587,13279221198527484331],[9808624553037921371,4723170318056755559],[8832757535144158913,4659274885664969740],[9730229894941201870,12317789037775437786],[16631919016540861133,11084016020553554647]],"handle_primary":[[10137845066833192587,[-19.0,43.0]],[9730229894941201870,[-24.00371914417652,11.366922485048674]],[11569179934425192262,[-4.0,51.0]],[9808624553037921371,[18.0,36.0]],[9314952320711038398,[-34.0,-7.0]],[1248401493076165062,[21.0,27.0]],[862900208337901235,[0.0,0.0]],[3307452201570141575,[0.0,0.0]],[8832757535144158913,[14.888888888888914,4.8888888888888005]],[14740183693208469558,[0.0,0.0]],[16631919016540861133,[-63.996421719362885,-1.2074796550824587]],[15056691877609602335,[0.0,0.0]],[3876401232874291775,[0.0,0.0]],[8919277736361106420,[10.458809984597837,40.44073194044492]],[4806484166818510930,[11.595886737767424,32.210796493798]]],"handle_end":[[15056691877609602335,[-10.0,-38.66666666666663]],[9314952320711038398,[19.0,-43.0]],[8832757535144158913,[33.33333333333326,-9.666666666666742]],[3307452201570141575,[0.0,0.0]],[4806484166818510930,[3.365858386031487,-42.91469442190146]],[8919277736361106420,[70.66666666666652,1.333333333333485]],[16631919016540861133,[34.0,7.0]],[14740183693208469558,[0.0,0.0]],[1248401493076165062,[30.59259259259261,-36.59259259259255]],[862900208337901235,[-9.000000000000114,-25.0]],[3876401232874291775,[0.0,0.0]],[10137845066833192587,[0.0,0.0]],[9730229894941201870,[-21.0,-27.0]],[11569179934425192262,[-18.0,-36.0]],[9808624553037921371,[28.703703703703695,-13.592592592592496]]],"stroke":[[9730229894941201870,0],[4806484166818510930,0],[15056691877609602335,0],[14740183693208469558,0],[3307452201570141575,0],[8832757535144158913,0],[862900208337901235,0],[9314952320711038398,0],[10137845066833192587,0],[9808624553037921371,0],[8919277736361106420,0],[3876401232874291775,0],[1248401493076165062,0],[16631919016540861133,0],[11569179934425192262,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":862900208337901235},{"ty":"Primary","segment":4806484166818510930}],[{"ty":"End","segment":10137845066833192587},{"ty":"Primary","segment":14740183693208469558}],[{"ty":"End","segment":8919277736361106420},{"ty":"Primary","segment":16631919016540861133}],[{"ty":"End","segment":14740183693208469558},{"ty":"Primary","segment":3307452201570141575}],[{"ty":"End","segment":4806484166818510930},{"ty":"Primary","segment":11569179934425192262}],[{"ty":"End","segment":3307452201570141575},{"ty":"Primary","segment":3876401232874291775}],[{"ty":"End","segment":16631919016540861133},{"ty":"Primary","segment":9314952320711038398}],[{"ty":"End","segment":11569179934425192262},{"ty":"Primary","segment":9808624553037921371}],[{"ty":"End","segment":15056691877609602335},{"ty":"Primary","segment":8919277736361106420}],[{"ty":"End","segment":9808624553037921371},{"ty":"Primary","segment":9730229894941201870}],[{"ty":"End","segment":9730229894941201870},{"ty":"Primary","segment":1248401493076165062}],[{"ty":"End","segment":9314952320711038398},{"ty":"Primary","segment":10137845066833192587}]],"remove_g1_continuous":[[{"ty":"Primary","segment":8832757535144158913},{"ty":"End","segment":1248401493076165062}]]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null,"size":464,"align":8}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12709602171929957216,{"inputs":[{"Node":{"node_id":17753909951719808506,"output_index":0,"lambda":false}},{"Node":{"node_id":12922148192688274227,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16609137733952262762,{"inputs":[{"Node":{"node_id":17397123104674848450,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.3137255,"green":0.44705883,"blue":0.45490196,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.3137255,"green":0.44705883,"blue":0.45490196,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[7855094781869605606,{"inputs":[{"Node":{"node_id":14141479077115894852,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"BooleanOperation":"SubtractBack"},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null,"size":104,"align":8}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_std::vector::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::ImpureMemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[8460565235419043665,{"inputs":[{"Node":{"node_id":990192925663920333,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[0.0,412.1]},"exposed":false}},{"Value":{"tagged_value":{"F64":27.2},"exposed":false}},{"Value":{"tagged_value":{"U32":8},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::RepeatNode"}},"visible":true,"skip_deduplication":false}],[6194305264313730032,{"inputs":[{"Node":{"node_id":4560146526699152877,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null,"size":104,"align":8}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_std::vector::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::ImpureMemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14950060858756810933,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"transform":[1.0,0.0,0.0,1.0,0.0,0.0],"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"line_cap":"Butt","line_join":"Miter","line_join_miter_limit":4.0,"transform":[1.0,0.0,0.0,1.0,0.0,0.0]},"fill":"None"},"alpha_blending":{"opacity":1.0,"blend_mode":"Normal"},"colinear_manipulators":[],"point_domain":{"id":[],"positions":[]},"segment_domain":{"ids":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"ids":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[9346093213164033195,3249248431686392864,9577388580635291078],"remove":[],"delta":[[9346093213164033195,[1211.0,0.0]],[9577388580635291078,[1536.0,0.0]],[3249248431686392864,[1536.0,95.0]]]},"segments":{"add":[9585086796709645600,13980191878100735848,1147165232046305110],"remove":[],"start_point":[[9585086796709645600,9346093213164033195],[1147165232046305110,9577388580635291078],[13980191878100735848,3249248431686392864]],"end_point":[[13980191878100735848,9577388580635291078],[1147165232046305110,9346093213164033195],[9585086796709645600,3249248431686392864]],"handle_primary":[[1147165232046305110,[0.0,0.0]],[13980191878100735848,[4.547473508864641e-13,2.8421709430404014e-14]],[9585086796709645600,[0.0,0.0]]],"handle_end":[[13980191878100735848,[0.0,0.0]],[9585086796709645600,[-281.0,-17.00000000000003]],[1147165232046305110,[0.0,0.0]]],"stroke":[[9585086796709645600,0],[1147165232046305110,0],[13980191878100735848,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":13980191878100735848},{"ty":"Primary","segment":1147165232046305110}]],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null,"size":464,"align":8}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14698962747138962125,{"inputs":[{"Node":{"node_id":17562801632450633291,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null,"size":104,"align":8}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_std::vector::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::ImpureMemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[18031616785650843168,{"inputs":[{"Node":{"node_id":17952673493105230490,"output_index":0,"lambda":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SolidifyStrokeNode"}},"visible":true,"skip_deduplication":false}],[11196821089257149774,{"inputs":[{"Node":{"node_id":5888633415105234509,"output_index":0,"lambda":false}},{"Node":{"node_id":18031616785650843168,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[8359580532088731394,{"inputs":[{"Node":{"node_id":6726954210929537972,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[8269257328703012432,{"inputs":[{"Node":{"node_id":4102754869474520966,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.92156863,"green":0.6039216,"blue":0.18039216,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.92156863,"green":0.6039216,"blue":0.18039216,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[13203761224559198689,{"inputs":[{"Node":{"node_id":4809200889774783438,"output_index":0,"lambda":false}},{"Node":{"node_id":14690269209726153565,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13670206802546093234,{"inputs":[{"Node":{"node_id":17285637344898461972,"output_index":0,"lambda":false}},{"Node":{"node_id":7855094781869605606,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7201841978411396053,{"inputs":[{"Node":{"node_id":4328376070224119511,"output_index":0,"lambda":false}},{"Node":{"node_id":17735408893002232096,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11429506195623419966,{"inputs":[{"Node":{"node_id":11301831865756336526,"output_index":0,"lambda":false}},{"Node":{"node_id":5449860184735415958,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[9071802450034150503,{"inputs":[{"Node":{"node_id":9338394475379815879,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[12185047359007423618,{"inputs":[{"Node":{"node_id":10080296672372912698,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.3137255,"green":0.44705883,"blue":0.45490196,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.92156863,"green":0.6039216,"blue":0.18039216,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[7018444885869143173,{"inputs":[{"Node":{"node_id":12234961922142600898,"output_index":0,"lambda":false}},{"Node":{"node_id":8426490990601560741,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1001728975241745659,{"inputs":[{"Node":{"node_id":12770183061753030023,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null,"size":104,"align":8}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_std::vector::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::ImpureMemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[392274448837115448,{"inputs":[{"Value":{"tagged_value":{"ArtboardGroup":{"artboards":[]}},"exposed":true}},{"Node":{"node_id":6787585796949551500,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"IVec2":[0,0]},"exposed":false}},{"Value":{"tagged_value":{"IVec2":[1536,768]},"exposed":false}},{"Value":{"tagged_value":{"Color":{"red":0.93333334,"green":0.8627451,"blue":0.7254902,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Bool":true},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":2,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null,"size":488,"align":8}},"import_index":1}},{"Value":{"tagged_value":{"String":""},"exposed":false}},{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null,"size":488,"align":8}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null,"size":488,"align":8}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null,"size":488,"align":8}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"graph_craft::document::value::TaggedValue","alias":null,"size":488,"align":8}},"import_index":5}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToArtboardNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Network":{"import_type":{"Fn":[{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},{"Concrete":{"name":"graphene_core::graphic_element::ArtboardGroup","alias":null,"size":12,"align":4}}]},"import_index":0}},{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::AppendArtboardNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17562801632450633291,{"inputs":[{"Node":{"node_id":10286817149456341619,"output_index":0,"lambda":false}},{"Node":{"node_id":5449860184735415958,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3750439930725791025,{"inputs":[{"Node":{"node_id":12276520439585231336,"output_index":0,"lambda":false}},{"Node":{"node_id":14228923746783465609,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[682567808439406093,{"inputs":[{"Node":{"node_id":7755499790391969923,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[300.0,50.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":15},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::RepeatNode"}},"visible":true,"skip_deduplication":false}],[17740294143355019755,{"inputs":[{"Node":{"node_id":15301503532602557206,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[16759836951269190891,{"inputs":[{"Node":{"node_id":11429506195623419966,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null,"size":104,"align":8}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_std::vector::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::ImpureMemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17495267820524300686,{"inputs":[{"Node":{"node_id":3050731459444225191,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[1248.4973005620557,-153.1867628889006]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.2972951295167027},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0000000000000002,1.0000000000000002]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[5.5511151231257815e-17,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null,"size":16,"align":8}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null,"size":8,"align":8}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null,"size":16,"align":8}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null,"size":16,"align":8}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null,"size":16,"align":8}},"import_index":5}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::transform::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12234961922142600898,{"inputs":[{"Node":{"node_id":1627123781166851142,"output_index":0,"lambda":false}},{"Node":{"node_id":18351415092709164412,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11095670964487764044,{"inputs":[{"Node":{"node_id":17603523494627491590,"output_index":0,"lambda":false}},{"Node":{"node_id":8359580532088731394,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11301831865756336526,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"transform":[1.0,0.0,0.0,1.0,0.0,0.0],"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"line_cap":"Butt","line_join":"Miter","line_join_miter_limit":4.0,"transform":[1.0,0.0,0.0,1.0,0.0,0.0]},"fill":"None"},"alpha_blending":{"opacity":1.0,"blend_mode":"Normal"},"colinear_manipulators":[],"point_domain":{"id":[],"positions":[]},"segment_domain":{"ids":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"ids":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[3251241957527197760,11100418327549747778,8048619563638005414,1078998931754662073],"remove":[],"delta":[[8048619563638005414,[944.0577392578124,302.0703430175781]],[3251241957527197760,[875.8001811251517,185.6784024477276]],[11100418327549747778,[910.880658436214,243.0946502057613]],[1078998931754662073,[942.0246913580248,264.2962962962963]]]},"segments":{"add":[6165219920202055745,10795897848378052161,3439025775805007707,12551435438068218604],"remove":[],"start_point":[[12551435438068218604,1078998931754662073],[3439025775805007707,8048619563638005414],[10795897848378052161,11100418327549747778],[6165219920202055745,3251241957527197760]],"end_point":[[10795897848378052161,8048619563638005414],[6165219920202055745,11100418327549747778],[12551435438068218604,3251241957527197760],[3439025775805007707,1078998931754662073]],"handle_primary":[[10795897848378052161,[11.46027223334628,13.82427457744465]],[12551435438068218604,[-14.61728395061732,-27.456790123456813]],[3439025775805007707,[-2.629814161991817e-6,5.151861046215345e-6]],[6165219920202055745,[0.0,0.0]]],"handle_end":[[12551435438068218604,[23.33217876876199,5.204454965879364]],[3439025775805007707,[14.61728395061732,27.456790123456813]],[10795897848378052161,[-4.732636377154108,-19.33783272951229]],[6165219920202055745,[-29.36625514403283,-35.42386831275718]]],"stroke":[[12551435438068218604,0],[10795897848378052161,0],[6165219920202055745,0],[3439025775805007707,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":3439025775805007707},{"ty":"Primary","segment":12551435438068218604}],[{"ty":"End","segment":6165219920202055745},{"ty":"Primary","segment":10795897848378052161}]],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null,"size":464,"align":8}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15301503532602557206,{"inputs":[{"Node":{"node_id":6728362629909402903,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null,"size":104,"align":8}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_std::vector::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::ImpureMemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[6787585796949551500,{"inputs":[{"Node":{"node_id":11095670964487764044,"output_index":0,"lambda":false}},{"Node":{"node_id":16177422101884031678,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[18003287685830153881,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"transform":[1.0,0.0,0.0,1.0,0.0,0.0],"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"line_cap":"Butt","line_join":"Miter","line_join_miter_limit":4.0,"transform":[1.0,0.0,0.0,1.0,0.0,0.0]},"fill":"None"},"alpha_blending":{"opacity":1.0,"blend_mode":"Normal"},"colinear_manipulators":[],"point_domain":{"id":[],"positions":[]},"segment_domain":{"ids":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"ids":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[4475009837548700636,4481635366652149569,1608608093193158603,4765910415851982345],"remove":[1647009925892902058],"delta":[[1608608093193158603,[609.7777777777777,620.0]],[4481635366652149569,[684.8888888888889,395.55555555555554]],[4475009837548700636,[525.7325506063205,282.1042056224195]],[4765910415851982345,[283.33331298828125,354.6666564941406]]]},"segments":{"add":[3045825504718908919,8024777209266880257,3983292299330016176,11103925991989272298],"remove":[13489289770112164650],"start_point":[[3983292299330016176,1608608093193158603],[3045825504718908919,4475009837548700636],[8024777209266880257,4481635366652149569],[11103925991989272298,4765910415851982345]],"end_point":[[3045825504718908919,4481635366652149569],[11103925991989272298,4475009837548700636],[3983292299330016176,4765910415851982345],[8024777209266880257,1608608093193158603]],"handle_primary":[[3045825504718908919,[62.22222222222217,43.111111111111086]],[8024777209266880257,[11.111111111111086,62.22222222222217]],[11103925991989272298,[0.0,0.0]],[3983292299330016176,[0.0,0.0]]],"handle_end":[[11103925991989272298,[-113.5844024581724,39.08097956276566]],[3983292299330016176,[0.0,0.0]],[8024777209266880257,[34.66666666666674,-85.33333333333337]],[3045825504718908919,[-11.111111111111086,-62.22222222222217]]],"stroke":[[11103925991989272298,0],[8024777209266880257,0],[3045825504718908919,0],[3983292299330016176,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":3983292299330016176},{"ty":"Primary","segment":11103925991989272298}],[{"ty":"End","segment":3045825504718908919},{"ty":"Primary","segment":8024777209266880257}]],"remove_g1_continuous":[[{"ty":"End","segment":11103925991989272298},{"ty":"Primary","segment":3045825504718908919}],[{"ty":"End","segment":13489289770112164650},{"ty":"Primary","segment":3045825504718908919}]]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null,"size":464,"align":8}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12770183061753030023,{"inputs":[{"Node":{"node_id":17495267820524300686,"output_index":0,"lambda":false}},{"Node":{"node_id":1009114585722052052,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17299978721726771610,{"inputs":[{"Node":{"node_id":1809704172129195322,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[459.4,0.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":-8.6},"exposed":false}},{"Value":{"tagged_value":{"U32":5},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::RepeatNode"}},"visible":true,"skip_deduplication":false}],[9135110142507605216,{"inputs":[{"Node":{"node_id":11196821089257149774,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"BooleanOperation":"SubtractFront"},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null,"size":104,"align":8}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_std::vector::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::ImpureMemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7104261880154687267,{"inputs":[{"Node":{"node_id":2834866505092039323,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null,"size":104,"align":8}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_std::vector::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::ImpureMemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[18271512507682813443,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"transform":[1.0,0.0,0.0,1.0,0.0,0.0],"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"line_cap":"Butt","line_join":"Miter","line_join_miter_limit":4.0,"transform":[1.0,0.0,0.0,1.0,0.0,0.0]},"fill":"None"},"alpha_blending":{"opacity":1.0,"blend_mode":"Normal"},"colinear_manipulators":[],"point_domain":{"id":[],"positions":[]},"segment_domain":{"ids":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"ids":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[10872099980755217048,13049263474526562389,2409359561719399794,9175973472325454282,14263506369487797530,5496457317579994340,7125168137854779179,9658821733796680583,425878374398720476,5252668597335249558],"remove":[],"delta":[[425878374398720476,[898.633744855967,207.99999999999997]],[5496457317579994340,[929.3607681755832,198.40877914951983]],[7125168137854779179,[912.2962962962964,205.6296296296296]],[14263506369487797530,[886.5185185185185,178.66666666666669]],[9175973472325454282,[881.4814814814815,152.5925925925926]],[9658821733796680583,[920.5925925925926,208.0]],[13049263474526562389,[903.1111111111112,55.70370370370371]],[5252668597335249558,[888.2516734908237,208.88931872324497]],[2409359561719399794,[892.7407407407408,111.70370370370372]],[10872099980755217048,[889.0,0.0]]]},"segments":{"add":[16241193756011776206,13961346931609713434,6443321953815072406,13223251807271379465,6545223889678917273,9745298522639115232,8058164935346100149,9187894839116405225,5210886161307886529,11050813873332011119],"remove":[],"start_point":[[5210886161307886529,425878374398720476],[6443321953815072406,2409359561719399794],[13961346931609713434,13049263474526562389],[9187894839116405225,9658821733796680583],[16241193756011776206,10872099980755217048],[8058164935346100149,7125168137854779179],[13223251807271379465,9175973472325454282],[6545223889678917273,14263506369487797530],[9745298522639115232,5496457317579994340],[11050813873332011119,5252668597335249558]],"end_point":[[9745298522639115232,7125168137854779179],[16241193756011776206,13049263474526562389],[6545223889678917273,5496457317579994340],[8058164935346100149,9658821733796680583],[9187894839116405225,425878374398720476],[11050813873332011119,10872099980755217048],[13961346931609713434,2409359561719399794],[6443321953815072406,9175973472325454282],[5210886161307886529,5252668597335249558],[13223251807271379465,14263506369487797530]],"handle_primary":[[11050813873332011119,[-5.947146741852521,-2.1403475298293415]],[6545223889678917273,[0.0,0.0]],[13223251807271379465,[3.2812071330587287,8.329218106995853]],[9745298522639115232,[0.0,0.0]],[6443321953815072406,[-9.144953020396894,24.145964868041293]],[8058164935346100149,[0.0,0.0]],[13961346931609713434,[6.522611384544012,17.67970980547415]],[16241193756011776206,[0.0,0.0]],[5210886161307886529,[-1.1368683772161605e-13,-2.8421709430404014e-14]],[9187894839116405225,[-8.263374485596842,1.880201188843188]]],"handle_end":[[9745298522639115232,[7.703703703703695,-2.074074074074076]],[6545223889678917273,[-25.3424782807499,-1.3461362597164737]],[6443321953815072406,[-3.3276401397055917,-8.447086508484054]],[5210886161307886529,[5.947146741852521,2.1403475298293415]],[11050813873332011119,[-86.26684502769479,250.37037037037035]],[9187894839116405225,[4.974851394604343,2.0557841792410443]],[13961346931609713434,[10.984910836762538,-29.00411522633746]],[16241193756011776206,[-7.506172839506348,-20.345679012345684]],[13223251807271379465,[0.7901234567900701,-9.492455418381354]],[8058164935346100149,[-5.925925925925867,-2.370370370370381]]],"stroke":[[5210886161307886529,0],[13961346931609713434,0],[11050813873332011119,0],[9187894839116405225,0],[8058164935346100149,0],[9745298522639115232,0],[6545223889678917273,0],[6443321953815072406,0],[16241193756011776206,0],[13223251807271379465,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":16241193756011776206},{"ty":"Primary","segment":13961346931609713434}],[{"ty":"End","segment":6443321953815072406},{"ty":"Primary","segment":13223251807271379465}],[{"ty":"End","segment":13961346931609713434},{"ty":"Primary","segment":6443321953815072406}],[{"ty":"End","segment":5210886161307886529},{"ty":"Primary","segment":11050813873332011119}]],"remove_g1_continuous":[[{"ty":"Primary","segment":9187894839116405225},{"ty":"End","segment":8058164935346100149}]]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null,"size":464,"align":8}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[8511737864852441844,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":5.0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"()","alias":null,"size":0,"align":1}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::generator_nodes::CircleNode"}},"visible":true,"skip_deduplication":false}],[17696051535511578981,{"inputs":[{"Node":{"node_id":16780039553038473906,"output_index":0,"lambda":false}},{"Node":{"node_id":9071802450034150503,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10286817149456341619,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"transform":[1.0,0.0,0.0,1.0,0.0,0.0],"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"line_cap":"Butt","line_join":"Miter","line_join_miter_limit":4.0,"transform":[1.0,0.0,0.0,1.0,0.0,0.0]},"fill":"None"},"alpha_blending":{"opacity":1.0,"blend_mode":"Normal"},"colinear_manipulators":[],"point_domain":{"id":[],"positions":[]},"segment_domain":{"ids":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"ids":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[10786213048155734586,12599396287665855262,6164201091766276213,6781153531246981076,15695128662656633322,8241402276734357681,10333377922713208038,3749627916562964805,2535476870476707501],"remove":[],"delta":[[2535476870476707501,[887.5061728395062,568.6913580246915]],[10786213048155734586,[917.7283950617284,502.91358024691374]],[6164201091766276213,[902.9135802469136,506.8641975308643]],[10333377922713208038,[843.4567901234569,550.1234567901236]],[8241402276734357681,[853.3333333333336,529.1851851851854]],[12599396287665855262,[902.5185185185188,498.56790123456807]],[6781153531246981076,[872.6913580246915,513.7777777777779]],[15695128662656633322,[825.6790123456792,509.4320987654323]],[3749627916562964805,[866.172839506173,558.2222222222224]]]},"segments":{"add":[15700595221504820396,6369399239389505343,17761347836385237495,3021925106447084698,14489254209548096966,3461110970422306113,14847678502054094837,14515109677644612103,264894972572137143],"remove":[],"start_point":[[14515109677644612103,3749627916562964805],[14489254209548096966,15695128662656633322],[264894972572137143,2535476870476707501],[15700595221504820396,10786213048155734586],[6369399239389505343,12599396287665855262],[3461110970422306113,8241402276734357681],[3021925106447084698,6781153531246981076],[14847678502054094837,10333377922713208038],[17761347836385237495,6164201091766276213]],"end_point":[[15700595221504820396,12599396287665855262],[17761347836385237495,6781153531246981076],[264894972572137143,10786213048155734586],[14489254209548096966,8241402276734357681],[3461110970422306113,10333377922713208038],[14847678502054094837,3749627916562964805],[14515109677644612103,2535476870476707501],[3021925106447084698,15695128662656633322],[6369399239389505343,6164201091766276213]],"handle_primary":[[14515109677644612103,[8.888888888888914,0.0]],[14847678502054094837,[0.7901234567900701,2.765432098765473]],[14489254209548096966,[-0.3950434518873181,1.0617032941893854]],[17761347836385237495,[0.0,0.0]],[3461110970422306113,[0.38915905346209456,1.493515242756871]],[15700595221504820396,[0.0,0.0]],[264894972572137143,[0.0,0.0]],[6369399239389505343,[-7.1111111111111995,-5.530864197530889]],[3021925106447084698,[-16.59259259259261,2.370370370370324]]],"handle_end":[[15700595221504820396,[7.1111111111111995,5.530864197530889]],[6369399239389505343,[0.0,0.0]],[264894972572137143,[3.753086419753003,37.1358024691358]],[17761347836385237495,[16.59259259259261,-2.370370370370324]],[14847678502054094837,[-8.888888888888914,0.0]],[14515109677644612103,[0.0,0.0]],[3021925106447084698,[0.5488119028742631,-1.474965354794051]],[14489254209548096966,[-0.5712718875797691,-2.192428171126153]],[3461110970422306113,[-0.7901234567900701,-2.765432098765473]]],"stroke":[[264894972572137143,0],[14489254209548096966,0],[15700595221504820396,0],[3461110970422306113,0],[14515109677644612103,0],[17761347836385237495,0],[14847678502054094837,0],[6369399239389505343,0],[3021925106447084698,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":14489254209548096966},{"ty":"Primary","segment":3461110970422306113}],[{"ty":"End","segment":3021925106447084698},{"ty":"Primary","segment":14489254209548096966}],[{"ty":"End","segment":3461110970422306113},{"ty":"Primary","segment":14847678502054094837}],[{"ty":"End","segment":6369399239389505343},{"ty":"Primary","segment":17761347836385237495}],[{"ty":"End","segment":14847678502054094837},{"ty":"Primary","segment":14515109677644612103}],[{"ty":"End","segment":14515109677644612103},{"ty":"Primary","segment":264894972572137143}],[{"ty":"End","segment":17761347836385237495},{"ty":"Primary","segment":3021925106447084698}],[{"ty":"End","segment":15700595221504820396},{"ty":"Primary","segment":6369399239389505343}]],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null,"size":464,"align":8}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[6726954210929537972,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"transform":[1.0,0.0,0.0,1.0,0.0,0.0],"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"line_cap":"Butt","line_join":"Miter","line_join_miter_limit":4.0,"transform":[1.0,0.0,0.0,1.0,0.0,0.0]},"fill":"None"},"alpha_blending":{"opacity":1.0,"blend_mode":"Normal"},"colinear_manipulators":[],"point_domain":{"id":[],"positions":[]},"segment_domain":{"ids":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"ids":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[177515045030371783,4609870404630548899,1458337690478625792,16230687409600568539,8055802412900565217,12390708657704154619,12909592102393222573,6873550371723398444,13416153271806375161,2492294980235986276,12448133448335459077,7624137673235413199],"remove":[],"delta":[[2492294980235986276,[604.4434936307387,42.970116997735616]],[8055802412900565217,[480.4444444444445,219.7777777777778]],[16230687409600568539,[491.55555555555554,311.55555555555566]],[4609870404630548899,[589.432098765432,64.79012345679011]],[7624137673235413199,[617.8765432098766,2.465190328815662e-32]],[177515045030371783,[604.2883706752018,0.0]],[13416153271806375161,[531.8518518518517,131.2592592592593]],[1458337690478625792,[473.1851851851851,213.62962962962965]],[12448133448335459077,[610.3703703703706,2.4308653429145085e-63]],[12909592102393222573,[607.8024691358027,0.0]],[6873550371723398444,[538.6666666666667,136.0]],[12390708657704154619,[596.6748971193416,72.42798353909465]]]},"segments":{"add":[12529947318087068663,5578827639764758986,1705877195608053135,2463526518527501592,9361245670457788924,921651403153242564,9825559201153691780,15749222431214672690,14294722277069184337,4341232355541306629,3818841110886669992],"remove":[17799038492181728804,5057709998225566481,11060716078587457450,16939098306153440303,17843645051722826880],"start_point":[[1705877195608053135,16230687409600568539],[5578827639764758986,1458337690478625792],[12529947318087068663,177515045030371783],[921651403153242564,4609870404630548899],[14294722277069184337,12448133448335459077],[3818841110886669992,7624137673235413199],[9825559201153691780,13416153271806375161],[2463526518527501592,8055802412900565217],[9361245670457788924,6873550371723398444],[15749222431214672690,2492294980235986276],[4341232355541306629,12390708657704154619]],"end_point":[[14294722277069184337,2492294980235986276],[4341232355541306629,7624137673235413199],[2463526518527501592,6873550371723398444],[15749222431214672690,12909592102393222573],[12529947318087068663,4609870404630548899],[3818841110886669992,12448133448335459077],[9361245670457788924,12390708657704154619],[9825559201153691780,1458337690478625792],[921651403153242564,13416153271806375161],[1705877195608053135,8055802412900565217],[5578827639764758986,16230687409600568539]],"handle_primary":[[12529947318087068663,[0.0,0.0]],[3818841110886669992,[0.0,0.0]],[1705877195608053135,[0.0,0.0]],[9825559201153691780,[-30.00610951685011,28.39287782239575]],[2463526518527501592,[9.74414620103056,-24.528368023283747]],[921651403153242564,[-7.513106110924076,12.956274823940417]],[15749222431214672690,[3.877242131088792,-22.333682252383095]],[4341232355541306629,[19.753086419753117,-26.73251028806584]],[9361245670457788924,[22.844654233974516,-21.876660410500975]],[14294722277069184337,[-0.2633744855968416,28.576131687242796]],[5578827639764758986,[-19.25925925925924,60.44444444444443]]],"handle_end":[[9361245670457788924,[-16.14969885498249,21.855925783742933]],[12529947318087068663,[12.90534979423876,-22.255144032921805]],[3818841110886669992,[0.0,0.0]],[14294722277069184337,[0.0,0.0]],[5578827639764758986,[0.0,0.0]],[921651403153242564,[27.555555555555657,-26.07407407407412]],[9825559201153691780,[6.194184133897295,-19.440208666385132]],[4341232355541306629,[0.0,0.0]],[1705877195608053135,[-19.33333333333331,48.66666666666666]],[15749222431214672690,[0.0,0.0]],[2463526518527501592,[-34.96296296296305,33.481481481481495]]],"stroke":[[15749222431214672690,0],[14294722277069184337,0],[9825559201153691780,0],[5578827639764758986,0],[1705877195608053135,0],[12529947318087068663,0],[2463526518527501592,0],[4341232355541306629,0],[3818841110886669992,0],[9361245670457788924,0],[921651403153242564,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":12529947318087068663},{"ty":"Primary","segment":11060716078587457450}],[{"ty":"End","segment":9361245670457788924},{"ty":"Primary","segment":17843645051722826880}],[{"ty":"Primary","segment":5578827639764758986},{"ty":"End","segment":9825559201153691780}],[{"ty":"End","segment":11060716078587457450},{"ty":"Primary","segment":5578827639764758986}],[{"ty":"Primary","segment":16939098306153440303},{"ty":"End","segment":9361245670457788924}],[{"ty":"End","segment":1705877195608053135},{"ty":"Primary","segment":17799038492181728804}],[{"ty":"End","segment":2463526518527501592},{"ty":"Primary","segment":9361245670457788924}],[{"ty":"End","segment":921651403153242564},{"ty":"Primary","segment":9825559201153691780}],[{"ty":"End","segment":1705877195608053135},{"ty":"Primary","segment":2463526518527501592}],[{"ty":"End","segment":17799038492181728804},{"ty":"Primary","segment":16939098306153440303}],[{"ty":"End","segment":9361245670457788924},{"ty":"Primary","segment":4341232355541306629}],[{"ty":"End","segment":12529947318087068663},{"ty":"Primary","segment":921651403153242564}],[{"ty":"End","segment":9361245670457788924},{"ty":"Primary","segment":5057709998225566481}],[{"ty":"End","segment":17843645051722826880},{"ty":"Primary","segment":15749222431214672690}]],"remove_g1_continuous":[[{"ty":"Primary","segment":15749222431214672690},{"ty":"End","segment":14294722277069184337}],[{"ty":"End","segment":5057709998225566481},{"ty":"Primary","segment":14294722277069184337}],[{"ty":"Primary","segment":14294722277069184337},{"ty":"End","segment":3818841110886669992}],[{"ty":"End","segment":4341232355541306629},{"ty":"Primary","segment":3818841110886669992}]]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null,"size":464,"align":8}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17603523494627491590,{"inputs":[{"Node":{"node_id":10995640810984321903,"output_index":0,"lambda":false}},{"Node":{"node_id":17740294143355019755,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4301099429811409147,{"inputs":[{"Node":{"node_id":8460565235419043665,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[81.3755165062,-154.9064700048801]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.4164633072520061},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.9999999999999998,0.9999999999999998]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null,"size":16,"align":8}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null,"size":8,"align":8}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null,"size":16,"align":8}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null,"size":16,"align":8}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null,"size":16,"align":8}},"import_index":5}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::transform::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3109716240255919254,{"inputs":[{"Node":{"node_id":5877930116725120460,"output_index":0,"lambda":false}},{"Node":{"node_id":18053728639616073084,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2723198387862533596,{"inputs":[{"Node":{"node_id":14030142873804552388,"output_index":0,"lambda":false}},{"Node":{"node_id":11201759760883367635,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[18351415092709164412,{"inputs":[{"Node":{"node_id":1009114585722052052,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.3137255,"green":0.44705883,"blue":0.45490196,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[6484183251661832039,{"inputs":[{"Node":{"node_id":11264395591110193456,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[474.2,0.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":-7.2},"exposed":false}},{"Value":{"tagged_value":{"U32":5},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::RepeatNode"}},"visible":true,"skip_deduplication":false}],[12922148192688274227,{"inputs":[{"Node":{"node_id":18188505856445531484,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null,"size":16,"align":8}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null,"size":8,"align":8}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null,"size":16,"align":8}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null,"size":16,"align":8}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null,"size":16,"align":8}},"import_index":5}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::transform::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7755499790391969923,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"()","alias":null,"size":0,"align":1}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::generator_nodes::CircleNode"}},"visible":true,"skip_deduplication":false}],[6503655938154160104,{"inputs":[{"Node":{"node_id":17696051535511578981,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"BooleanOperation":"SubtractFront"},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null,"size":104,"align":8}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_std::vector::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::ImpureMemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16780039553038473906,{"inputs":[{"Value":{"tagged_value":{"GraphicGroup":{"elements":[],"transform":[1.0,0.0,0.0,1.0,0.0,0.0],"alpha_blending":{"opacity":1.0,"blend_mode":"Normal"}}},"exposed":true}},{"Node":{"node_id":7104088139635280554,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1508440849951861669,{"inputs":[{"Node":{"node_id":8566844905246185636,"output_index":0,"lambda":false}},{"Node":{"node_id":7480253252288032958,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[5856350938151339368,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"transform":[1.0,0.0,0.0,1.0,0.0,0.0],"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"line_cap":"Butt","line_join":"Miter","line_join_miter_limit":4.0,"transform":[1.0,0.0,0.0,1.0,0.0,0.0]},"fill":"None"},"alpha_blending":{"opacity":1.0,"blend_mode":"Normal"},"colinear_manipulators":[],"point_domain":{"id":[],"positions":[]},"segment_domain":{"ids":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"ids":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[5138872293174440313,14935583009751134816,9014079831396927156,7008812441195504980,9603704700847490044,7238075805746621699,2355002738045707979,5021902985892894619,17629528758352690600,5995306636877552],"remove":[10768931421586254879],"delta":[[5021902985892894619,[857.679012345679,478.2880658436215]],[9014079831396927156,[908.4444444444443,429.9259259259259]],[9603704700847490044,[821.037037037037,464.2962962962963]],[17629528758352690600,[892.148148148148,480.2962962962963]],[5995306636877552,[912.8888888888888,479.7037037037037]],[2355002738045707979,[826.2057613168724,485.0041152263375]],[14935583009751134816,[914.9629629629628,418.3703703703703]],[7008812441195504980,[888.8888888888887,421.3333333333333]],[7238075805746621699,[798.6831275720165,497.9094650205762]],[5138872293174440313,[922.9629629629628,422.22222222222223]]]},"segments":{"add":[7250062683967197158,14131440324578863745,4499620435559196394,14571502160667941876,7203043366367198812,239843798079287870,7655921914272804429,12687760936062936386,7117413478945421556,9071432674597727163],"remove":[3746587001535987651],"start_point":[[7655921914272804429,5021902985892894619],[14131440324578863745,14935583009751134816],[12687760936062936386,17629528758352690600],[7203043366367198812,9603704700847490044],[4499620435559196394,9014079831396927156],[239843798079287870,2355002738045707979],[9071432674597727163,7238075805746621699],[7250062683967197158,5138872293174440313],[7117413478945421556,5995306636877552],[14571502160667941876,7008812441195504980]],"end_point":[[7655921914272804429,17629528758352690600],[14571502160667941876,9603704700847490044],[14131440324578863745,9014079831396927156],[12687760936062936386,5995306636877552],[239843798079287870,5021902985892894619],[4499620435559196394,7008812441195504980],[7250062683967197158,14935583009751134816],[7203043366367198812,7238075805746621699],[9071432674597727163,2355002738045707979],[7117413478945421556,5138872293174440313]],"handle_primary":[[9071432674597727163,[4.345679012345499,-3.555555555555543]],[12687760936062936386,[10.666666666666742,3.555555555555543]],[4499620435559196394,[-0.2962962962963047,-0.2962962962963047]],[7203043366367198812,[0.0,0.2962962962963047]],[239843798079287870,[9.61316872427983,-1.843621399176982]],[7117413478945421556,[0.0,0.0]],[14131440324578863745,[0.0,0.0]],[7655921914272804429,[18.172839506172863,-1.9753086419753456]],[7250062683967197158,[0.0,0.0]],[14571502160667941876,[-0.5925925925926094,0.0]]],"handle_end":[[14131440324578863745,[2.962962962963047,-3.259259259259238]],[12687760936062936386,[0.0,0.0]],[239843798079287870,[-21.502976534539364,2.3372800581021456]],[7250062683967197158,[0.0,0.0]],[7203043366367198812,[-1.1851851851852189,-25.18518518518516]],[4499620435559196394,[8.59259259259261,5.629629629629619]],[7117413478945421556,[15.703703703703695,33.48148148148147]],[9071432674597727163,[-9.913826570592164,1.9012818080587977]],[14571502160667941876,[24.395061728395035,-0.36213991769540144]],[7655921914272804429,[-10.666666666666742,-3.555555555555543]]],"stroke":[[9071432674597727163,0],[14571502160667941876,0],[7117413478945421556,0],[12687760936062936386,0],[239843798079287870,0],[14131440324578863745,0],[7203043366367198812,0],[7655921914272804429,0],[4499620435559196394,0],[7250062683967197158,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"Primary","segment":239843798079287870},{"ty":"End","segment":9071432674597727163}],[{"ty":"End","segment":7655921914272804429},{"ty":"Primary","segment":12687760936062936386}],[{"ty":"End","segment":7250062683967197158},{"ty":"Primary","segment":14131440324578863745}],[{"ty":"End","segment":239843798079287870},{"ty":"Primary","segment":7655921914272804429}],[{"ty":"End","segment":12687760936062936386},{"ty":"Primary","segment":7117413478945421556}]],"remove_g1_continuous":[[{"ty":"End","segment":3746587001535987651},{"ty":"Primary","segment":239843798079287870}],[{"ty":"End","segment":9071432674597727163},{"ty":"Primary","segment":3746587001535987651}]]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null,"size":464,"align":8}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14257963317028524134,{"inputs":[{"Node":{"node_id":1001728975241745659,"output_index":0,"lambda":false}},{"Node":{"node_id":6503655938154160104,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1491840484128555837,{"inputs":[{"Node":{"node_id":1508440849951861669,"output_index":0,"lambda":false}},{"Node":{"node_id":9808637865669223270,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[5888633415105234509,{"inputs":[{"Node":{"node_id":3750439930725791025,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null,"size":104,"align":8}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_std::vector::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::ImpureMemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1258994191538244490,{"inputs":[{"Node":{"node_id":5488285068107445023,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[5486211022469996717,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"transform":[1.0,0.0,0.0,1.0,0.0,0.0],"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"line_cap":"Butt","line_join":"Miter","line_join_miter_limit":4.0,"transform":[1.0,0.0,0.0,1.0,0.0,0.0]},"fill":"None"},"alpha_blending":{"opacity":1.0,"blend_mode":"Normal"},"colinear_manipulators":[],"point_domain":{"id":[],"positions":[]},"segment_domain":{"ids":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"ids":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[266134622800431246,12075466065090700811,7115673652122600762,9852238672814254137],"remove":[134095410253559933],"delta":[[9852238672814254137,[879.7947439326053,110.54094004739208]],[12075466065090700811,[877.0370370370372,136.5925925925926]],[266134622800431246,[525.7325506063205,282.1042056224195]],[7115673652122600762,[646.5386352539062,343.99395751953125]]]},"segments":{"add":[17255728395700231433,3166693019207180063,10242199012993595528,2159953159628520134],"remove":[13980530488817762548,10196443086284452827,3769008694104161528],"start_point":[[2159953159628520134,9852238672814254137],[10242199012993595528,266134622800431246],[17255728395700231433,12075466065090700811],[3166693019207180063,7115673652122600762]],"end_point":[[2159953159628520134,12075466065090700811],[3166693019207180063,266134622800431246],[10242199012993595528,9852238672814254137],[17255728395700231433,7115673652122600762]],"handle_primary":[[17255728395700231433,[0.0010773420832492775,-0.01370555995902123]],[2159953159628520134,[0.0,0.0]],[3166693019207180063,[-126.67994767097883,-51.72627287889763]],[10242199012993595528,[137.37856050479058,-43.88198340019727]]],"handle_end":[[17255728395700231433,[165.46136474609386,67.5615980360243]],[3166693019207180063,[0.0,0.0]],[2159953159628520134,[0.0,0.0]],[10242199012993595528,[-15.794743932605344,36.71831921186718]]],"stroke":[[2159953159628520134,0],[10242199012993595528,0],[3166693019207180063,0],[17255728395700231433,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"Primary","segment":3166693019207180063},{"ty":"End","segment":17255728395700231433}]],"remove_g1_continuous":[[{"ty":"Primary","segment":3769008694104161528},{"ty":"End","segment":10196443086284452827}],[{"ty":"End","segment":10242199012993595528},{"ty":"Primary","segment":2159953159628520134}],[{"ty":"Primary","segment":10242199012993595528},{"ty":"End","segment":3166693019207180063}],[{"ty":"End","segment":3166693019207180063},{"ty":"Primary","segment":13980530488817762548}]]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null,"size":464,"align":8}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14139129879376457893,{"inputs":[{"Node":{"node_id":11373527190663101881,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[5954536408321808728,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"transform":[1.0,0.0,0.0,1.0,0.0,0.0],"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"line_cap":"Butt","line_join":"Miter","line_join_miter_limit":4.0,"transform":[1.0,0.0,0.0,1.0,0.0,0.0]},"fill":"None"},"alpha_blending":{"opacity":1.0,"blend_mode":"Normal"},"colinear_manipulators":[],"point_domain":{"id":[],"positions":[]},"segment_domain":{"ids":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"ids":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[8323145223085840944,87630150944518163,8212340198835025146,6057321578372831916,16788403743390653241,16686047298905200065,15635903913637220842,8652457572576966876,3124531241960914803,18307826411292029066,9969822516610975381,16995054111951247369,16808246968731723098],"remove":[],"delta":[[3124531241960914803,[589.9588477366256,64.65843621399176]],[16788403743390653241,[467.99999999999994,487.3333333333333]],[15635903913637220842,[468.4799499511719,219.78570556640625]],[9969822516610975381,[0.0,0.0]],[8652457572576966876,[514.4523315429688,146.72100830078125]],[8323145223085840944,[891.5555555555554,569.3827160493826]],[87630150944518163,[879.1111111111111,595.8518518518517]],[6057321578372831916,[708.148148148148,616.2962962962962]],[16995054111951247369,[0.0,768.0]],[16808246968731723098,[891.5555555555554,768.0]],[18307826411292029066,[601.1756940654021,0.0]],[8212340198835025146,[830.8148148148148,633.7777777777776]],[16686047298905200065,[283.3333333333333,354.66666666666663]]]},"segments":{"add":[14879480148926424885,5227512358023446442,17410347049685436697,9544743211426701912,14715945740984195653,515539069333222772,9242150930423817167,8823161072525575433,15885450050057549950,1662692131856898001,178608879920007638,12162371359208565273,16224358815792062223],"remove":[],"start_point":[[15885450050057549950,3124531241960914803],[16224358815792062223,16808246968731723098],[5227512358023446442,87630150944518163],[9544743211426701912,6057321578372831916],[12162371359208565273,16995054111951247369],[1662692131856898001,18307826411292029066],[178608879920007638,9969822516610975381],[17410347049685436697,8212340198835025146],[14879480148926424885,8323145223085840944],[14715945740984195653,16788403743390653241],[8823161072525575433,8652457572576966876],[9242150930423817167,15635903913637220842],[515539069333222772,16686047298905200065]],"end_point":[[17410347049685436697,6057321578372831916],[5227512358023446442,8212340198835025146],[12162371359208565273,16808246968731723098],[1662692131856898001,9969822516610975381],[178608879920007638,16995054111951247369],[9544743211426701912,16788403743390653241],[9242150930423817167,8652457572576966876],[14879480148926424885,87630150944518163],[515539069333222772,15635903913637220842],[16224358815792062223,8323145223085840944],[14715945740984195653,16686047298905200065],[8823161072525575433,3124531241960914803],[15885450050057549950,18307826411292029066]],"handle_primary":[[16224358815792062223,[0.0,0.0]],[178608879920007638,[0.0,0.0]],[17410347049685436697,[-26.37037037037044,2.3703703703704377]],[14715945740984195653,[-92.66666666666656,-80.66666666666669]],[14879480148926424885,[0.0,0.0]],[9242150930423817167,[27.25925925925918,-22.518518518518533]],[515539069333222772,[48.66666666666663,-23.999999999999943]],[1662692131856898001,[0.0,0.0]],[12162371359208565273,[0.0,0.0]],[9544743211426701912,[-57.48148148148141,-21.629629629629676]],[15885450050057549950,[11.193415637860312,-27.25925925925926]],[5227512358023446442,[-4.444444444444457,18.074074074074133]],[8823161072525575433,[11.259252477575274,-22.666663275824646]]],"handle_end":[[5227512358023446442,[26.37037037037044,-2.3703703703704377]],[9544743211426701912,[92.66666666666656,80.66666666666669]],[178608879920007638,[0.0,0.0]],[17410347049685436697,[57.48148148148141,21.629629629629676]],[1662692131856898001,[0.0,0.0]],[14715945740984195653,[0.0,0.0]],[15885450050057549950,[0.0,0.0]],[515539069333222772,[-95.07216232621772,78.5378732260062]],[14879480148926424885,[4.444444444444457,-18.074074074074133]],[12162371359208565273,[0.0,0.0]],[9242150930423817167,[-9.36826657882972,18.859808361471693]],[8823161072525575433,[-12.439135136214697,30.29295262583988]],[16224358815792062223,[0.0,0.0]]],"stroke":[[12162371359208565273,0],[1662692131856898001,0],[5227512358023446442,0],[178608879920007638,0],[14715945740984195653,0],[14879480148926424885,0],[17410347049685436697,0],[8823161072525575433,0],[15885450050057549950,0],[9242150930423817167,0],[9544743211426701912,0],[515539069333222772,0],[16224358815792062223,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":8823161072525575433},{"ty":"Primary","segment":15885450050057549950}],[{"ty":"End","segment":178608879920007638},{"ty":"Primary","segment":12162371359208565273}],[{"ty":"End","segment":1662692131856898001},{"ty":"Primary","segment":178608879920007638}],[{"ty":"End","segment":515539069333222772},{"ty":"Primary","segment":9242150930423817167}],[{"ty":"End","segment":5227512358023446442},{"ty":"Primary","segment":17410347049685436697}],[{"ty":"End","segment":17410347049685436697},{"ty":"Primary","segment":9544743211426701912}],[{"ty":"End","segment":9242150930423817167},{"ty":"Primary","segment":8823161072525575433}],[{"ty":"End","segment":14879480148926424885},{"ty":"Primary","segment":5227512358023446442}],[{"ty":"End","segment":9544743211426701912},{"ty":"Primary","segment":14715945740984195653}],[{"ty":"End","segment":12162371359208565273},{"ty":"Primary","segment":16224358815792062223}],[{"ty":"End","segment":15885450050057549950},{"ty":"Primary","segment":1662692131856898001}]],"remove_g1_continuous":[[{"ty":"End","segment":14715945740984195653},{"ty":"Primary","segment":515539069333222772}]]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null,"size":464,"align":8}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[18053728639616073084,{"inputs":[{"Node":{"node_id":6616450276140292763,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[17351444026127625357,{"inputs":[{"Node":{"node_id":14808063168960305551,"output_index":0,"lambda":false}},{"Node":{"node_id":13916027199283115943,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17735408893002232096,{"inputs":[{"Node":{"node_id":14228923746783465609,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[17285637344898461972,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"transform":[1.0,0.0,0.0,1.0,0.0,0.0],"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"line_cap":"Butt","line_join":"Miter","line_join_miter_limit":4.0,"transform":[1.0,0.0,0.0,1.0,0.0,0.0]},"fill":"None"},"alpha_blending":{"opacity":1.0,"blend_mode":"Normal"},"colinear_manipulators":[],"point_domain":{"id":[],"positions":[]},"segment_domain":{"ids":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"ids":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[16608607268690234590,17457877227823502997,13436129231170586617,5992570223148766873],"remove":[],"delta":[[5992570223148766873,[-2.273736754432321e-13,768.0]],[16608607268690234590,[0.0,340.0]],[13436129231170586617,[481.3333333333333,768.0]],[17457877227823502997,[273.0,476.0]]]},"segments":{"add":[13284808974014161135,5472571334856691465,8776124420595946733,4274372337254864190],"remove":[],"start_point":[[5472571334856691465,17457877227823502997],[4274372337254864190,5992570223148766873],[8776124420595946733,13436129231170586617],[13284808974014161135,16608607268690234590]],"end_point":[[5472571334856691465,13436129231170586617],[8776124420595946733,5992570223148766873],[13284808974014161135,17457877227823502997],[4274372337254864190,16608607268690234590]],"handle_primary":[[13284808974014161135,[161.73791370620617,43.57576470888159]],[4274372337254864190,[0.0,0.0]],[8776124420595946733,[0.0,0.0]],[5472571334856691465,[146.0,-13.0]]],"handle_end":[[13284808974014161135,[-165.43581782916667,14.730586519035386]],[4274372337254864190,[0.0,0.0]],[5472571334856691465,[0.4078646547782227,-253.307727480567]],[8776124420595946733,[0.0,0.0]]],"stroke":[[4274372337254864190,0],[13284808974014161135,0],[5472571334856691465,0],[8776124420595946733,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":13284808974014161135},{"ty":"Primary","segment":5472571334856691465}],[{"ty":"End","segment":8776124420595946733},{"ty":"Primary","segment":4274372337254864190}]],"remove_g1_continuous":[[{"ty":"Primary","segment":13284808974014161135},{"ty":"End","segment":4274372337254864190}]]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null,"size":464,"align":8}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15900830679378240619,{"inputs":[{"Node":{"node_id":2287485748649359627,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null,"size":104,"align":8}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_std::vector::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::ImpureMemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1662641269094032596,{"inputs":[{"Node":{"node_id":16304636129468583592,"output_index":0,"lambda":false}},{"Node":{"node_id":14139765080256493579,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[6728362629909402903,{"inputs":[{"Node":{"node_id":5856350938151339368,"output_index":0,"lambda":false}},{"Node":{"node_id":5449860184735415958,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12276520439585231336,{"inputs":[{"Node":{"node_id":2871608309888343463,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[997.5029638869316,545.7213923090854]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null,"size":16,"align":8}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null,"size":8,"align":8}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null,"size":16,"align":8}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null,"size":16,"align":8}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null,"size":16,"align":8}},"import_index":5}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::transform::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10995640810984321903,{"inputs":[{"Node":{"node_id":12353675714904258944,"output_index":0,"lambda":false}},{"Node":{"node_id":10265035897167064154,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15354358358546908017,{"inputs":[{"Node":{"node_id":14950060858756810933,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.92156863,"green":0.6039216,"blue":0.18039216,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.93333334,"green":0.8627451,"blue":0.7254902,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[4328376070224119511,{"inputs":[{"Value":{"tagged_value":{"GraphicGroup":{"elements":[],"transform":[1.0,0.0,0.0,1.0,0.0,0.0],"alpha_blending":{"opacity":1.0,"blend_mode":"Normal"}}},"exposed":true}},{"Node":{"node_id":13446205009526451196,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1009114585722052052,{"inputs":[{"Node":{"node_id":15692102598187739001,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null,"size":104,"align":8}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_std::vector::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::ImpureMemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14684142559936015947,{"inputs":[{"Node":{"node_id":15930698052919171086,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[4771789845668099116,{"inputs":[{"Node":{"node_id":17351444026127625357,"output_index":0,"lambda":false}},{"Node":{"node_id":14684142559936015947,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[5014806436727666175,{"inputs":[{"Node":{"node_id":7855094781869605606,"output_index":0,"lambda":false}},{"Node":{"node_id":8863346544623578893,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[18188505856445531484,{"inputs":[{"Node":{"node_id":8887924609778270360,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.92156863,"green":0.6039216,"blue":0.18039216,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.92156863,"green":0.6039216,"blue":0.18039216,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[14690269209726153565,{"inputs":[{"Node":{"node_id":7376049709233607419,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[2834866505092039323,{"inputs":[{"Node":{"node_id":18003287685830153881,"output_index":0,"lambda":false}},{"Node":{"node_id":14139765080256493579,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14139765080256493579,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"transform":[1.0,0.0,0.0,1.0,0.0,0.0],"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"line_cap":"Butt","line_join":"Miter","line_join_miter_limit":4.0,"transform":[1.0,0.0,0.0,1.0,0.0,0.0]},"fill":"None"},"alpha_blending":{"opacity":1.0,"blend_mode":"Normal"},"colinear_manipulators":[],"point_domain":{"id":[],"positions":[]},"segment_domain":{"ids":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"ids":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[3507505346656189771,2904729023031858224,854708012647259796,4175610638601362388,7821224334582795476,2195807584570698921],"remove":[1009888023123207923,16332448509429125699],"delta":[[854708012647259796,[740.0,298.0]],[2195807584570698921,[993.0,767.9999999999999]],[7821224334582795476,[1093.0,600.0]],[4175610638601362388,[957.0,324.0]],[2904729023031858224,[491.3420376907663,506.7530051313737]],[3507505346656189771,[552.0,768.0000000000001]]]},"segments":{"add":[4553965744616493549,13993263006398686359,6577640955869157325,17304574948462342226,8570276641842028192,17183285389582020412],"remove":[5710832026764395735,546565283439891712],"start_point":[[8570276641842028192,2195807584570698921],[13993263006398686359,2904729023031858224],[17304574948462342226,4175610638601362388],[4553965744616493549,3507505346656189771],[6577640955869157325,854708012647259796],[17183285389582020412,7821224334582795476]],"end_point":[[8570276641842028192,3507505346656189771],[6577640955869157325,4175610638601362388],[13993263006398686359,854708012647259796],[17183285389582020412,2195807584570698921],[4553965744616493549,2904729023031858224],[17304574948462342226,7821224334582795476]],"handle_primary":[[4553965744616493549,[0.0,0.0]],[13993263006398686359,[0.0,-84.7537417270637]],[17183285389582020412,[-24.08196064282073,82.4624712920831]],[8570276641842028192,[0.0,0.0]],[17304574948462342226,[50.35246044959922,33.38607084805801]],[6577640955869157325,[102.0,-45.0]]],"handle_end":[[17304574948462342226,[33.0,-113.0]],[8570276641842028192,[0.0,0.0]],[4553965744616493549,[0.0,135.2464055295568]],[17183285389582020412,[0.0,0.0]],[6577640955869157325,[-50.35246044959922,-33.38607084805801]],[13993263006398686359,[-102.0,45.0]]],"stroke":[[6577640955869157325,0],[13993263006398686359,0],[4553965744616493549,0],[8570276641842028192,0],[17183285389582020412,0],[17304574948462342226,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":13993263006398686359},{"ty":"Primary","segment":6577640955869157325}],[{"ty":"End","segment":4553965744616493549},{"ty":"Primary","segment":13993263006398686359}],[{"ty":"Primary","segment":8570276641842028192},{"ty":"End","segment":17183285389582020412}],[{"ty":"End","segment":17304574948462342226},{"ty":"Primary","segment":17183285389582020412}],[{"ty":"End","segment":6577640955869157325},{"ty":"Primary","segment":17304574948462342226}]],"remove_g1_continuous":[[{"ty":"End","segment":5710832026764395735},{"ty":"Primary","segment":8570276641842028192}],[{"ty":"End","segment":546565283439891712},{"ty":"Primary","segment":5710832026764395735}],[{"ty":"End","segment":17183285389582020412},{"ty":"Primary","segment":546565283439891712}],[{"ty":"Primary","segment":8570276641842028192},{"ty":"End","segment":546565283439891712}]]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null,"size":464,"align":8}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10080296672372912698,{"inputs":[{"Node":{"node_id":12867379765049504290,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"BooleanOperation":"SubtractFront"},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null,"size":104,"align":8}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_std::vector::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::ImpureMemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12353675714904258944,{"inputs":[{"Node":{"node_id":13203761224559198689,"output_index":0,"lambda":false}},{"Node":{"node_id":17271572793812678706,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17271572793812678706,{"inputs":[{"Node":{"node_id":15900830679378240619,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[14228923746783465609,{"inputs":[{"Node":{"node_id":16304636129468583592,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[2003133867055127539,13758328146055368475],"remove":[],"delta":[[4648964341912884959,[324.66666666666646,0.0]],[13758328146055368475,[1299.3064572949788,786.3993743175897]],[2003133867055127539,[1011.111083984375,786.3993530273438]],[16569120368910754547,[-43.0,0.0]]]},"segments":{"add":[8214025514312603513,7334532063810723038,13431612844608018700],"remove":[3433930674303663828,6602880736207868665],"start_point":[[7334532063810723038,16569120368910754547],[8214025514312603513,2003133867055127539],[13431612844608018700,13758328146055368475]],"end_point":[[7334532063810723038,13758328146055368475],[8214025514312603513,4648964341912884959],[13431612844608018700,2003133867055127539]],"handle_primary":[[9030015329489789075,[69.08057198853999,-80.19415805947563]],[13431612844608018700,null],[8214025514312603513,null],[7334532063810723038,null]],"handle_end":[[9030015329489789075,[0.0,0.0]],[2197140374690997530,[-24.333333333333485,-86.99999999999977]],[13431612844608018700,null],[8214025514312603513,null],[7334532063810723038,null]],"stroke":[[13431612844608018700,0],[8214025514312603513,0],[7334532063810723038,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[],"remove_g1_continuous":[[{"ty":"End","segment":9030015329489789075},{"ty":"Primary","segment":2197140374690997530}],[{"ty":"Primary","segment":9030015329489789075},{"ty":"End","segment":3433930674303663828}]]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null,"size":464,"align":8}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11210964267417873667,{"inputs":[{"Node":{"node_id":14516211820212764316,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[91.7203910728,-99.9607940061]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.40698564029617024},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[1.0,1.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null,"size":16,"align":8}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null,"size":8,"align":8}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null,"size":16,"align":8}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null,"size":16,"align":8}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null,"size":16,"align":8}},"import_index":5}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::transform::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1097494158696050491,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":15.0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"()","alias":null,"size":0,"align":1}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::generator_nodes::CircleNode"}},"visible":true,"skip_deduplication":false}],[8887924609778270360,{"inputs":[{"Node":{"node_id":5014806436727666175,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null,"size":104,"align":8}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_std::vector::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::ImpureMemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17036604842139972912,{"inputs":[{"Node":{"node_id":1491840484128555837,"output_index":0,"lambda":false}},{"Node":{"node_id":13602951545837529973,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12145355397916841389,{"inputs":[{"Node":{"node_id":16759836951269190891,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.92156863,"green":0.6039216,"blue":0.18039216,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[4470272391975492611,{"inputs":[{"Node":{"node_id":7018444885869143173,"output_index":0,"lambda":false}},{"Node":{"node_id":12145355397916841389,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13602951545837529973,{"inputs":[{"Node":{"node_id":11210964267417873667,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.3137255,"green":0.44705883,"blue":0.45490196,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.8509804,"green":0.24313726,"blue":0.18431373,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[990192925663920333,{"inputs":[{"Node":{"node_id":1097494158696050491,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[466.8,0.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":-7.9},"exposed":false}},{"Value":{"tagged_value":{"U32":5},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::RepeatNode"}},"visible":true,"skip_deduplication":false}],[2025899804080897524,{"inputs":[{"Node":{"node_id":17740496701763775226,"output_index":0,"lambda":false}},{"Node":{"node_id":3214181946162459584,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11264395591110193456,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":10.0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"()","alias":null,"size":0,"align":1}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::generator_nodes::CircleNode"}},"visible":true,"skip_deduplication":false}],[13027689870767713939,{"inputs":[{"Node":{"node_id":7201841978411396053,"output_index":0,"lambda":false}},{"Node":{"node_id":13340751444307201866,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[9338394475379815879,{"inputs":[{"Node":{"node_id":7977952035097419157,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[1327.0278641242007,11.102707365920756]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.23820276778328575},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[230.36030209674013,67.6958526826066]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[3.855605378252775e-17,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null,"size":16,"align":8}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null,"size":8,"align":8}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null,"size":16,"align":8}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null,"size":16,"align":8}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null,"size":16,"align":8}},"import_index":5}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::transform::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14496934933990319842,{"inputs":[{"Node":{"node_id":12709602171929957216,"output_index":0,"lambda":false}},{"Node":{"node_id":12185047359007423618,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13739729101529293427,{"inputs":[{"Node":{"node_id":18003287685830153881,"output_index":0,"lambda":false}},{"Node":{"node_id":14139765080256493579,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3214181946162459584,{"inputs":[{"Node":{"node_id":5449860184735415958,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.93333334,"green":0.8627451,"blue":0.7254902,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.93333334,"green":0.8627451,"blue":0.7254902,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[804622576568168609,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"transform":[1.0,0.0,0.0,1.0,0.0,0.0],"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"line_cap":"Butt","line_join":"Miter","line_join_miter_limit":4.0,"transform":[1.0,0.0,0.0,1.0,0.0,0.0]},"fill":"None"},"alpha_blending":{"opacity":1.0,"blend_mode":"Normal"},"colinear_manipulators":[],"point_domain":{"id":[],"positions":[]},"segment_domain":{"ids":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"ids":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[13654185056786459919,6952183320761642858,2802617302192982616,7639287212006638253,15117515618866904690,15750781936547583892,7025422618543191491,3831533579307185652,16937470333767479918,10412162547161259027,5269777039739103358],"remove":[],"delta":[[6952183320761642858,[933.9259259259262,324.3456790123457]],[10412162547161259027,[887.3333333333333,376.0]],[7639287212006638253,[862.8888888888888,349.3333333333333]],[7025422618543191491,[911.5555555555554,345.3333333333333]],[2802617302192982616,[911.7777777777776,334.88888888888886]],[13654185056786459919,[946.1728395061732,330.8641975308642]],[5269777039739103358,[902.2222222222222,394.66666666666663]],[16937470333767479918,[876.6666666666665,359.55555555555554]],[15750781936547583892,[840.6666666666665,368.66666666666663]],[15117515618866904690,[819.1111111111109,354.44444444444434]],[3831533579307185652,[880.4444444444443,357.3333333333333]]]},"segments":{"add":[10498175376126066982,10426255560432238561,11214998966879437330,1241631398419524272,15286139376878919277,15838384105575178137,12854270992100552972,379744301215040936,4069217348643062888,10438163357339042361,9330486019469919863],"remove":[],"start_point":[[12854270992100552972,7025422618543191491],[15286139376878919277,15117515618866904690],[379744301215040936,3831533579307185652],[9330486019469919863,5269777039739103358],[11214998966879437330,2802617302192982616],[15838384105575178137,15750781936547583892],[4069217348643062888,16937470333767479918],[10438163357339042361,10412162547161259027],[10426255560432238561,6952183320761642858],[10498175376126066982,13654185056786459919],[1241631398419524272,7639287212006638253]],"end_point":[[15286139376878919277,15750781936547583892],[10498175376126066982,6952183320761642858],[379744301215040936,16937470333767479918],[11214998966879437330,7639287212006638253],[10438163357339042361,5269777039739103358],[15838384105575178137,7025422618543191491],[4069217348643062888,10412162547161259027],[1241631398419524272,15117515618866904690],[12854270992100552972,3831533579307185652],[10426255560432238561,2802617302192982616],[9330486019469919863,13654185056786459919]],"handle_primary":[[10498175376126066982,[0.0,0.0]],[9330486019469919863,[5.555555555555429,-0.2222222222221717]],[15838384105575178137,[22.222222222222285,5.555555555555543]],[12854270992100552972,[-0.4444444444443434,0.0]],[1241631398419524272,[-17.111111111111086,12.888888888888856]],[15286139376878919277,[-0.5188510642573192,0.6084707935380038]],[379744301215040936,[-0.2222222222221717,0.0]],[10438163357339042361,[1.3333333333332575,10.888888888888856]],[10426255560432238561,[-0.39506172839503506,-0.19753086419757435]],[11214998966879437330,[-16.666666666666515,-3.777777777777771]],[4069217348643062888,[0.0,0.0]]],"handle_end":[[10438163357339042361,[-5.555555555555429,0.2222222222221717]],[1241631398419524272,[0.5951379226228255,-0.6979344728938486]],[12854270992100552972,[33.77777777777783,2.2222222222222285]],[379744301215040936,[0.0,0.0]],[15286139376878919277,[-22.222222222222285,-5.555555555555543]],[10426255560432238561,[16.666666666666515,3.777777777777771]],[11214998966879437330,[17.111111111111086,-12.888888888888856]],[9330486019469919863,[0.0,0.0]],[4069217348643062888,[-1.3333333333332575,-10.888888888888856]],[15838384105575178137,[-20.0,2.0]],[10498175376126066982,[4.9382716049382225,0.19753086419757435]]],"stroke":[[10426255560432238561,0],[379744301215040936,0],[15286139376878919277,0],[15838384105575178137,0],[10438163357339042361,0],[10498175376126066982,0],[4069217348643062888,0],[11214998966879437330,0],[12854270992100552972,0],[1241631398419524272,0],[9330486019469919863,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":10426255560432238561},{"ty":"Primary","segment":11214998966879437330}],[{"ty":"End","segment":1241631398419524272},{"ty":"Primary","segment":15286139376878919277}],[{"ty":"End","segment":11214998966879437330},{"ty":"Primary","segment":1241631398419524272}],[{"ty":"End","segment":15286139376878919277},{"ty":"Primary","segment":15838384105575178137}],[{"ty":"End","segment":379744301215040936},{"ty":"Primary","segment":4069217348643062888}],[{"ty":"End","segment":10438163357339042361},{"ty":"Primary","segment":9330486019469919863}],[{"ty":"End","segment":4069217348643062888},{"ty":"Primary","segment":10438163357339042361}]],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null,"size":464,"align":8}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17753909951719808506,{"inputs":[{"Node":{"node_id":2185437945364824599,"output_index":0,"lambda":false}},{"Node":{"node_id":9563008199132558110,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[8566844905246185636,{"inputs":[{"Node":{"node_id":6852799892628327372,"output_index":0,"lambda":false}},{"Node":{"node_id":17131529656312051452,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[18095952297474762348,{"inputs":[{"Node":{"node_id":5954536408321808728,"output_index":0,"lambda":false}},{"Node":{"node_id":5449860184735415958,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[8426490990601560741,{"inputs":[{"Node":{"node_id":10760002922115563021,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.93333334,"green":0.8627451,"blue":0.7254902,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.92156863,"green":0.6039216,"blue":0.18039216,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[7651693425519490419,{"inputs":[{"Node":{"node_id":4771789845668099116,"output_index":0,"lambda":false}},{"Node":{"node_id":15817956847588799375,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[6616450276140292763,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"transform":[1.0,0.0,0.0,1.0,0.0,0.0],"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"line_cap":"Butt","line_join":"Miter","line_join_miter_limit":4.0,"transform":[1.0,0.0,0.0,1.0,0.0,0.0]},"fill":"None"},"alpha_blending":{"opacity":1.0,"blend_mode":"Normal"},"colinear_manipulators":[],"point_domain":{"id":[],"positions":[]},"segment_domain":{"ids":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"ids":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[14760110820354327749,9465415708990918986,13517856880347849115,12398030966924498647,2930103517622848405,9496337687212684441],"remove":[],"delta":[[9496337687212684441,[732.148148148148,57.18518518518518]],[14760110820354327749,[614.8148148148148,129.1851851851852]],[9465415708990918986,[706.3703703703703,86.51851851851853]],[12398030966924498647,[823.4074074074074,97.4814814814815]],[2930103517622848405,[819.2592592592591,69.33333333333334]],[13517856880347849115,[777.1851851851851,92.44444444444446]]]},"segments":{"add":[18226408581696793441,16628058317667581864,3809009367670994230,13496648265229692336,10686631697241750410,11696351847604335156],"remove":[],"start_point":[[10686631697241750410,2930103517622848405],[16628058317667581864,9465415708990918986],[11696351847604335156,9496337687212684441],[3809009367670994230,13517856880347849115],[13496648265229692336,12398030966924498647],[18226408581696793441,14760110820354327749]],"end_point":[[10686631697241750410,9496337687212684441],[11696351847604335156,14760110820354327749],[16628058317667581864,13517856880347849115],[3809009367670994230,12398030966924498647],[18226408581696793441,9465415708990918986],[13496648265229692336,2930103517622848405]],"handle_primary":[[16628058317667581864,[41.185185185185105,-9.7777777777778]],[18226408581696793441,[0.0,0.0]],[13496648265229692336,[14.222222222222172,-0.8888888888888857]],[11696351847604335156,[-29.333333333333258,11.55555555555555]],[10686631697241750410,[-13.037037037036953,-4.444444444444457]],[3809009367670994230,[21.33333333333337,4.740740740740733]]],"handle_end":[[11696351847604335156,[54.81481481481478,-42.37037037037035]],[3809009367670994230,[-14.222222222222172,0.8888888888888857]],[16628058317667581864,[-21.33333333333337,-4.740740740740733]],[10686631697241750410,[29.333333333333258,-11.55555555555555]],[18226408581696793441,[-41.185185185185105,9.7777777777778]],[13496648265229692336,[13.037037037036953,4.444444444444457]]],"stroke":[[18226408581696793441,0],[10686631697241750410,0],[11696351847604335156,0],[3809009367670994230,0],[13496648265229692336,0],[16628058317667581864,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":18226408581696793441},{"ty":"Primary","segment":16628058317667581864}],[{"ty":"End","segment":16628058317667581864},{"ty":"Primary","segment":3809009367670994230}],[{"ty":"End","segment":3809009367670994230},{"ty":"Primary","segment":13496648265229692336}],[{"ty":"End","segment":10686631697241750410},{"ty":"Primary","segment":11696351847604335156}],[{"ty":"End","segment":13496648265229692336},{"ty":"Primary","segment":10686631697241750410}]],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null,"size":464,"align":8}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4560146526699152877,{"inputs":[{"Node":{"node_id":5486211022469996717,"output_index":0,"lambda":false}},{"Node":{"node_id":13646498613066619660,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11684705487012407227,{"inputs":[{"Node":{"node_id":18068340617333437755,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.92156863,"green":0.6039216,"blue":0.18039216,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.8509804,"green":0.24313726,"blue":0.18431373,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[16785043320296790229,{"inputs":[{"Node":{"node_id":1009114585722052052,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"F64":20.0},"exposed":false}},{"Value":{"tagged_value":{"VecF64":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"LineCap":"Butt"},"exposed":false}},{"Value":{"tagged_value":{"LineJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false}],[9808637865669223270,{"inputs":[{"Node":{"node_id":140396870212231820,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[16177422101884031678,{"inputs":[{"Node":{"node_id":13353438235848911576,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[11201759760883367635,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"transform":[1.0,0.0,0.0,1.0,0.0,0.0],"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"line_cap":"Butt","line_join":"Miter","line_join_miter_limit":4.0,"transform":[1.0,0.0,0.0,1.0,0.0,0.0]},"fill":"None"},"alpha_blending":{"opacity":1.0,"blend_mode":"Normal"},"colinear_manipulators":[],"point_domain":{"id":[],"positions":[]},"segment_domain":{"ids":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"ids":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[5173348374891662425,12314285668680405002,7388288026322342161,12796056970187696453],"remove":[],"delta":[[12796056970187696453,[1418.0,0.0]],[7388288026322342161,[1277.0,319.0]],[12314285668680405002,[1085.0,181.0]],[5173348374891662425,[969.0,0.0]]]},"segments":{"add":[10860608091363771974,9177623211202289793,18091265337503274797,9065140293539496953],"remove":[],"start_point":[[9065140293539496953,12796056970187696453],[18091265337503274797,7388288026322342161],[9177623211202289793,12314285668680405002],[10860608091363771974,5173348374891662425]],"end_point":[[18091265337503274797,12796056970187696453],[9177623211202289793,7388288026322342161],[9065140293539496953,5173348374891662425],[10860608091363771974,12314285668680405002]],"handle_primary":[[18091265337503274797,[178.0,-35.0]],[10860608091363771974,[0.0,0.0]],[9177623211202289793,[-33.0,137.0]],[9065140293539496953,[0.0,0.0]]],"handle_end":[[9065140293539496953,[0.0,0.0]],[9177623211202289793,[-77.81941867085992,15.301571086966838]],[10860608091363771974,[25.066898104916696,-104.0656072840481]],[18091265337503274797,[168.99998492988766,81.0]]],"stroke":[[9177623211202289793,0],[10860608091363771974,0],[9065140293539496953,0],[18091265337503274797,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":9177623211202289793},{"ty":"Primary","segment":18091265337503274797}],[{"ty":"End","segment":10860608091363771974},{"ty":"Primary","segment":9177623211202289793}]],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null,"size":464,"align":8}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11312003311374164325,{"inputs":[{"Node":{"node_id":4301099429811409147,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.8509804,"green":0.24313726,"blue":0.18431373,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.3137255,"green":0.44705883,"blue":0.45490196,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[10760002922115563021,{"inputs":[{"Node":{"node_id":14257963317028524134,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"BooleanOperation":"SubtractFront"},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null,"size":104,"align":8}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_std::vector::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::ImpureMemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[11373527190663101881,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"transform":[1.0,0.0,0.0,1.0,0.0,0.0],"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"line_cap":"Butt","line_join":"Miter","line_join_miter_limit":4.0,"transform":[1.0,0.0,0.0,1.0,0.0,0.0]},"fill":"None"},"alpha_blending":{"opacity":1.0,"blend_mode":"Normal"},"colinear_manipulators":[],"point_domain":{"id":[],"positions":[]},"segment_domain":{"ids":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"ids":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[12058665768506126331,6802441093413090533,4854280308383915721,17729943149159368459,7436032950540776377,2189722519288419244,15817054697695831753,15744271344233846756,13877679667762731651,13567509413382199058,5664077098702810122,14178520291283306679,15575201098426093294],"remove":[],"delta":[[15817054697695831753,[806.716049382716,206.22222222222223]],[12058665768506126331,[693.7283950617283,174.35390946502056]],[14178520291283306679,[668.4444444444443,183.1111111111111]],[6802441093413090533,[783.4074074074074,172.74074074074073]],[15575201098426093294,[636.7407407407406,173.33333333333331]],[13567509413382199058,[702.6831275720166,195.95061728395063]],[5664077098702810122,[686.5185185185185,191.1111111111111]],[4854280308383915721,[813.9259259259259,200.2962962962963]],[17729943149159368459,[801.1851851851852,199.90123456790124]],[7436032950540776377,[815.4074074074074,203.25925925925927]],[13877679667762731651,[743.4074074074074,234.66666666666669]],[2189722519288419244,[796.0493827160494,202.2716049382716]],[15744271344233846756,[785.7777777777777,205.62962962962965]]]},"segments":{"add":[2336956120616260883,1639796012074210121,3918280827204321712,13932755083907220179,14941832641240060361,94092576912261794,18299135553255571870,3109091330258982137,11037018395008586448,16261506098907231989,8279051592565434787,2367379450383978497,5102625335252315850],"remove":[],"start_point":[[14941832641240060361,7436032950540776377],[16261506098907231989,13567509413382199058],[11037018395008586448,13877679667762731651],[1639796012074210121,6802441093413090533],[5102625335252315850,15575201098426093294],[3918280827204321712,4854280308383915721],[3109091330258982137,15744271344233846756],[8279051592565434787,5664077098702810122],[18299135553255571870,15817054697695831753],[2367379450383978497,14178520291283306679],[94092576912261794,2189722519288419244],[2336956120616260883,12058665768506126331],[13932755083907220179,17729943149159368459]],"end_point":[[3918280827204321712,17729943149159368459],[94092576912261794,15817054697695831753],[2367379450383978497,15575201098426093294],[18299135553255571870,15744271344233846756],[5102625335252315850,12058665768506126331],[14941832641240060361,2189722519288419244],[8279051592565434787,14178520291283306679],[11037018395008586448,13567509413382199058],[16261506098907231989,5664077098702810122],[2336956120616260883,6802441093413090533],[3109091330258982137,13877679667762731651],[13932755083907220179,7436032950540776377],[1639796012074210121,4854280308383915721]],"handle_primary":[[8279051592565434787,[-16.75720164609038,-2.1399176954732297]],[3109091330258982137,[0.0,0.0]],[16261506098907231989,[0.0,0.0]],[3918280827204321712,[0.0,0.0]],[2336956120616260883,[0.0,0.0]],[5102625335252315850,[0.0,0.0]],[14941832641240060361,[0.0,0.0]],[1639796012074210121,[0.0,0.0]],[2367379450383978497,[-5.037037037036953,-1.7777777777777717]],[11037018395008586448,[0.0,0.0]],[13932755083907220179,[0.0,0.0]],[94092576912261794,[0.0,0.0]],[18299135553255571870,[0.0,0.0]]],"handle_end":[[1639796012074210121,[-19.259259259259352,-3.259259259259238]],[2367379450383978497,[12.740740740740648,5.037037037037038]],[14941832641240060361,[7.1111111111111995,1.7777777777778]],[3918280827204321712,[0.0,0.0]],[3109091330258982137,[18.962962962963047,2.074074074074048]],[8279051592565434787,[5.037037037036953,1.7777777777777717]],[94092576912261794,[0.0,0.0]],[18299135553255571870,[10.07407407407402,2.7654320987654444]],[2336956120616260883,[-65.77777777777783,13.333333333333314]],[13932755083907220179,[0.0,0.0]],[11037018395008586448,[13.168724279835374,22.12345679012344]],[5102625335252315850,[-27.12757201646093,2.633744855967052]],[16261506098907231989,[12.1395654462896,1.5502392023748983]]],"stroke":[[18299135553255571870,0],[94092576912261794,0],[3918280827204321712,0],[11037018395008586448,0],[13932755083907220179,0],[3109091330258982137,0],[5102625335252315850,0],[1639796012074210121,0],[14941832641240060361,0],[16261506098907231989,0],[2336956120616260883,0],[8279051592565434787,0],[2367379450383978497,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":8279051592565434787},{"ty":"Primary","segment":2367379450383978497}],[{"ty":"End","segment":16261506098907231989},{"ty":"Primary","segment":8279051592565434787}],[{"ty":"End","segment":13932755083907220179},{"ty":"Primary","segment":14941832641240060361}],[{"ty":"End","segment":3918280827204321712},{"ty":"Primary","segment":13932755083907220179}],[{"ty":"End","segment":94092576912261794},{"ty":"Primary","segment":18299135553255571870}]],"remove_g1_continuous":[[{"ty":"Primary","segment":16261506098907231989},{"ty":"End","segment":11037018395008586448}]]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null,"size":464,"align":8}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[9563008199132558110,{"inputs":[{"Node":{"node_id":7855094781869605606,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.8509804,"green":0.24313726,"blue":0.18431373,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.8509804,"green":0.24313726,"blue":0.18431373,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[18081743490344004315,{"inputs":[{"Node":{"node_id":13588160462734303101,"output_index":0,"lambda":false}},{"Node":{"node_id":11684705487012407227,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[6852799892628327372,{"inputs":[{"Node":{"node_id":2025899804080897524,"output_index":0,"lambda":false}},{"Node":{"node_id":16671141883125519098,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17952673493105230490,{"inputs":[{"Node":{"node_id":14228923746783465609,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"F64":20.0},"exposed":false}},{"Value":{"tagged_value":{"VecF64":[]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"LineCap":"Butt"},"exposed":false}},{"Value":{"tagged_value":{"LineJoin":"Miter"},"exposed":false}},{"Value":{"tagged_value":{"F64":4.0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::StrokeNode"}},"visible":true,"skip_deduplication":false}],[8863346544623578893,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"transform":[1.0,0.0,0.0,1.0,0.0,0.0],"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"line_cap":"Butt","line_join":"Miter","line_join_miter_limit":4.0,"transform":[1.0,0.0,0.0,1.0,0.0,0.0]},"fill":"None"},"alpha_blending":{"opacity":1.0,"blend_mode":"Normal"},"colinear_manipulators":[],"point_domain":{"id":[],"positions":[]},"segment_domain":{"ids":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"ids":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[5480246971175127548,949359986970918930,6461719056721357962,6265491311473200676],"remove":[947514826240006203],"delta":[[5480246971175127548,[364.0,767.9999999999999]],[6461719056721357962,[173.33333333333331,506.66666666666674]],[6265491311473200676,[-2.273736754432321e-13,768.0000000000001]],[949359986970918930,[0.0,608.0]]]},"segments":{"add":[8951068186878308228,9717584104793611782,15710828508798332384,12480300844056666979],"remove":[6561081452252813685,15926511461198813522,11231973846952426191],"start_point":[[15710828508798332384,5480246971175127548],[12480300844056666979,6265491311473200676],[9717584104793611782,949359986970918930],[8951068186878308228,6461719056721357962]],"end_point":[[8951068186878308228,5480246971175127548],[9717584104793611782,6461719056721357962],[12480300844056666979,949359986970918930],[15710828508798332384,6265491311473200676]],"handle_primary":[[8951068186878308228,[121.00000000000006,-37.99999999999994]],[15710828508798332384,null],[12480300844056666979,null],[9717584104793611782,[0.0,0.0]]],"handle_end":[[8951068186878308228,[-92.0,-81.99999999999989]],[9717584104793611782,[-63.1770926995265,19.84073985604961]],[15710828508798332384,null],[12480300844056666979,null]],"stroke":[[12480300844056666979,0],[8951068186878308228,0],[15710828508798332384,0],[9717584104793611782,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"Primary","segment":9717584104793611782},{"ty":"End","segment":12480300844056666979}],[{"ty":"Primary","segment":8951068186878308228},{"ty":"End","segment":9717584104793611782}],[{"ty":"End","segment":6561081452252813685},{"ty":"Primary","segment":9717584104793611782}]],"remove_g1_continuous":[[{"ty":"End","segment":15926511461198813522},{"ty":"Primary","segment":8951068186878308228}],[{"ty":"Primary","segment":11231973846952426191},{"ty":"End","segment":9717584104793611782}]]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null,"size":464,"align":8}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13588160462734303101,{"inputs":[{"Node":{"node_id":17036604842139972912,"output_index":0,"lambda":false}},{"Node":{"node_id":11312003311374164325,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4421418468606442725,{"inputs":[{"Node":{"node_id":8863346544623578893,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.93333334,"green":0.8627451,"blue":0.7254902,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.93333334,"green":0.8627451,"blue":0.7254902,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[4807760870555738383,{"inputs":[{"Node":{"node_id":876963243827503916,"output_index":0,"lambda":false}},{"Node":{"node_id":8269257328703012432,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[15692102598187739001,{"inputs":[{"Node":{"node_id":14950060858756810933,"output_index":0,"lambda":false}},{"Node":{"node_id":11201759760883367635,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[4102754869474520966,{"inputs":[{"Node":{"node_id":2723198387862533596,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null,"size":104,"align":8}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_std::vector::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::ImpureMemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[10265035897167064154,{"inputs":[{"Node":{"node_id":14698962747138962125,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[17131529656312051452,{"inputs":[{"Node":{"node_id":13646498613066619660,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.92156863,"green":0.6039216,"blue":0.18039216,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.92156863,"green":0.6039216,"blue":0.18039216,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[7104088139635280554,{"inputs":[{"Node":{"node_id":16785043320296790229,"output_index":0,"lambda":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::SolidifyStrokeNode"}},"visible":true,"skip_deduplication":false}],[18068340617333437755,{"inputs":[{"Node":{"node_id":8297015715799006244,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[73.0306419396,-200.8521460039]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.42594097420784194},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.9999999999999998,0.9999999999999998]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.0,0.0]},"exposed":false}},{"Value":{"tagged_value":{"DVec2":[0.5,0.5]},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null,"size":16,"align":8}},"import_index":1}},{"Network":{"import_type":{"Concrete":{"name":"f64","alias":null,"size":8,"align":8}},"import_index":2}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null,"size":16,"align":8}},"import_index":3}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null,"size":16,"align":8}},"import_index":4}},{"Network":{"import_type":{"Concrete":{"name":"glam::f64::dvec2::DVec2","alias":null,"size":16,"align":8}},"import_index":5}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::transform::TransformNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2185437945364824599,{"inputs":[{"Node":{"node_id":18081743490344004315,"output_index":0,"lambda":false}},{"Node":{"node_id":4421418468606442725,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1627123781166851142,{"inputs":[{"Node":{"node_id":4807760870555738383,"output_index":0,"lambda":false}},{"Node":{"node_id":15354358358546908017,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14141479077115894852,{"inputs":[{"Node":{"node_id":15433707377961038695,"output_index":0,"lambda":false}},{"Node":{"node_id":17285637344898461972,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17397123104674848450,{"inputs":[{"Node":{"node_id":1662641269094032596,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null,"size":104,"align":8}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_std::vector::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::ImpureMemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13340751444307201866,{"inputs":[{"Node":{"node_id":9135110142507605216,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.93333334,"green":0.8627451,"blue":0.7254902,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.93333334,"green":0.8627451,"blue":0.7254902,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[12741076678082295759,{"inputs":[{"Node":{"node_id":14139765080256493579,"output_index":0,"lambda":false}},{"Node":{"node_id":5449860184735415958,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13916027199283115943,{"inputs":[{"Node":{"node_id":6194305264313730032,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.101960786,"green":0.13333334,"blue":0.13725491,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[15930698052919171086,{"inputs":[{"Node":{"node_id":13739729101529293427,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"BooleanOperation":"SubtractFront"},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null,"size":104,"align":8}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_std::vector::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::ImpureMemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17223836790030950966,{"inputs":[{"Node":{"node_id":14030142873804552388,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.8509804,"green":0.24313726,"blue":0.18431373,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.8509804,"green":0.24313726,"blue":0.18431373,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[13446205009526451196,{"inputs":[{"Node":{"node_id":14139765080256493579,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.92156863,"green":0.6039216,"blue":0.18039216,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.92156863,"green":0.6039216,"blue":0.18039216,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[15433707377961038695,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"transform":[1.0,0.0,0.0,1.0,0.0,0.0],"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"line_cap":"Butt","line_join":"Miter","line_join_miter_limit":4.0,"transform":[1.0,0.0,0.0,1.0,0.0,0.0]},"fill":"None"},"alpha_blending":{"opacity":1.0,"blend_mode":"Normal"},"colinear_manipulators":[],"point_domain":{"id":[],"positions":[]},"segment_domain":{"ids":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"ids":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[16723991032614525258,1623125309784127684,7209807874503344461,3123395482103162919,2668496811386192321],"remove":[12344391980636687302],"delta":[[1623125309784127684,[643.9258958566198,633.6997633965701]],[3123395482103162919,[-2.273736754432321e-13,689.0]],[2668496811386192321,[0.0,768.0]],[7209807874503344461,[188.0,694.6666666666669]],[16723991032614525258,[553.0000000000001,768.0]]]},"segments":{"add":[3656277643115996070,6789459806904610761,16287649713110748258,16456150086799119359,1652964032977338610],"remove":[1848051273241122771],"start_point":[[16287649713110748258,3123395482103162919],[16456150086799119359,2668496811386192321],[3656277643115996070,16723991032614525258],[6789459806904610761,1623125309784127684],[1652964032977338610,7209807874503344461]],"end_point":[[1652964032977338610,3123395482103162919],[3656277643115996070,1623125309784127684],[6789459806904610761,7209807874503344461],[16456150086799119359,16723991032614525258],[16287649713110748258,2668496811386192321]],"handle_primary":[[16287649713110748258,[0.0,0.0]],[6789459806904610761,[-213.92589585661983,-68.82675604113183]],[16456150086799119359,[0.0,0.0]],[3656277643115996070,[0.0,0.0]],[1652964032977338610,[-81.48609837852206,84.6759456460087]]],"handle_end":[[6789459806904610761,[187.33333333333343,-194.6666666666667]],[3656277643115996070,[0.0,0.0]],[16287649713110748258,[0.0,0.0]],[16456150086799119359,[0.0,0.0]],[1652964032977338610,[56.00000000000023,11.0]]],"stroke":[[1652964032977338610,0],[6789459806904610761,0],[16456150086799119359,0],[3656277643115996070,0],[16287649713110748258,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":16287649713110748258},{"ty":"Primary","segment":16456150086799119359}],[{"ty":"End","segment":6789459806904610761},{"ty":"Primary","segment":1652964032977338610}]],"remove_g1_continuous":[[{"ty":"End","segment":3656277643115996070},{"ty":"Primary","segment":6789459806904610761}],[{"ty":"End","segment":1652964032977338610},{"ty":"Primary","segment":1848051273241122771}]]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null,"size":464,"align":8}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[5877930116725120460,{"inputs":[{"Node":{"node_id":4470272391975492611,"output_index":0,"lambda":false}},{"Node":{"node_id":1258994191538244490,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14516211820212764316,{"inputs":[{"Node":{"node_id":17299978721726771610,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[0.0,416.7]},"exposed":false}},{"Value":{"tagged_value":{"F64":30.6},"exposed":false}},{"Value":{"tagged_value":{"U32":8},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::RepeatNode"}},"visible":true,"skip_deduplication":false}],[3471746866096043087,{"inputs":[{"Node":{"node_id":5486211022469996717,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.3137255,"green":0.44705883,"blue":0.45490196,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[7480253252288032958,{"inputs":[{"Node":{"node_id":7104261880154687267,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.8509804,"green":0.24313726,"blue":0.18431373,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.8509804,"green":0.24313726,"blue":0.18431373,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[4809200889774783438,{"inputs":[{"Node":{"node_id":3109716240255919254,"output_index":0,"lambda":false}},{"Node":{"node_id":14139129879376457893,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[16304636129468583592,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"transform":[1.0,0.0,0.0,1.0,0.0,0.0],"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"line_cap":"Butt","line_join":"Miter","line_join_miter_limit":4.0,"transform":[1.0,0.0,0.0,1.0,0.0,0.0]},"fill":"None"},"alpha_blending":{"opacity":1.0,"blend_mode":"Normal"},"colinear_manipulators":[],"point_domain":{"id":[],"positions":[]},"segment_domain":{"ids":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"ids":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[4648964341912884959,10156053545530752213,16569120368910754547],"remove":[],"delta":[[10156053545530752213,[1094.162353515625,594.2965698242188]],[16569120368910754547,[1361.0,768.0]],[4648964341912884959,[665.0000000000001,768.0]]]},"segments":{"add":[9030015329489789075,2197140374690997530,3433930674303663828],"remove":[],"start_point":[[2197140374690997530,10156053545530752213],[3433930674303663828,16569120368910754547],[9030015329489789075,4648964341912884959]],"end_point":[[3433930674303663828,4648964341912884959],[2197140374690997530,16569120368910754547],[9030015329489789075,10156053545530752213]],"handle_primary":[[9030015329489789075,[32.66666666666663,-95.99999999999989]],[3433930674303663828,[0.0,0.0]],[2197140374690997530,[79.20069951994813,30.807024746222492]]],"handle_end":[[9030015329489789075,[-238.88331323750492,-92.9194336284096]],[3433930674303663828,[0.0,0.0]],[2197140374690997530,[-24.333333333333485,-86.99999999999977]]],"stroke":[[9030015329489789075,0],[3433930674303663828,0],[2197140374690997530,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":9030015329489789075},{"ty":"Primary","segment":2197140374690997530}]],"remove_g1_continuous":[[{"ty":"End","segment":2197140374690997530},{"ty":"Primary","segment":3433930674303663828}],[{"ty":"Primary","segment":9030015329489789075},{"ty":"End","segment":3433930674303663828}]]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null,"size":464,"align":8}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[2871608309888343463,{"inputs":[{"Node":{"node_id":12494428953087324640,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[0.0,200.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":8},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::RepeatNode"}},"visible":true,"skip_deduplication":false}],[5488285068107445023,{"inputs":[{"Node":{"node_id":7667878689218439065,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"BooleanOperation":"SubtractFront"},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null,"size":104,"align":8}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_std::vector::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::ImpureMemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[3050731459444225191,{"inputs":[{"Node":{"node_id":682567808439406093,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[0.0,200.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":12},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::RepeatNode"}},"visible":true,"skip_deduplication":false}],[16306737306999003555,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"transform":[1.0,0.0,0.0,1.0,0.0,0.0],"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"line_cap":"Butt","line_join":"Miter","line_join_miter_limit":4.0,"transform":[1.0,0.0,0.0,1.0,0.0,0.0]},"fill":"None"},"alpha_blending":{"opacity":1.0,"blend_mode":"Normal"},"colinear_manipulators":[],"point_domain":{"id":[],"positions":[]},"segment_domain":{"ids":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"ids":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[6082833770141706533,7903705226822768120,17147466439590042359,13341364271767916194],"remove":[],"delta":[[7903705226822768120,[497.3827160493826,248.88888888888889]],[17147466439590042359,[526.0109927536641,282.1042175292969]],[13341364271767916194,[262.22222222222223,364.1481481481481]],[6082833770141706533,[504.0987654320987,184.6255144032922]]]},"segments":{"add":[14649965831690031908,801877719748058643,9659144961849433642,2255088856072565305],"remove":[],"start_point":[[2255088856072565305,13341364271767916194],[801877719748058643,7903705226822768120],[14649965831690031908,6082833770141706533],[9659144961849433642,17147466439590042359]],"end_point":[[14649965831690031908,7903705226822768120],[801877719748058643,17147466439590042359],[9659144961849433642,13341364271767916194],[2255088856072565305,6082833770141706533]],"handle_primary":[[9659144961849433642,[0.0,0.0]],[14649965831690031908,[0.0,0.0]],[801877719748058643,[13.173601585124231,23.615912208504938]],[2255088856072565305,[0.0,0.0]]],"handle_end":[[14649965831690031908,[-17.920501046401128,-32.12553353079403]],[2255088856072565305,[-112.09876543209862,43.81893004115227]],[801877719748058643,[0.0,0.0]],[9659144961849433642,[195.55555555555569,-16.14814814814804]]],"stroke":[[2255088856072565305,0],[801877719748058643,0],[9659144961849433642,0],[14649965831690031908,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":801877719748058643},{"ty":"Primary","segment":9659144961849433642}],[{"ty":"End","segment":14649965831690031908},{"ty":"Primary","segment":801877719748058643}]],"remove_g1_continuous":[]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null,"size":464,"align":8}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[8297015715799006244,{"inputs":[{"Node":{"node_id":6484183251661832039,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[0.0,407.5]},"exposed":false}},{"Value":{"tagged_value":{"F64":23.8},"exposed":false}},{"Value":{"tagged_value":{"U32":8},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::RepeatNode"}},"visible":true,"skip_deduplication":false}],[12867379765049504290,{"inputs":[{"Node":{"node_id":6445954214067437701,"output_index":0,"lambda":false}},{"Node":{"node_id":8863346544623578893,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[17740496701763775226,{"inputs":[{"Node":{"node_id":13027689870767713939,"output_index":0,"lambda":false}},{"Node":{"node_id":16609137733952262762,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14808063168960305551,{"inputs":[{"Node":{"node_id":14496934933990319842,"output_index":0,"lambda":false}},{"Node":{"node_id":3471746866096043087,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[12494428953087324640,{"inputs":[{"Node":{"node_id":8511737864852441844,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"DVec2":[300.0,50.0]},"exposed":false}},{"Value":{"tagged_value":{"F64":0.0},"exposed":false}},{"Value":{"tagged_value":{"U32":12},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::RepeatNode"}},"visible":true,"skip_deduplication":false}],[15817956847588799375,{"inputs":[{"Node":{"node_id":11201759760883367635,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"Fill":{"Solid":{"red":0.3137255,"green":0.44705883,"blue":0.45490196,"alpha":1.0}}},"exposed":false}},{"Value":{"tagged_value":{"OptionalColor":{"red":0.3137255,"green":0.44705883,"blue":0.45490196,"alpha":1.0}},"exposed":false}},{"Value":{"tagged_value":{"Gradient":{"stops":[[0.0,{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0}],[1.0,{"red":1.0,"green":1.0,"blue":1.0,"alpha":1.0}]],"gradient_type":"Linear","start":[0.0,0.5],"end":[1.0,0.5],"transform":[1.0,0.0,0.0,1.0,0.0,0.0]}},"exposed":false}}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::FillNode"}},"visible":true,"skip_deduplication":false}],[2287485748649359627,{"inputs":[{"Node":{"node_id":804622576568168609,"output_index":0,"lambda":false}},{"Node":{"node_id":5449860184735415958,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[13646498613066619660,{"inputs":[{"Node":{"node_id":12741076678082295759,"output_index":0,"lambda":false}},{"Value":{"tagged_value":{"BooleanOperation":"Intersect"},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::style::Fill","alias":null,"size":104,"align":8}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_std::vector::BooleanOperationNode"}},"visible":true,"skip_deduplication":false}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::ImpureMemoNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[1809704172129195322,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":20.0},"exposed":false}}],"manual_composition":{"Concrete":{"name":"()","alias":null,"size":0,"align":1}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::generator_nodes::CircleNode"}},"visible":true,"skip_deduplication":false}],[876963243827503916,{"inputs":[{"Node":{"node_id":7651693425519490419,"output_index":0,"lambda":false}},{"Node":{"node_id":17223836790030950966,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7376049709233607419,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"transform":[1.0,0.0,0.0,1.0,0.0,0.0],"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"line_cap":"Butt","line_join":"Miter","line_join_miter_limit":4.0,"transform":[1.0,0.0,0.0,1.0,0.0,0.0]},"fill":"None"},"alpha_blending":{"opacity":1.0,"blend_mode":"Normal"},"colinear_manipulators":[],"point_domain":{"id":[],"positions":[]},"segment_domain":{"ids":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"ids":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[16958489363675356032,7347160684180114694,4322398537034510509,3438797896265725901,16005438712872589849,1674257131044231065,10491326691824745018,9374180853656949931,13358295350421759755,15245407364463454564],"remove":[],"delta":[[13358295350421759755,[778.4691358024693,177.1851851851852]],[9374180853656949931,[784.0000000000002,176.98765432098767]],[1674257131044231065,[829.4320987654323,121.67901234567904]],[10491326691824745018,[811.851851851852,148.54320987654322]],[4322398537034510509,[776.888888888889,117.53086419753087]],[16005438712872589849,[817.1851851851852,94.61728395061728]],[16958489363675356032,[658.172839506173,169.08641975308643]],[15245407364463454564,[773.530864197531,141.4320987654321]],[7347160684180114694,[772.1481481481483,138.66666666666669]],[3438797896265725901,[795.4567901234569,94.41975308641976]]]},"segments":{"add":[11663644781855838202,198953627342130434,8327087349631976772,13015157349146777770,8528911024810728168,3235570761188242773,16847383896493391194,16846650637386857857,3784798568712268630,12873317883441611394],"remove":[],"start_point":[[198953627342130434,7347160684180114694],[12873317883441611394,15245407364463454564],[3784798568712268630,13358295350421759755],[11663644781855838202,16958489363675356032],[3235570761188242773,1674257131044231065],[8327087349631976772,4322398537034510509],[8528911024810728168,16005438712872589849],[16847383896493391194,10491326691824745018],[13015157349146777770,3438797896265725901],[16846650637386857857,9374180853656949931]],"end_point":[[16847383896493391194,9374180853656949931],[11663644781855838202,7347160684180114694],[8528911024810728168,1674257131044231065],[3235570761188242773,10491326691824745018],[12873317883441611394,16958489363675356032],[8327087349631976772,3438797896265725901],[3784798568712268630,15245407364463454564],[198953627342130434,4322398537034510509],[13015157349146777770,16005438712872589849],[16846650637386857857,13358295350421759755]],"handle_primary":[[16847383896493391194,[-17.185185185185105,13.234567901234584]],[3784798568712268630,[-2.962962962963161,-10.864197530864232]],[16846650637386857857,[0.0,0.0]],[13015157349146777770,[0.0,0.0]],[8528911024810728168,[5.530864197530946,5.925925925925924]],[12873317883441611394,[-19.75308641975323,2.172839506172835]],[8327087349631976772,[-0.19753086419757435,-13.82716049382715]],[198953627342130434,[0.0,0.3950617283950635]],[3235570761188242773,[0.1975308641974607,7.703703703703709]],[11663644781855838202,[0.0,0.0]]],"handle_end":[[3784798568712268630,[2.9629629629629335,5.135802469135797]],[16847383896493391194,[0.0,0.0]],[13015157349146777770,[-5.530864197530946,-5.925925925925924]],[12873317883441611394,[33.382716049382566,14.222222222222172]],[8528911024810728168,[-0.1975308641974607,-7.703703703703709]],[3235570761188242773,[17.185185185185105,-13.234567901234584]],[198953627342130434,[0.19753086419757435,13.82716049382715]],[11663644781855838202,[-74.27160493827171,29.03703703703698]],[8327087349631976772,[0.0,0.0]],[16846650637386857857,[0.0,0.0]]],"stroke":[[16846650637386857857,0],[12873317883441611394,0],[11663644781855838202,0],[16847383896493391194,0],[3784798568712268630,0],[198953627342130434,0],[13015157349146777770,0],[8528911024810728168,0],[3235570761188242773,0],[8327087349631976772,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":16847383896493391194},{"ty":"Primary","segment":16846650637386857857}],[{"ty":"End","segment":13015157349146777770},{"ty":"Primary","segment":8528911024810728168}],[{"ty":"End","segment":198953627342130434},{"ty":"Primary","segment":8327087349631976772}],[{"ty":"End","segment":8327087349631976772},{"ty":"Primary","segment":13015157349146777770}],[{"ty":"End","segment":3235570761188242773},{"ty":"Primary","segment":16847383896493391194}],[{"ty":"End","segment":8528911024810728168},{"ty":"Primary","segment":3235570761188242773}]],"remove_g1_continuous":[[{"ty":"End","segment":3784798568712268630},{"ty":"Primary","segment":12873317883441611394}],[{"ty":"End","segment":16846650637386857857},{"ty":"Primary","segment":3784798568712268630}]]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null,"size":464,"align":8}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[7977952035097419157,{"inputs":[{"Value":{"tagged_value":"None","exposed":false}},{"Value":{"tagged_value":{"F64":0.5},"exposed":false}},{"Value":{"tagged_value":{"F64":0.5},"exposed":false}}],"manual_composition":{"Concrete":{"name":"()","alias":null,"size":0,"align":1}},"implementation":{"ProtoNode":{"name":"graphene_core::vector::generator_nodes::EllipseNode"}},"visible":true,"skip_deduplication":false}],[7667878689218439065,{"inputs":[{"Node":{"node_id":18271512507682813443,"output_index":0,"lambda":false}},{"Node":{"node_id":5449860184735415958,"output_index":0,"lambda":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":3,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToElementNode"}},"visible":true,"skip_deduplication":false}],[3,{"inputs":[{"Node":{"node_id":1,"output_index":0,"lambda":false}},{"Node":{"node_id":2,"output_index":0,"lambda":false}},{"Reflection":"DocumentNodePath"}],"manual_composition":{"Concrete":{"name":"graphene_core::transform::Footprint","alias":null,"size":72,"align":8}},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::LayerNode"}},"visible":true,"skip_deduplication":false}],[2,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Network":{"import_type":{"Generic":"T"},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::graphic_element::ToGroupNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}],[14030142873804552388,{"inputs":[{"Value":{"tagged_value":{"VectorData":{"transform":[1.0,0.0,0.0,1.0,0.0,0.0],"style":{"stroke":{"color":{"red":0.0,"green":0.0,"blue":0.0,"alpha":1.0},"weight":0.0,"dash_lengths":[],"dash_offset":0.0,"line_cap":"Butt","line_join":"Miter","line_join_miter_limit":4.0,"transform":[1.0,0.0,0.0,1.0,0.0,0.0]},"fill":"None"},"alpha_blending":{"opacity":1.0,"blend_mode":"Normal"},"colinear_manipulators":[],"point_domain":{"id":[],"positions":[]},"segment_domain":{"ids":[],"start_point":[],"end_point":[],"handles":[],"stroke":[]},"region_domain":{"ids":[],"segment_range":[],"fill":[]},"upstream_graphic_group":null}},"exposed":true}},{"Value":{"tagged_value":{"VectorModification":{"points":{"add":[11163144542703672167,7233902871991446034,9403888920678312544,5714042674660607880,9912917483675332510],"remove":[],"delta":[[9912917483675332510,[1536.0,254.00000000000009]],[11163144542703672167,[763.0,0.0]],[9403888920678312544,[1271.0,199.0]],[7233902871991446034,[908.0,134.0]],[5714042674660607880,[1536.0,0.0]]]},"segments":{"add":[7099980686025805826,11879054056208937348,7804540624589615499,3118709054343469746,12085471811343146506],"remove":[8174738144062904321],"start_point":[[12085471811343146506,9912917483675332510],[7804540624589615499,5714042674660607880],[7099980686025805826,11163144542703672167],[11879054056208937348,7233902871991446034],[3118709054343469746,9403888920678312544]],"end_point":[[3118709054343469746,9912917483675332510],[11879054056208937348,9403888920678312544],[7099980686025805826,7233902871991446034],[12085471811343146506,5714042674660607880],[7804540624589615499,11163144542703672167]],"handle_primary":[[11879054056208937348,[68.41365603453937,54.51084151791355]],[3118709054343469746,[191.0,-106.0]],[7099980686025805826,[0.0,0.0]],[7804540624589615499,[0.0,0.0]],[12085471811343146506,[0.0,0.0]]],"handle_end":[[3118709054343469746,[0.0,0.0]],[7099980686025805826,[-68.41365603453914,-54.51084151791349]],[12085471811343146506,[0.0,0.0]],[7804540624589615499,[0.0,0.0]],[11879054056208937348,[-121.83694366711715,67.61631428646292]]],"stroke":[[12085471811343146506,0],[11879054056208937348,0],[7804540624589615499,0],[7099980686025805826,0],[3118709054343469746,0]]},"regions":{"add":[],"remove":[],"segment_range":[],"fill":[]},"add_g1_continuous":[[{"ty":"End","segment":7099980686025805826},{"ty":"Primary","segment":11879054056208937348}],[{"ty":"End","segment":11879054056208937348},{"ty":"Primary","segment":8174738144062904321}],[{"ty":"End","segment":11879054056208937348},{"ty":"Primary","segment":3118709054343469746}]],"remove_g1_continuous":[[{"ty":"End","segment":3118709054343469746},{"ty":"Primary","segment":12085471811343146506}]]}},"exposed":false}}],"manual_composition":null,"implementation":{"Network":{"exports":[{"Node":{"node_id":1,"output_index":0,"lambda":false}}],"nodes":[[0,{"inputs":[{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::VectorData","alias":null,"size":488,"align":8}},"import_index":0}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::memo::MonitorNode"}},"visible":true,"skip_deduplication":true}],[1,{"inputs":[{"Node":{"node_id":0,"output_index":0,"lambda":false}},{"Network":{"import_type":{"Concrete":{"name":"graphene_core::vector::vector_data::modification::VectorModification","alias":null,"size":464,"align":8}},"import_index":1}}],"manual_composition":{"Generic":"T"},"implementation":{"ProtoNode":{"name":"graphene_core::vector::vector_data::modification::PathModifyNode"}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]}},"visible":true,"skip_deduplication":false}]],"scope_injections":[]},"network_metadata":{"persistent_metadata":{"node_metadata":[[3471746866096043087,{"persistent_metadata":{"reference":"Fill","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[1662641269094032596,{"persistent_metadata":{"reference":"Merge","display_name":"","input_names":["Graphical Data","Over"],"output_names":["Out"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[18271512507682813443,{"persistent_metadata":{"reference":"Path","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14139765080256493579,{"persistent_metadata":{"reference":"Path","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-70,128]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1009114585722052052,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"","input_names":["Graphical Data","Operation"],"output_names":["Vector"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-55,57]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Cache","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6194305264313730032,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"","input_names":["Graphical Data","Operation"],"output_names":["Vector"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Cache","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4809200889774783438,{"persistent_metadata":{"reference":"Merge","display_name":"Front Eye","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17131529656312051452,{"persistent_metadata":{"reference":"Fill","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[13027689870767713939,{"persistent_metadata":{"reference":"Merge","display_name":"Bottom Black - Dots","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4560146526699152877,{"persistent_metadata":{"reference":"Merge","display_name":"","input_names":["Graphical Data","Over"],"output_names":["Out"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4470272391975492611,{"persistent_metadata":{"reference":"Merge","display_name":"Rose Sliver Silhouette","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17285637344898461972,{"persistent_metadata":{"reference":"Path","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-62,81]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3109716240255919254,{"persistent_metadata":{"reference":"Merge","display_name":"Front Eyebrow","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8511737864852441844,{"persistent_metadata":{"reference":"Circle","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[11201759760883367635,{"persistent_metadata":{"reference":"Path","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-70,64]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6787585796949551500,{"persistent_metadata":{"reference":"Merge","display_name":"Hair Strand 1","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-7,12]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12922148192688274227,{"persistent_metadata":{"reference":"Transform","display_name":"","input_names":["Vector Data","Translation","Rotation","Scale","Skew","Pivot"],"output_names":["Data"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8566844905246185636,{"persistent_metadata":{"reference":"Merge","display_name":"Mouth Orange","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12276520439585231336,{"persistent_metadata":{"reference":"Transform","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11264395591110193456,{"persistent_metadata":{"reference":"Circle","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[5488285068107445023,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"","input_names":["Graphical Data","Operation"],"output_names":["Vector"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Cache","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1258994191538244490,{"persistent_metadata":{"reference":"Fill","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[2185437945364824599,{"persistent_metadata":{"reference":"Merge","display_name":"Bottom Left White","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13670206802546093234,{"persistent_metadata":{"reference":"Merge","display_name":"","input_names":["Graphical Data","Over"],"output_names":["Out"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14950060858756810933,{"persistent_metadata":{"reference":"Path","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-70,60]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17351444026127625357,{"persistent_metadata":{"reference":"Merge","display_name":"Face Black","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4771789845668099116,{"persistent_metadata":{"reference":"Merge","display_name":"Cheek Shadow","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[3750439930725791025,{"persistent_metadata":{"reference":"Merge","display_name":"","input_names":["Graphical Data","Over"],"output_names":["Out"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5449860184735415958,{"persistent_metadata":{"reference":"Path","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-70,114]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14030142873804552388,{"persistent_metadata":{"reference":"Path","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-35,66]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1508440849951861669,{"persistent_metadata":{"reference":"Merge","display_name":"Face Red","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17223836790030950966,{"persistent_metadata":{"reference":"Fill","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[11301831865756336526,{"persistent_metadata":{"reference":"Path","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[18188505856445531484,{"persistent_metadata":{"reference":"Fill","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[6503655938154160104,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"","input_names":["Graphical Data","Operation"],"output_names":["Vector"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-35,44]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Cache","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4102754869474520966,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"","input_names":["Graphical Data","Operation"],"output_names":["Vector"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Cache","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4301099429811409147,{"persistent_metadata":{"reference":"Transform","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9338394475379815879,{"persistent_metadata":{"reference":"Transform","display_name":"","input_names":["Vector Data","Translation","Rotation","Scale","Skew","Pivot"],"output_names":["Data"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15930698052919171086,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"","input_names":["Graphical Data","Operation"],"output_names":["Vector"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Cache","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[18068340617333437755,{"persistent_metadata":{"reference":"Transform","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7480253252288032958,{"persistent_metadata":{"reference":"Fill","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[6484183251661832039,{"persistent_metadata":{"reference":"Repeat","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[15817956847588799375,{"persistent_metadata":{"reference":"Fill","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[10265035897167064154,{"persistent_metadata":{"reference":"Fill","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[15433707377961038695,{"persistent_metadata":{"reference":"Path","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-62,87]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14690269209726153565,{"persistent_metadata":{"reference":"Fill","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[5888633415105234509,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"","input_names":["Graphical Data","Operation"],"output_names":["Vector"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Cache","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[392274448837115448,{"persistent_metadata":{"reference":"Artboard","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-4,9]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-2,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Artboard","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-10,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Append Artboards","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[6,-4]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9563008199132558110,{"persistent_metadata":{"reference":"Fill","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[14496934933990319842,{"persistent_metadata":{"reference":"Merge","display_name":"Bottom Left Blue","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12145355397916841389,{"persistent_metadata":{"reference":"Fill","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[8269257328703012432,{"persistent_metadata":{"reference":"Fill","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[6616450276140292763,{"persistent_metadata":{"reference":"Path","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17397123104674848450,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"","input_names":["Graphical Data","Operation"],"output_names":["Vector"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Cache","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17299978721726771610,{"persistent_metadata":{"reference":"Repeat","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[10760002922115563021,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"","input_names":["Graphical Data","Operation"],"output_names":["Vector"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Cache","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14257963317028524134,{"persistent_metadata":{"reference":"Merge","display_name":"","input_names":["Graphical Data","Over"],"output_names":["Out"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6445954214067437701,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"","input_names":["Graphical Data","Operation"],"output_names":["Vector"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Cache","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5856350938151339368,{"persistent_metadata":{"reference":"Path","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16306737306999003555,{"persistent_metadata":{"reference":"Path","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14228923746783465609,{"persistent_metadata":{"reference":"Path","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-49,125]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8887924609778270360,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"","input_names":["Graphical Data","Operation"],"output_names":["Vector"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Cache","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17753909951719808506,{"persistent_metadata":{"reference":"Merge","display_name":"Bottom Left Red","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13446205009526451196,{"persistent_metadata":{"reference":"Fill","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[7018444885869143173,{"persistent_metadata":{"reference":"Merge","display_name":"Top Right Black - Dots","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12353675714904258944,{"persistent_metadata":{"reference":"Merge","display_name":"Nose Shadow","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15301503532602557206,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"","input_names":["Graphical Data","Operation"],"output_names":["Vector"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Cache","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[18081743490344004315,{"persistent_metadata":{"reference":"Merge","display_name":"Hair Dots Orange","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6728362629909402903,{"persistent_metadata":{"reference":"Merge","display_name":"","input_names":["Graphical Data","Over"],"output_names":["Out"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12494428953087324640,{"persistent_metadata":{"reference":"Repeat","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[1001728975241745659,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"","input_names":["Graphical Data","Operation"],"output_names":["Vector"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Cache","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12234961922142600898,{"persistent_metadata":{"reference":"Merge","display_name":"Top Right Black","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Layer":{"position":{"Stack":12}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15900830679378240619,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"","input_names":["Graphical Data","Operation"],"output_names":["Vector"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Cache","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12709602171929957216,{"persistent_metadata":{"reference":"Merge","display_name":"Bottom Left Orange","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7376049709233607419,{"persistent_metadata":{"reference":"Path","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[18031616785650843168,{"persistent_metadata":{"reference":"Solidify Stroke","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-35,123]}}},"network_metadata":null}}],[17735408893002232096,{"persistent_metadata":{"reference":"Fill","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17036604842139972912,{"persistent_metadata":{"reference":"Merge","display_name":"Hair Dots Blue","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13739729101529293427,{"persistent_metadata":{"reference":"Merge","display_name":"","input_names":["Graphical Data","Over"],"output_names":["Out"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2025899804080897524,{"persistent_metadata":{"reference":"Merge","display_name":"Face White","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14698962747138962125,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"","input_names":["Graphical Data","Operation"],"output_names":["Vector"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Cache","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16177422101884031678,{"persistent_metadata":{"reference":"Fill","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[4807760870555738383,{"persistent_metadata":{"reference":"Merge","display_name":"Top Right Main Orange","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[6726954210929537972,{"persistent_metadata":{"reference":"Path","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[18053728639616073084,{"persistent_metadata":{"reference":"Fill","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[18003287685830153881,{"persistent_metadata":{"reference":"Path","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-42,72]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5877930116725120460,{"persistent_metadata":{"reference":"Merge","display_name":"Rear Eyelash","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14808063168960305551,{"persistent_metadata":{"reference":"Merge","display_name":"Face Blue","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12867379765049504290,{"persistent_metadata":{"reference":"Merge","display_name":"","input_names":["Graphical Data","Over"],"output_names":["Out"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11210964267417873667,{"persistent_metadata":{"reference":"Transform","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14139129879376457893,{"persistent_metadata":{"reference":"Fill","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[9808637865669223270,{"persistent_metadata":{"reference":"Fill","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[8297015715799006244,{"persistent_metadata":{"reference":"Repeat","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17271572793812678706,{"persistent_metadata":{"reference":"Fill","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[876963243827503916,{"persistent_metadata":{"reference":"Merge","display_name":"Top Right Red","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13340751444307201866,{"persistent_metadata":{"reference":"Fill","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[13353438235848911576,{"persistent_metadata":{"reference":"Path","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11095670964487764044,{"persistent_metadata":{"reference":"Merge","display_name":"Hair Strand 2","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9071802450034150503,{"persistent_metadata":{"reference":"Fill","display_name":"","input_names":["Vector Data","Fill","Backup Color","Backup Gradient"],"output_names":["VectorData"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[8863346544623578893,{"persistent_metadata":{"reference":"Path","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-49,90]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17696051535511578981,{"persistent_metadata":{"reference":"Merge","display_name":"","input_names":["Graphical Data","Over"],"output_names":["Out"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Layer":{"position":{"Absolute":[-41,46]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[4421418468606442725,{"persistent_metadata":{"reference":"Fill","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[13588160462734303101,{"persistent_metadata":{"reference":"Merge","display_name":"Hair Dots Red","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17740294143355019755,{"persistent_metadata":{"reference":"Fill","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[7855094781869605606,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"","input_names":["Graphical Data","Operation"],"output_names":["Vector"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-49,87]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Cache","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2723198387862533596,{"persistent_metadata":{"reference":"Merge","display_name":"","input_names":["Graphical Data","Over"],"output_names":["Out"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12770183061753030023,{"persistent_metadata":{"reference":"Merge","display_name":"","input_names":["Graphical Data","Over"],"output_names":["Out"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[1809704172129195322,{"persistent_metadata":{"reference":"Circle","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[18095952297474762348,{"persistent_metadata":{"reference":"Merge","display_name":"","input_names":["Graphical Data","Over"],"output_names":["Out"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12741076678082295759,{"persistent_metadata":{"reference":"Merge","display_name":"","input_names":["Graphical Data","Over"],"output_names":["Out"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-42,108]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5486211022469996717,{"persistent_metadata":{"reference":"Path","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-42,75]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7977952035097419157,{"persistent_metadata":{"reference":"Ellipse","display_name":"","input_names":["Primary","Radius X","Radius Y"],"output_names":["VectorData"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[804622576568168609,{"persistent_metadata":{"reference":"Path","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11312003311374164325,{"persistent_metadata":{"reference":"Fill","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[6852799892628327372,{"persistent_metadata":{"reference":"Merge","display_name":"Head Orange","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13203761224559198689,{"persistent_metadata":{"reference":"Merge","display_name":"Front Eye Shadow","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16785043320296790229,{"persistent_metadata":{"reference":"Stroke","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[14684142559936015947,{"persistent_metadata":{"reference":"Fill","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[3214181946162459584,{"persistent_metadata":{"reference":"Fill","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[18351415092709164412,{"persistent_metadata":{"reference":"Fill","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[1627123781166851142,{"persistent_metadata":{"reference":"Merge","display_name":"Top Right Corner Orange","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16780039553038473906,{"persistent_metadata":{"reference":"Merge","display_name":"","input_names":["Graphical Data","Over"],"output_names":["Out"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16671141883125519098,{"persistent_metadata":{"reference":"Fill","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[10286817149456341619,{"persistent_metadata":{"reference":"Path","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11373527190663101881,{"persistent_metadata":{"reference":"Path","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13916027199283115943,{"persistent_metadata":{"reference":"Fill","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[5954536408321808728,{"persistent_metadata":{"reference":"Path","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16609137733952262762,{"persistent_metadata":{"reference":"Fill","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[4328376070224119511,{"persistent_metadata":{"reference":"Merge","display_name":"Bottom Orange","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[10080296672372912698,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"","input_names":["Graphical Data","Operation"],"output_names":["Vector"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Cache","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7651693425519490419,{"persistent_metadata":{"reference":"Merge","display_name":"Top Right Blue","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8426490990601560741,{"persistent_metadata":{"reference":"Fill","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[13602951545837529973,{"persistent_metadata":{"reference":"Fill","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[3050731459444225191,{"persistent_metadata":{"reference":"Repeat","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[7104261880154687267,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"","input_names":["Graphical Data","Operation"],"output_names":["Vector"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Cache","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[990192925663920333,{"persistent_metadata":{"reference":"Repeat","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[15354358358546908017,{"persistent_metadata":{"reference":"Fill","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[7667878689218439065,{"persistent_metadata":{"reference":"Merge","display_name":"","input_names":["Graphical Data","Over"],"output_names":["Out"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[8359580532088731394,{"persistent_metadata":{"reference":"Fill","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17740496701763775226,{"persistent_metadata":{"reference":"Merge","display_name":"Bottom Blue","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2287485748649359627,{"persistent_metadata":{"reference":"Merge","display_name":"","input_names":["Graphical Data","Over"],"output_names":["Out"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[140396870212231820,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"","input_names":["Graphical Data","Operation"],"output_names":["Vector"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Cache","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[2834866505092039323,{"persistent_metadata":{"reference":"Merge","display_name":"","input_names":["Graphical Data","Over"],"output_names":["Out"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14141479077115894852,{"persistent_metadata":{"reference":"Merge","display_name":"","input_names":["Graphical Data","Over"],"output_names":["Out"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-56,87]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[11429506195623419966,{"persistent_metadata":{"reference":"Merge","display_name":"","input_names":["Graphical Data","Over"],"output_names":["Out"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7201841978411396053,{"persistent_metadata":{"reference":"Merge","display_name":"Bottom Black","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Layer":{"position":{"Stack":2}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17562801632450633291,{"persistent_metadata":{"reference":"Merge","display_name":"","input_names":["Graphical Data","Over"],"output_names":["Out"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[14516211820212764316,{"persistent_metadata":{"reference":"Repeat","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[10995640810984321903,{"persistent_metadata":{"reference":"Merge","display_name":"Lip Bottom","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17952673493105230490,{"persistent_metadata":{"reference":"Stroke","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-42,123]}}},"network_metadata":null}}],[7755499790391969923,{"persistent_metadata":{"reference":"Circle","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[1097494158696050491,{"persistent_metadata":{"reference":"Circle","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[11684705487012407227,{"persistent_metadata":{"reference":"Fill","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[1491840484128555837,{"persistent_metadata":{"reference":"Merge","display_name":"Face Shadow","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[7104088139635280554,{"persistent_metadata":{"reference":"Solidify Stroke","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[2871608309888343463,{"persistent_metadata":{"reference":"Repeat","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[17603523494627491590,{"persistent_metadata":{"reference":"Merge","display_name":"Lip Top","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Layer":{"position":{"Stack":0}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[15692102598187739001,{"persistent_metadata":{"reference":"Merge","display_name":"","input_names":["Graphical Data","Over"],"output_names":["Out"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-63,57]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16759836951269190891,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"","input_names":["Graphical Data","Operation"],"output_names":["Vector"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Cache","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[5014806436727666175,{"persistent_metadata":{"reference":"Merge","display_name":"","input_names":["Graphical Data","Over"],"output_names":["Out"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[16304636129468583592,{"persistent_metadata":{"reference":"Path","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-70,125]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Path Modify","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[9135110142507605216,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"","input_names":["Graphical Data","Operation"],"output_names":["Vector"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Cache","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[17495267820524300686,{"persistent_metadata":{"reference":"Transform","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[0,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"Transform","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[13646498613066619660,{"persistent_metadata":{"reference":"Boolean Operation","display_name":"","input_names":["Graphical Data","Operation"],"output_names":["Vector"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-35,108]}}},"network_metadata":{"persistent_metadata":{"node_metadata":[[1,{"persistent_metadata":{"reference":null,"display_name":"Cache","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[0,0]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"Boolean Operation","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,0]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}],[12185047359007423618,{"persistent_metadata":{"reference":"Fill","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[682567808439406093,{"persistent_metadata":{"reference":"Repeat","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[8460565235419043665,{"persistent_metadata":{"reference":"Repeat","display_name":"","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":null}}],[11196821089257149774,{"persistent_metadata":{"reference":"Merge","display_name":"","input_names":["Graphical Data","Over"],"output_names":["Out"],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":"Chain"}},"network_metadata":{"persistent_metadata":{"node_metadata":[[3,{"persistent_metadata":{"reference":null,"display_name":"Layer","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[1,-3]}}},"network_metadata":null}}],[0,{"persistent_metadata":{"reference":null,"display_name":"To Element","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-1]}}},"network_metadata":null}}],[1,{"persistent_metadata":{"reference":null,"display_name":"To Group","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-14,-3]}}},"network_metadata":null}}],[2,{"persistent_metadata":{"reference":null,"display_name":"Monitor","input_names":[],"output_names":[],"has_primary_output":true,"locked":false,"node_type_metadata":{"Node":{"position":{"Absolute":[-7,-1]}}},"network_metadata":null}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[0.0,0.0],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,0.0,0.0],"node_graph_top_right":[0.0,0.0]},"selection_undo_history":[],"selection_redo_history":[]}}}}]],"previewing":"No","navigation_metadata":{"node_graph_ptz":{"pan":[772.9589087862537,-918.0745763033187],"tilt":0.0,"zoom":1.0},"node_graph_to_viewport":[1.0,0.0,0.0,1.0,1763.0,-338.0],"node_graph_top_right":[1980.796875,0.0]},"selection_undo_history":[[],[7104088139635280554],[],[4300461501253802544],[],[4300461501253802544],[7104088139635280554,4300461501253802544],[4300461501253802544,16785043320296790229,7104088139635280554],[],[4300461501253802544],[14257963317028524134],[],[14257963317028524134],[7018444885869143173],[],[],[9338394475379815879],[],[4300461501253802544],[],[],[10760002922115563021],[6503655938154160104],[6503655938154160104],[],[6503655938154160104],[17696051535511578981],[16780039553038473906],[6503655938154160104],[],[4328376070224119511,17740496701763775226,13027689870767713939,7201841978411396053],[16671141883125519098,17740496701763775226,7480253252288032958,17036604842139972912,1491840484128555837,4301099429811409147,1508440849951861669,140396870212231820,11196821089257149774,5888633415105234509,7201841978411396053,17735408893002232096,2025899804080897524,9808637865669223270,5954536408321808728,4328376070224119511,2834866505092039323,18031616785650843168,8460565235419043665,16306737306999003555,13588160462734303101,17131529656312051452,990192925663920333,11312003311374164325,13027689870767713939,7104261880154687267,13446205009526451196,8566844905246185636,18095952297474762348,17299978721726771610,3214181946162459584,13646498613066619660,11210964267417873667,1662641269094032596,17397123104674848450,9135110142507605216,13340751444307201866,14516211820212764316,6852799892628327372,13602951545837529973,16609137733952262762],[17299978721726771610,12867379765049504290,9808637865669223270,2871608309888343463,6852799892628327372,5014806436727666175,3471746866096043087,17397123104674848450,17753909951719808506,13602951545837529973,14141479077115894852,9563008199132558110,18068340617333437755,7201841978411396053,12276520439585231336,1491840484128555837,1508440849951861669,4421418468606442725,4328376070224119511,18188505856445531484,6484183251661832039,7855094781869605606,10080296672372912698,14496934933990319842,140396870212231820,3750439930725791025,12185047359007423618,2834866505092039323,6194305264313730032,2025899804080897524,17351444026127625357,18081743490344004315,14516211820212764316,5486211022469996717,12741076678082295759,1097494158696050491,1662641269094032596,15433707377961038695,3214181946162459584,17285637344898461972,990192925663920333,17735408893002232096,16609137733952262762,7480253252288032958,16306737306999003555,18031616785650843168,12709602171929957216,13670206802546093234,12494428953087324640,1809704172129195322,17740496701763775226,11210964267417873667,16671141883125519098,9135110142507605216,11312003311374164325,12922148192688274227,13446205009526451196,8297015715799006244,17131529656312051452,5954536408321808728,4560146526699152877,14228923746783465609,2185437945364824599,8887924609778270360,14808063168960305551,11264395591110193456,8863346544623578893,5888633415105234509,18095952297474762348,7104261880154687267,11684705487012407227,13340751444307201866,13588160462734303101,17036604842139972912,4301099429811409147,13027689870767713939,13916027199283115943,13646498613066619660,8460565235419043665,11196821089257149774,17952673493105230490,8566844905246185636,6445954214067437701],[18081743490344004315,1809704172129195322,18031616785650843168,1491840484128555837,3750439930725791025,11264395591110193456,15433707377961038695,4301099429811409147,4771789845668099116,18068340617333437755,13027689870767713939,13446205009526451196,5449860184735415958,8297015715799006244,7651693425519490419,14516211820212764316,8460565235419043665,16304636129468583592,8566844905246185636,12709602171929957216,14228923746783465609,6852799892628327372,5014806436727666175,17299978721726771610,18003287685830153881,17351444026127625357,13340751444307201866,13588160462734303101,17223836790030950966,5888633415105234509,7855094781869605606,14141479077115894852,17735408893002232096,2871608309888343463,17036604842139972912,3471746866096043087,13670206802546093234,17753909951719808506,12741076678082295759,4328376070224119511,14139765080256493579,12276520439585231336,14808063168960305551,1662641269094032596,3214181946162459584,990192925663920333,12185047359007423618,2025899804080897524,9808637865669223270,13646498613066619660,15930698052919171086,9563008199132558110,10080296672372912698,12867379765049504290,13602951545837529973,14030142873804552388,16306737306999003555,1097494158696050491,18188505856445531484,13916027199283115943,5486211022469996717,11312003311374164325,18095952297474762348,7201841978411396053,8511737864852441844,17740496701763775226,17131529656312051452,14684142559936015947,6484183251661832039,7480253252288032958,2185437945364824599,4560146526699152877,13739729101529293427,9135110142507605216,11210964267417873667,16671141883125519098,1508440849951861669,15817956847588799375,6445954214067437701,12494428953087324640,17952673493105230490,14496934933990319842,876963243827503916,5954536408321808728,140396870212231820,16609137733952262762,11684705487012407227,17397123104674848450,7104261880154687267,2834866505092039323,6194305264313730032,17285637344898461972,12922148192688274227,8863346544623578893,8887924609778270360,4421418468606442725,11196821089257149774],[17351444026127625357,3750439930725791025,11264395591110193456,13027689870767713939,5888633415105234509,17753909951719808506,17735408893002232096,14808063168960305551,14496934933990319842,18031616785650843168,17036604842139972912,4560146526699152877,12922148192688274227,876963243827503916,17285637344898461972,8863346544623578893,18095952297474762348,4301099429811409147,6852799892628327372,17299978721726771610,12276520439585231336,16671141883125519098,2834866505092039323,14516211820212764316,12185047359007423618,4102754869474520966,6484183251661832039,14684142559936015947,13916027199283115943,7104261880154687267,16304636129468583592,18068340617333437755,12867379765049504290,14228923746783465609,17223836790030950966,9808637865669223270,5014806436727666175,2723198387862533596,13646498613066619660,17397123104674848450,18003287685830153881,12741076678082295759,15433707377961038695,12709602171929957216,13446205009526451196,4328376070224119511,11201759760883367635,13602951545837529973,8269257328703012432,15930698052919171086,6194305264313730032,8511737864852441844,13670206802546093234,3214181946162459584,140396870212231820,6445954214067437701,17952673493105230490,2025899804080897524,17740496701763775226,1809704172129195322,16306737306999003555,1508440849951861669,12494428953087324640,18188505856445531484,4421418468606442725,8566844905246185636,4807760870555738383,11210964267417873667,7201841978411396053,990192925663920333,14030142873804552388,14139765080256493579,13340751444307201866,2871608309888343463,7855094781869605606,15817956847588799375,5954536408321808728,17131529656312051452,18081743490344004315,13739729101529293427,7480253252288032958,7651693425519490419,1097494158696050491,8887924609778270360,9135110142507605216,13588160462734303101,8460565235419043665,11196821089257149774,11312003311374164325,16609137733952262762,11684705487012407227,1491840484128555837,3471746866096043087,14141479077115894852,9563008199132558110,8297015715799006244,4771789845668099116,5449860184735415958,5486211022469996717,10080296672372912698,1662641269094032596,2185437945364824599],[14684142559936015947,1662641269094032596,3214181946162459584,12709602171929957216,4421418468606442725,876963243827503916,1809704172129195322,5486211022469996717,3471746866096043087,3750439930725791025,8887924609778270360,17952673493105230490,13646498613066619660,7855094781869605606,11196821089257149774,8863346544623578893,18188505856445531484,2025899804080897524,14808063168960305551,18095952297474762348,14228923746783465609,17131529656312051452,13916027199283115943,13340751444307201866,7651693425519490419,7104261880154687267,9135110142507605216,18003287685830153881,17753909951719808506,6194305264313730032,4807760870555738383,5014806436727666175,6484183251661832039,17397123104674848450,16304636129468583592,1097494158696050491,17740496701763775226,1508440849951861669,8511737864852441844,7480253252288032958,11201759760883367635,8269257328703012432,17223836790030950966,12494428953087324640,18031616785650843168,990192925663920333,8460565235419043665,5888633415105234509,5954536408321808728,1627123781166851142,14496934933990319842,2834866505092039323,11684705487012407227,13588160462734303101,12922148192688274227,12185047359007423618,13446205009526451196,11210964267417873667,13027689870767713939,16609137733952262762,4328376070224119511,4560146526699152877,4102754869474520966,4301099429811409147,9808637865669223270,140396870212231820,7201841978411396053,1491840484128555837,2185437945364824599,16306737306999003555,5449860184735415958,14141479077115894852,8566844905246185636,15817956847588799375,17735408893002232096,14516211820212764316,14030142873804552388,15433707377961038695,17299978721726771610,12276520439585231336,10080296672372912698,11312003311374164325,13670206802546093234,17351444026127625357,4771789845668099116,2723198387862533596,12741076678082295759,16671141883125519098,2871608309888343463,13739729101529293427,12867379765049504290,18081743490344004315,13602951545837529973,14139765080256493579,15930698052919171086,18068340617333437755,8297015715799006244,17036604842139972912,6445954214067437701,17285637344898461972,11264395591110193456,9563008199132558110,6852799892628327372],[15817956847588799375,14516211820212764316,17397123104674848450,11201759760883367635,1662641269094032596,17351444026127625357,13916027199283115943,4301099429811409147,15354358358546908017,2185437945364824599,876963243827503916,4102754869474520966,1809704172129195322,13027689870767713939,12867379765049504290,2871608309888343463,16304636129468583592,11196821089257149774,12922148192688274227,14496934933990319842,14139765080256493579,5888633415105234509,12741076678082295759,17740496701763775226,9135110142507605216,4560146526699152877,6194305264313730032,15433707377961038695,6852799892628327372,11264395591110193456,7651693425519490419,17952673493105230490,6484183251661832039,11684705487012407227,13646498613066619660,5449860184735415958,8269257328703012432,13739729101529293427,10080296672372912698,1491840484128555837,18081743490344004315,18068340617333437755,3750439930725791025,14808063168960305551,3471746866096043087,9808637865669223270,18095952297474762348,5014806436727666175,18031616785650843168,8511737864852441844,14228923746783465609,14684142559936015947,13588160462734303101,16609137733952262762,1508440849951861669,4328376070224119511,12276520439585231336,17285637344898461972,17753909951719808506,11210964267417873667,1097494158696050491,12185047359007423618,6445954214067437701,2025899804080897524,18188505856445531484,11312003311374164325,12709602171929957216,140396870212231820,17223836790030950966,2834866505092039323,12494428953087324640,7855094781869605606,16671141883125519098,17131529656312051452,7480253252288032958,5486211022469996717,5954536408321808728,9563008199132558110,8887924609778270360,17735408893002232096,14141479077115894852,8460565235419043665,8566844905246185636,15930698052919171086,8863346544623578893,4421418468606442725,7201841978411396053,14950060858756810933,17299978721726771610,17036604842139972912,4807760870555738383,18003287685830153881,8297015715799006244,3214181946162459584,13340751444307201866,4771789845668099116,16306737306999003555,990192925663920333,13670206802546093234,7104261880154687267,13602951545837529973,1627123781166851142,14030142873804552388,2723198387862533596,13446205009526451196],[13916027199283115943,12922148192688274227,18081743490344004315,14030142873804552388,17299978721726771610,3214181946162459584,17397123104674848450,11210964267417873667,16304636129468583592,4560146526699152877,4301099429811409147,7480253252288032958,14496934933990319842,15930698052919171086,17223836790030950966,3471746866096043087,5449860184735415958,8887924609778270360,17753909951719808506,18003287685830153881,8269257328703012432,8297015715799006244,18095952297474762348,9808637865669223270,12276520439585231336,9563008199132558110,13340751444307201866,2723198387862533596,6852799892628327372,14950060858756810933,1627123781166851142,7651693425519490419,7201841978411396053,11684705487012407227,18188505856445531484,13027689870767713939,12709602171929957216,16671141883125519098,7104261880154687267,15433707377961038695,1491840484128555837,17740496701763775226,4771789845668099116,1097494158696050491,18068340617333437755,5954536408321808728,14516211820212764316,13646498613066619660,12185047359007423618,2871608309888343463,3750439930725791025,11196821089257149774,14228923746783465609,11201759760883367635,13446205009526451196,2185437945364824599,17036604842139972912,990192925663920333,6194305264313730032,14684142559936015947,17131529656312051452,12867379765049504290,5888633415105234509,14139765080256493579,10080296672372912698,15692102598187739001,1809704172129195322,1508440849951861669,14141479077115894852,17351444026127625357,11264395591110193456,12494428953087324640,17735408893002232096,4807760870555738383,13588160462734303101,140396870212231820,8511737864852441844,8566844905246185636,6484183251661832039,16306737306999003555,12741076678082295759,7855094781869605606,13602951545837529973,15354358358546908017,17952673493105230490,5014806436727666175,8460565235419043665,11312003311374164325,6445954214067437701,2834866505092039323,15817956847588799375,4421418468606442725,9135110142507605216,17285637344898461972,13670206802546093234,14808063168960305551,13739729101529293427,8863346544623578893,16609137733952262762,4328376070224119511,4102754869474520966,5486211022469996717,2025899804080897524,1662641269094032596,18031616785650843168,876963243827503916],[4421418468606442725,8863346544623578893,140396870212231820,11210964267417873667,17397123104674848450,7104261880154687267,4102754869474520966,17740496701763775226,15817956847588799375,4301099429811409147,17753909951719808506,12867379765049504290,18351415092709164412,13739729101529293427,2025899804080897524,11312003311374164325,11264395591110193456,7480253252288032958,15930698052919171086,5888633415105234509,14808063168960305551,15692102598187739001,17735408893002232096,12276520439585231336,9808637865669223270,7201841978411396053,6194305264313730032,13602951545837529973,5014806436727666175,11201759760883367635,3750439930725791025,8269257328703012432,17299978721726771610,18003287685830153881,13340751444307201866,7651693425519490419,4560146526699152877,1097494158696050491,13646498613066619660,18081743490344004315,1491840484128555837,13670206802546093234,14030142873804552388,18068340617333437755,2185437945364824599,9563008199132558110,17036604842139972912,4807760870555738383,7855094781869605606,1627123781166851142,13916027199283115943,5954536408321808728,14684142559936015947,990192925663920333,8566844905246185636,6484183251661832039,14496934933990319842,15354358358546908017,12709602171929957216,17351444026127625357,17223836790030950966,16306737306999003555,8297015715799006244,5449860184735415958,4328376070224119511,14228923746783465609,18188505856445531484,16671141883125519098,1662641269094032596,16304636129468583592,2723198387862533596,1009114585722052052,8887924609778270360,3471746866096043087,16609137733952262762,14950060858756810933,18031616785650843168,9135110142507605216,6445954214067437701,8460565235419043665,1508440849951861669,13027689870767713939,12922148192688274227,13588160462734303101,1809704172129195322,14141479077115894852,17131529656312051452,11196821089257149774,14139765080256493579,13446205009526451196,10080296672372912698,17285637344898461972,18095952297474762348,12494428953087324640,4771789845668099116,12234961922142600898,876963243827503916,5486211022469996717,6852799892628327372,17952673493105230490,15433707377961038695,2834866505092039323,11684705487012407227,3214181946162459584,2871608309888343463,12185047359007423618,12741076678082295759,8511737864852441844,14516211820212764316],[4560146526699152877,990192925663920333,5486211022469996717,18031616785650843168,7855094781869605606,2871608309888343463,11196821089257149774,15930698052919171086,7104088139635280554,17223836790030950966,18095952297474762348,8511737864852441844,15817956847588799375,8863346544623578893,16785043320296790229,2834866505092039323,17735408893002232096,13739729101529293427,15692102598187739001,12741076678082295759,16304636129468583592,11684705487012407227,18068340617333437755,16306737306999003555,14139765080256493579,6194305264313730032,9808637865669223270,12922148192688274227,2185437945364824599,14950060858756810933,2723198387862533596,13602951545837529973,13446205009526451196,17036604842139972912,7651693425519490419,7480253252288032958,15354358358546908017,1491840484128555837,17131529656312051452,11201759760883367635,8269257328703012432,8887924609778270360,18003287685830153881,876963243827503916,14684142559936015947,17952673493105230490,12867379765049504290,12494428953087324640,13588160462734303101,17351444026127625357,1508440849951861669,12709602171929957216,8297015715799006244,12276520439585231336,10080296672372912698,4301099429811409147,8566844905246185636,3750439930725791025,140396870212231820,7201841978411396053,14516211820212764316,14496934933990319842,1097494158696050491,4771789845668099116,5449860184735415958,8460565235419043665,3471746866096043087,13646498613066619660,1662641269094032596,14030142873804552388,16671141883125519098,4328376070224119511,14141479077115894852,6484183251661832039,12185047359007423618,13916027199283115943,2025899804080897524,1809704172129195322,4807760870555738383,18188505856445531484,9563008199132558110,6852799892628327372,3214181946162459584,1009114585722052052,12234961922142600898,17753909951719808506,14808063168960305551,18351415092709164412,16609137733952262762,7104261880154687267,11264395591110193456,17397123104674848450,5014806436727666175,14228923746783465609,13027689870767713939,11210964267417873667,17740496701763775226,17285637344898461972,17299978721726771610,4102754869474520966,6445954214067437701,13340751444307201866,1627123781166851142,9135110142507605216,13670206802546093234,5888633415105234509,15433707377961038695,18081743490344004315,11312003311374164325,5954536408321808728,4421418468606442725],[],[],[17696051535511578981,16780039553038473906],[17696051535511578981,6503655938154160104,16780039553038473906],[16780039553038473906,17696051535511578981,6503655938154160104,9071802450034150503],[9338394475379815879,6503655938154160104,9071802450034150503,17696051535511578981,16780039553038473906],[7977952035097419157,16780039553038473906,9338394475379815879,6503655938154160104,9071802450034150503,17696051535511578981],[],[16785043320296790229],[],[],[7201841978411396053,4328376070224119511],[16306737306999003555,17740496701763775226,13340751444307201866,1508440849951861669,6852799892628327372,17397123104674848450,18095952297474762348,2834866505092039323,13646498613066619660,13027689870767713939,9135110142507605216,3750439930725791025,16671141883125519098,7104261880154687267,18031616785650843168,13446205009526451196,1662641269094032596,12741076678082295759,16609137733952262762,17952673493105230490,17735408893002232096,5888633415105234509,8566844905246185636,3214181946162459584,11196821089257149774,7480253252288032958,7201841978411396053,2025899804080897524,4328376070224119511,17131529656312051452],[140396870212231820,11684705487012407227,11264395591110193456,17131529656312051452,1809704172129195322,7104261880154687267,5449860184735415958,18188505856445531484,8460565235419043665,12709602171929957216,16671141883125519098,18068340617333437755,12922148192688274227,3750439930725791025,5888633415105234509,17952673493105230490,18031616785650843168,5954536408321808728,3214181946162459584,4421418468606442725,14139765080256493579,8511737864852441844,4301099429811409147,7855094781869605606,18095952297474762348,13588160462734303101,5014806436727666175,9135110142507605216,13027689870767713939,16306737306999003555,16609137733952262762,11312003311374164325,8297015715799006244,8566844905246185636,14496934933990319842,12867379765049504290,13446205009526451196,12276520439585231336,990192925663920333,17397123104674848450,9808637865669223270,2871608309888343463,8887924609778270360,17299978721726771610,17735408893002232096,14141479077115894852,14516211820212764316,16304636129468583592,13646498613066619660,1097494158696050491,11196821089257149774,7480253252288032958,17753909951719808506,1491840484128555837,12741076678082295759,13602951545837529973,2834866505092039323,9563008199132558110,12494428953087324640,2185437945364824599,18081743490344004315,17036604842139972912,14228923746783465609,2025899804080897524,11210964267417873667,7201841978411396053,17740496701763775226,6484183251661832039,13340751444307201866,1508440849951861669,4328376070224119511,6852799892628327372,8863346544623578893,1662641269094032596,15433707377961038695,13670206802546093234],[7201841978411396053,3750439930725791025,13739729101529293427,9563008199132558110,14808063168960305551,13602951545837529973,16306737306999003555,7855094781869605606,18031616785650843168,1662641269094032596,13916027199283115943,13646498613066619660,12922148192688274227,12185047359007423618,11196821089257149774,140396870212231820,11684705487012407227,11264395591110193456,13027689870767713939,13340751444307201866,3214181946162459584,9808637865669223270,17351444026127625357,5888633415105234509,17285637344898461972,17036604842139972912,8887924609778270360,14496934933990319842,16304636129468583592,8460565235419043665,16671141883125519098,4421418468606442725,12741076678082295759,2025899804080897524,9135110142507605216,12709602171929957216,12867379765049504290,8863346544623578893,11312003311374164325,8511737864852441844,13446205009526451196,1809704172129195322,16609137733952262762,13588160462734303101,6445954214067437701,2185437945364824599,18188505856445531484,17397123104674848450,13670206802546093234,6484183251661832039,14228923746783465609,18003287685830153881,4301099429811409147,4771789845668099116,17735408893002232096,17131529656312051452,18081743490344004315,17299978721726771610,6852799892628327372,5954536408321808728,5486211022469996717,15930698052919171086,1508440849951861669,7480253252288032958,990192925663920333,2834866505092039323,14516211820212764316,17753909951719808506,15433707377961038695,14684142559936015947,17740496701763775226,1097494158696050491,12276520439585231336,4328376070224119511,6194305264313730032,8566844905246185636,14141479077115894852,1491840484128555837,14139765080256493579,4560146526699152877,8297015715799006244,18095952297474762348,10080296672372912698,17952673493105230490,3471746866096043087,2871608309888343463,5014806436727666175,5449860184735415958,18068340617333437755,12494428953087324640,7104261880154687267,11210964267417873667],[14139765080256493579,13670206802546093234,1809704172129195322,18068340617333437755,15930698052919171086,17740496701763775226,6852799892628327372,17952673493105230490,9135110142507605216,13340751444307201866,1491840484128555837,17299978721726771610,18031616785650843168,16306737306999003555,13739729101529293427,990192925663920333,17036604842139972912,5014806436727666175,3750439930725791025,2025899804080897524,2185437945364824599,13916027199283115943,7104261880154687267,17131529656312051452,14141479077115894852,13646498613066619660,17397123104674848450,13446205009526451196,14684142559936015947,9808637865669223270,17753909951719808506,1097494158696050491,16304636129468583592,9563008199132558110,6194305264313730032,14808063168960305551,12867379765049504290,13588160462734303101,15433707377961038695,13602951545837529973,6445954214067437701,15817956847588799375,12494428953087324640,8511737864852441844,140396870212231820,8460565235419043665,3214181946162459584,12709602171929957216,4421418468606442725,11312003311374164325,5888633415105234509,8863346544623578893,8566844905246185636,7201841978411396053,14516211820212764316,14496934933990319842,4560146526699152877,4328376070224119511,1662641269094032596,7480253252288032958,13027689870767713939,1508440849951861669,16609137733952262762,7855094781869605606,18003287685830153881,7651693425519490419,6484183251661832039,8887924609778270360,4301099429811409147,10080296672372912698,5449860184735415958,14228923746783465609,5954536408321808728,2834866505092039323,12185047359007423618,18081743490344004315,11196821089257149774,5486211022469996717,2871608309888343463,11264395591110193456,18188505856445531484,11210964267417873667,11684705487012407227,16671141883125519098,12276520439585231336,4771789845668099116,18095952297474762348,12741076678082295759,12922148192688274227,3471746866096043087,17285637344898461972,8297015715799006244,17351444026127625357,17735408893002232096],[14496934933990319842,6194305264313730032,13670206802546093234,16609137733952262762,12276520439585231336,3471746866096043087,7480253252288032958,11312003311374164325,13027689870767713939,1491840484128555837,1809704172129195322,8863346544623578893,13446205009526451196,18095952297474762348,17740496701763775226,140396870212231820,2834866505092039323,16304636129468583592,17299978721726771610,13646498613066619660,8887924609778270360,11264395591110193456,17397123104674848450,4560146526699152877,17285637344898461972,13739729101529293427,18031616785650843168,7855094781869605606,16306737306999003555,4301099429811409147,11210964267417873667,2185437945364824599,17036604842139972912,5449860184735415958,14228923746783465609,14139765080256493579,14684142559936015947,14516211820212764316,5014806436727666175,17351444026127625357,11196821089257149774,14808063168960305551,15930698052919171086,3750439930725791025,9563008199132558110,1662641269094032596,876963243827503916,13916027199283115943,6445954214067437701,7651693425519490419,13602951545837529973,12185047359007423618,10080296672372912698,15817956847588799375,2025899804080897524,13588160462734303101,12709602171929957216,8566844905246185636,17131529656312051452,8297015715799006244,12867379765049504290,4771789845668099116,14030142873804552388,18003287685830153881,1508440849951861669,18081743490344004315,4328376070224119511,3214181946162459584,7201841978411396053,12741076678082295759,990192925663920333,9135110142507605216,5486211022469996717,5954536408321808728,14141479077115894852,6484183251661832039,8460565235419043665,9808637865669223270,16671141883125519098,5888633415105234509,15433707377961038695,13340751444307201866,6852799892628327372,17753909951719808506,17735408893002232096,7104261880154687267,17952673493105230490,8511737864852441844,18068340617333437755,17223836790030950966,11684705487012407227,1097494158696050491,2871608309888343463,18188505856445531484,4421418468606442725,12922148192688274227,12494428953087324640],[13646498613066619660,14516211820212764316,14030142873804552388,1491840484128555837,13446205009526451196,14684142559936015947,17036604842139972912,10080296672372912698,5954536408321808728,4560146526699152877,7480253252288032958,8887924609778270360,6194305264313730032,18068340617333437755,17753909951719808506,5486211022469996717,13670206802546093234,1809704172129195322,5449860184735415958,17223836790030950966,13602951545837529973,7104261880154687267,13916027199283115943,14808063168960305551,17740496701763775226,8460565235419043665,11196821089257149774,6445954214067437701,16306737306999003555,2723198387862533596,8511737864852441844,4102754869474520966,18031616785650843168,2871608309888343463,13340751444307201866,15930698052919171086,11312003311374164325,4328376070224119511,12185047359007423618,16671141883125519098,18188505856445531484,7651693425519490419,17285637344898461972,7855094781869605606,3471746866096043087,1097494158696050491,12709602171929957216,2025899804080897524,15433707377961038695,876963243827503916,14496934933990319842,13588160462734303101,6484183251661832039,12494428953087324640,9563008199132558110,16304636129468583592,17299978721726771610,12276520439585231336,11264395591110193456,17397123104674848450,18095952297474762348,4807760870555738383,4771789845668099116,4301099429811409147,1662641269094032596,1508440849951861669,14228923746783465609,18081743490344004315,140396870212231820,13027689870767713939,7201841978411396053,2834866505092039323,17952673493105230490,12922148192688274227,17735408893002232096,16609137733952262762,11201759760883367635,18003287685830153881,8566844905246185636,11210964267417873667,6852799892628327372,3214181946162459584,17131529656312051452,12867379765049504290,990192925663920333,14141479077115894852,8297015715799006244,5014806436727666175,14139765080256493579,9135110142507605216,13739729101529293427,2185437945364824599,17351444026127625357,9808637865669223270,8863346544623578893,5888633415105234509,8269257328703012432,3750439930725791025,4421418468606442725,12741076678082295759,11684705487012407227,15817956847588799375],[2834866505092039323,5486211022469996717,7201841978411396053,13670206802546093234,7651693425519490419,15354358358546908017,14141479077115894852,17285637344898461972,1491840484128555837,5014806436727666175,7480253252288032958,14139765080256493579,8460565235419043665,17299978721726771610,17223836790030950966,8863346544623578893,12185047359007423618,6194305264313730032,18081743490344004315,8887924609778270360,18031616785650843168,18003287685830153881,12276520439585231336,876963243827503916,1809704172129195322,18095952297474762348,17036604842139972912,7104261880154687267,13739729101529293427,2871608309888343463,4807760870555738383,6445954214067437701,14030142873804552388,18068340617333437755,4102754869474520966,14228923746783465609,15930698052919171086,1627123781166851142,13602951545837529973,14516211820212764316,8269257328703012432,4771789845668099116,17397123104674848450,2723198387862533596,4328376070224119511,8297015715799006244,8511737864852441844,14684142559936015947,1662641269094032596,17740496701763775226,1097494158696050491,14950060858756810933,16306737306999003555,17753909951719808506,12922148192688274227,14496934933990319842,3214181946162459584,12494428953087324640,10080296672372912698,9135110142507605216,5449860184735415958,11312003311374164325,11684705487012407227,13646498613066619660,16304636129468583592,11210964267417873667,13027689870767713939,17735408893002232096,17952673493105230490,5954536408321808728,8566844905246185636,4560146526699152877,11196821089257149774,6484183251661832039,7855094781869605606,3750439930725791025,11264395591110193456,12741076678082295759,990192925663920333,17351444026127625357,13916027199283115943,6852799892628327372,12709602171929957216,16671141883125519098,17131529656312051452,5888633415105234509,140396870212231820,1508440849951861669,18188505856445531484,4301099429811409147,11201759760883367635,15817956847588799375,9563008199132558110,13446205009526451196,14808063168960305551,2025899804080897524,2185437945364824599,3471746866096043087,12867379765049504290,9808637865669223270,13340751444307201866,4421418468606442725,13588160462734303101,15433707377961038695,16609137733952262762],[15433707377961038695,990192925663920333,7855094781869605606,12494428953087324640,12234961922142600898,14808063168960305551,17397123104674848450,14950060858756810933,8460565235419043665,16306737306999003555,4421418468606442725,7104261880154687267,4771789845668099116,18081743490344004315,17952673493105230490,8887924609778270360,6852799892628327372,15354358358546908017,1491840484128555837,12709602171929957216,7480253252288032958,15817956847588799375,13446205009526451196,11210964267417873667,13588160462734303101,17131529656312051452,7651693425519490419,2185437945364824599,17735408893002232096,2723198387862533596,18031616785650843168,6484183251661832039,13340751444307201866,11201759760883367635,4102754869474520966,17285637344898461972,5954536408321808728,140396870212231820,876963243827503916,8566844905246185636,11312003311374164325,9808637865669223270,15692102598187739001,17299978721726771610,3750439930725791025,5486211022469996717,14516211820212764316,13027689870767713939,6445954214067437701,14228923746783465609,1508440849951861669,12867379765049504290,8863346544623578893,2834866505092039323,1097494158696050491,18188505856445531484,17223836790030950966,8269257328703012432,13739729101529293427,18003287685830153881,16609137733952262762,7201841978411396053,16304636129468583592,12185047359007423618,1662641269094032596,14139765080256493579,5888633415105234509,4328376070224119511,10080296672372912698,14496934933990319842,11684705487012407227,13916027199283115943,6194305264313730032,14030142873804552388,2871608309888343463,3471746866096043087,17036604842139972912,4807760870555738383,18095952297474762348,3214181946162459584,5014806436727666175,9135110142507605216,8511737864852441844,17351444026127625357,2025899804080897524,8297015715799006244,12276520439585231336,4301099429811409147,18068340617333437755,12741076678082295759,11264395591110193456,4560146526699152877,1809704172129195322,12922148192688274227,9563008199132558110,13646498613066619660,7104088139635280554,13602951545837529973,11196821089257149774,13670206802546093234,15930698052919171086,1627123781166851142,16671141883125519098,17740496701763775226,14141479077115894852,5449860184735415958,14684142559936015947,17753909951719808506],[15433707377961038695,17952673493105230490,13739729101529293427,11312003311374164325,14496934933990319842,13670206802546093234,1627123781166851142,16306737306999003555,1662641269094032596,17285637344898461972,5888633415105234509,12234961922142600898,17036604842139972912,8566844905246185636,12867379765049504290,4560146526699152877,14808063168960305551,2723198387862533596,18068340617333437755,18095952297474762348,7651693425519490419,13446205009526451196,18188505856445531484,12494428953087324640,18031616785650843168,3750439930725791025,13588160462734303101,5954536408321808728,7104088139635280554,14516211820212764316,2185437945364824599,15692102598187739001,13340751444307201866,1809704172129195322,5014806436727666175,990192925663920333,15817956847588799375,4328376070224119511,8511737864852441844,9808637865669223270,13916027199283115943,1491840484128555837,4807760870555738383,12185047359007423618,8269257328703012432,18003287685830153881,8297015715799006244,3471746866096043087,4421418468606442725,5486211022469996717,2025899804080897524,16609137733952262762,6484183251661832039,17131529656312051452,17735408893002232096,2834866505092039323,13646498613066619660,15930698052919171086,17299978721726771610,11196821089257149774,12709602171929957216,7855094781869605606,876963243827503916,11264395591110193456,16304636129468583592,8460565235419043665,1009114585722052052,10080296672372912698,14030142873804552388,8887924609778270360,1508440849951861669,12276520439585231336,13027689870767713939,14228923746783465609,15354358358546908017,140396870212231820,3214181946162459584,17223836790030950966,6194305264313730032,11201759760883367635,14950060858756810933,9563008199132558110,5449860184735415958,8863346544623578893,17753909951719808506,13602951545837529973,7201841978411396053,14139765080256493579,4102754869474520966,18081743490344004315,17740496701763775226,17351444026127625357,16671141883125519098,1097494158696050491,12741076678082295759,9135110142507605216,6852799892628327372,4301099429811409147,11210964267417873667,14684142559936015947,17397123104674848450,7104261880154687267,11684705487012407227,12922148192688274227,7480253252288032958,6445954214067437701,18351415092709164412,14141479077115894852,4771789845668099116,2871608309888343463],[16306737306999003555,11210964267417873667,8566844905246185636,13739729101529293427,8297015715799006244,9563008199132558110,7855094781869605606,18081743490344004315,16609137733952262762,1491840484128555837,3750439930725791025,17740496701763775226,12741076678082295759,14684142559936015947,18068340617333437755,14496934933990319842,1508440849951861669,13588160462734303101,2723198387862533596,6852799892628327372,1097494158696050491,7104088139635280554,2025899804080897524,12185047359007423618,17131529656312051452,1809704172129195322,13340751444307201866,7480253252288032958,18188505856445531484,15930698052919171086,17397123104674848450,17285637344898461972,12494428953087324640,17036604842139972912,876963243827503916,11312003311374164325,3471746866096043087,4328376070224119511,1662641269094032596,13602951545837529973,12867379765049504290,4301099429811409147,990192925663920333,7651693425519490419,14228923746783465609,17351444026127625357,4771789845668099116,17299978721726771610,16304636129468583592,6194305264313730032,13670206802546093234,1627123781166851142,10080296672372912698,18351415092709164412,11196821089257149774,13027689870767713939,13446205009526451196,11264395591110193456,2185437945364824599,8863346544623578893,9135110142507605216,8460565235419043665,5888633415105234509,4102754869474520966,11201759760883367635,8511737864852441844,14950060858756810933,4560146526699152877,14139765080256493579,5014806436727666175,6445954214067437701,14030142873804552388,16780039553038473906,8887924609778270360,14516211820212764316,2834866505092039323,15433707377961038695,12234961922142600898,15817956847588799375,12922148192688274227,8269257328703012432,4807760870555738383,7104261880154687267,16671141883125519098,15354358358546908017,11684705487012407227,2871608309888343463,17952673493105230490,12276520439585231336,1009114585722052052,5486211022469996717,17735408893002232096,12709602171929957216,5954536408321808728,13646498613066619660,6484183251661832039,9808637865669223270,4421418468606442725,3214181946162459584,13916027199283115943,17753909951719808506,15692102598187739001,5449860184735415958,18031616785650843168,18095952297474762348,14808063168960305551,18003287685830153881,7201841978411396053,140396870212231820,14141479077115894852,17223836790030950966],[18068340617333437755,11312003311374164325,990192925663920333,1627123781166851142,14684142559936015947,4102754869474520966,11201759760883367635,7104261880154687267,1662641269094032596,3471746866096043087,17223836790030950966,6484183251661832039,6852799892628327372,4301099429811409147,8566844905246185636,1097494158696050491,15692102598187739001,13646498613066619660,4771789845668099116,6445954214067437701,14141479077115894852,3750439930725791025,7201841978411396053,12922148192688274227,4560146526699152877,8511737864852441844,17299978721726771610,13340751444307201866,8863346544623578893,13027689870767713939,16609137733952262762,11684705487012407227,11196821089257149774,11264395591110193456,8297015715799006244,12741076678082295759,1009114585722052052,15354358358546908017,17740496701763775226,17952673493105230490,14808063168960305551,4421418468606442725,1809704172129195322,5014806436727666175,9563008199132558110,2025899804080897524,18095952297474762348,15817956847588799375,11210964267417873667,13739729101529293427,17351444026127625357,12494428953087324640,3214181946162459584,12709602171929957216,13446205009526451196,16780039553038473906,2834866505092039323,13588160462734303101,5888633415105234509,5486211022469996717,14950060858756810933,9135110142507605216,15433707377961038695,18188505856445531484,8887924609778270360,13602951545837529973,15930698052919171086,9808637865669223270,16306737306999003555,14516211820212764316,13670206802546093234,2871608309888343463,14228923746783465609,5449860184735415958,1508440849951861669,7480253252288032958,14496934933990319842,16671141883125519098,7104088139635280554,876963243827503916,14139765080256493579,12867379765049504290,16304636129468583592,12185047359007423618,1491840484128555837,17753909951719808506,17131529656312051452,140396870212231820,18351415092709164412,8269257328703012432,7855094781869605606,2185437945364824599,18003287685830153881,7651693425519490419,17397123104674848450,8460565235419043665,16785043320296790229,17285637344898461972,4328376070224119511,17735408893002232096,2723198387862533596,6194305264313730032,18031616785650843168,14030142873804552388,17036604842139972912,12276520439585231336,18081743490344004315,12234961922142600898,13916027199283115943,5954536408321808728,10080296672372912698,4807760870555738383],[13446205009526451196,4301099429811409147,8269257328703012432,12709602171929957216,13602951545837529973,17952673493105230490,15817956847588799375,17299978721726771610,11684705487012407227,13588160462734303101,18188505856445531484,12741076678082295759,17223836790030950966,1097494158696050491,9135110142507605216,17036604842139972912,140396870212231820,6445954214067437701,13739729101529293427,2185437945364824599,1009114585722052052,13670206802546093234,14950060858756810933,16306737306999003555,14228923746783465609,17753909951719808506,4560146526699152877,1809704172129195322,12867379765049504290,16780039553038473906,5888633415105234509,4421418468606442725,2723198387862533596,11196821089257149774,12276520439585231336,12922148192688274227,16671141883125519098,17397123104674848450,14030142873804552388,11201759760883367635,17735408893002232096,6852799892628327372,18068340617333437755,14496934933990319842,16304636129468583592,1627123781166851142,4328376070224119511,2025899804080897524,18351415092709164412,6484183251661832039,7104088139635280554,13340751444307201866,5014806436727666175,8511737864852441844,9563008199132558110,876963243827503916,1491840484128555837,18003287685830153881,18031616785650843168,1662641269094032596,10080296672372912698,3471746866096043087,6194305264313730032,7104261880154687267,11210964267417873667,4102754869474520966,15354358358546908017,13027689870767713939,8566844905246185636,4807760870555738383,16785043320296790229,13916027199283115943,16609137733952262762,4771789845668099116,17351444026127625357,13646498613066619660,14139765080256493579,15433707377961038695,17740496701763775226,15692102598187739001,5486211022469996717,14141479077115894852,18081743490344004315,12234961922142600898,8297015715799006244,14684142559936015947,5954536408321808728,12185047359007423618,18095952297474762348,14516211820212764316,8460565235419043665,17131529656312051452,990192925663920333,5449860184735415958,3750439930725791025,17696051535511578981,7201841978411396053,15930698052919171086,1508440849951861669,11312003311374164325,2871608309888343463,11264395591110193456,17285637344898461972,12494428953087324640,7480253252288032958,8863346544623578893,14808063168960305551,3214181946162459584,2834866505092039323,9808637865669223270,8887924609778270360,7855094781869605606,7651693425519490419],[],[],[],[16780039553038473906,17696051535511578981],[9071802450034150503,17696051535511578981,16780039553038473906],[16780039553038473906,9071802450034150503,17696051535511578981,16785043320296790229],[9071802450034150503,16780039553038473906,17696051535511578981,16785043320296790229,9338394475379815879],[9071802450034150503,16785043320296790229,16780039553038473906,17696051535511578981],[17696051535511578981,16780039553038473906],[],[6503655938154160104],[],[7104088139635280554],[16785043320296790229],[],[],[16780039553038473906],[17696051535511578981,16780039553038473906,7104088139635280554],[16780039553038473906,9338394475379815879,7104088139635280554,17696051535511578981,16785043320296790229,9071802450034150503],[16785043320296790229,16780039553038473906,9071802450034150503,9338394475379815879,17696051535511578981,7977952035097419157,7104088139635280554],[17696051535511578981,16785043320296790229,7104088139635280554,16780039553038473906],[16785043320296790229,7104088139635280554,16780039553038473906],[16780039553038473906,7104088139635280554],[16780039553038473906],[],[16780039553038473906],[16780039553038473906,7104088139635280554],[7104088139635280554,16780039553038473906,9071802450034150503,17696051535511578981,9338394475379815879,16785043320296790229],[9338394475379815879,9071802450034150503,7977952035097419157,17696051535511578981,16785043320296790229,16780039553038473906,7104088139635280554],[],[],[16780039553038473906],[17696051535511578981,16780039553038473906],[],[1009114585722052052],[]],"selection_redo_history":[]}}},"collapsed":[],"name":"painted-dreams.graphite","commit_hash":"3a591dac6a53454813c8df6ceed5b44b91d1e816","document_ptz":{"pan":[-768.2748744089959,-384.56142660725646],"tilt":0.0,"zoom":1.0},"document_mode":"DesignMode","view_mode":"Normal","overlays_visible":true,"rulers_visible":true,"graph_view_overlay_open":false,"snapping_state":{"snapping_enabled":true,"grid_snapping":false,"bounds":{"edges":true,"corners":true,"edge_midpoints":false,"centers":true,"align":true,"distribute":true},"nodes":{"paths":true,"path_intersections":true,"anchors":true,"line_midpoints":true,"normals":true,"tangents":true,"align":false},"grid":{"origin":[0.0,0.0],"grid_type":{"Rectangle":{"spacing":[1.0,1.0]}},"grid_color":{"red":0.6038274,"green":0.6038274,"blue":0.6038274,"alpha":1.0},"dot_display":false},"tolerance":8.0,"artboards":true}} \ No newline at end of file diff --git a/editor/src/messages/portfolio/document/graph_operation/utility_types.rs b/editor/src/messages/portfolio/document/graph_operation/utility_types.rs index a49238b1..01d71075 100644 --- a/editor/src/messages/portfolio/document/graph_operation/utility_types.rs +++ b/editor/src/messages/portfolio/document/graph_operation/utility_types.rs @@ -145,15 +145,15 @@ impl<'a> ModifyInputsContext<'a> { } pub fn insert_vector_data(&mut self, subpaths: Vec>, layer: LayerNodeIdentifier) { - let shape = resolve_document_node_type("Shape") - .expect("Shape node does not exist") + let path = resolve_document_node_type("Path") + .expect("Path node does not exist") .node_template_input_override([Some(NodeInput::value(TaggedValue::Subpaths(subpaths), false))]); let transform = resolve_document_node_type("Transform").expect("Transform node does not exist").default_node_template(); let fill = resolve_document_node_type("Fill").expect("Fill node does not exist").default_node_template(); let stroke = resolve_document_node_type("Stroke").expect("Stroke node does not exist").default_node_template(); let shape_id = NodeId(generate_uuid()); - self.network_interface.insert_node(shape_id, shape, &[]); + self.network_interface.insert_node(shape_id, path, &[]); self.network_interface.move_node_to_chain_start(&shape_id, layer, &[]); let transform_id = NodeId(generate_uuid()); diff --git a/editor/src/messages/portfolio/document/node_graph/document_node_definitions.rs b/editor/src/messages/portfolio/document/node_graph/document_node_definitions.rs index c967bb5f..08b56025 100644 --- a/editor/src/messages/portfolio/document/node_graph/document_node_definitions.rs +++ b/editor/src/messages/portfolio/document/node_graph/document_node_definitions.rs @@ -2159,12 +2159,13 @@ fn static_nodes() -> Vec { DocumentNode { inputs: vec![NodeInput::network(concrete!(VectorData), 0), NodeInput::network(concrete!(vector::style::Fill), 1)], implementation: DocumentNodeImplementation::ProtoNode(ProtoNodeIdentifier::new("graphene_std::vector::BooleanOperationNode")), + manual_composition: Some(generic!(T)), ..Default::default() }, DocumentNode { inputs: vec![NodeInput::node(NodeId(0), 0)], implementation: DocumentNodeImplementation::ProtoNode(ProtoNodeIdentifier::new("graphene_core::memo::ImpureMemoNode")), - manual_composition: Some(concrete!(Footprint)), + manual_composition: Some(generic!(T)), ..Default::default() }, ] diff --git a/editor/src/messages/portfolio/document/node_graph/node_properties.rs b/editor/src/messages/portfolio/document/node_graph/node_properties.rs index e500fc44..d47a2ee9 100644 --- a/editor/src/messages/portfolio/document/node_graph/node_properties.rs +++ b/editor/src/messages/portfolio/document/node_graph/node_properties.rs @@ -2268,17 +2268,10 @@ pub(crate) fn generate_node_properties(document_node: &DocumentNode, node_id: No } pub(crate) fn boolean_operation_properties(document_node: &DocumentNode, node_id: NodeId, _context: &mut NodePropertiesContext) -> Vec { - let group_of_paths_index = 0; let operation_index = 1; - - let mut widgets = start_widgets(document_node, node_id, group_of_paths_index, "Group of Paths", FrontendGraphDataType::Graphic, true); - - widgets.push(Separator::new(SeparatorType::Unrelated).widget_holder()); - widgets.push(TextLabel::new("The output of a layer stack, which contains all elements to operate on").widget_holder()); - let operation = boolean_operation_radio_buttons(document_node, node_id, operation_index, "Operation", true); - vec![LayoutGroup::Row { widgets }, operation] + vec![operation] } pub(crate) fn copy_to_points_properties(document_node: &DocumentNode, node_id: NodeId, _context: &mut NodePropertiesContext) -> Vec { diff --git a/libraries/bezier-rs/src/bezier/core.rs b/libraries/bezier-rs/src/bezier/core.rs index 35cb72b9..ea1930f6 100644 --- a/libraries/bezier-rs/src/bezier/core.rs +++ b/libraries/bezier-rs/src/bezier/core.rs @@ -113,16 +113,9 @@ impl Bezier { /// Return the string argument used to create a curve in an SVG `path`, excluding the start point. pub fn svg_curve_argument(&self) -> String { - let handle_args = match self.handles { - BezierHandles::Linear => SVG_ARG_LINEAR.to_string(), - BezierHandles::Quadratic { handle } => { - format!("{SVG_ARG_QUADRATIC}{} {}", handle.x, handle.y) - } - BezierHandles::Cubic { handle_start, handle_end } => { - format!("{SVG_ARG_CUBIC}{} {} {} {}", handle_start.x, handle_start.y, handle_end.x, handle_end.y) - } - }; - format!("{handle_args} {} {}", self.end.x, self.end.y) + let mut out = String::new(); + self.write_curve_argument(&mut out).unwrap(); + out } /// Write the curve argument to the string diff --git a/libraries/path-bool/.gitignore b/libraries/path-bool/.gitignore new file mode 100644 index 00000000..3d626b23 --- /dev/null +++ b/libraries/path-bool/.gitignore @@ -0,0 +1,2 @@ +/target +test-results diff --git a/libraries/path-bool/Cargo.toml b/libraries/path-bool/Cargo.toml new file mode 100644 index 00000000..6686b33a --- /dev/null +++ b/libraries/path-bool/Cargo.toml @@ -0,0 +1,38 @@ +[package] +name = "path-bool" +version = "0.1.0" +rust-version = "1.81" +authors = ["Graphite Authors "] +edition = "2021" +keywords = ["bezier", "boolean", "path", "ops", "operations", "2d"] +categories = ["graphics", "mathematics"] +license = "MIT OR Apache-2.0" + + +[features] +logging = ["parsing"] +parsing = [] +default = ["parsing"] + +[dependencies] +glam = "0.28.0" +regex = "1.10.6" +slotmap = "1.0.7" + +[dev-dependencies] +glob = "0.3" +svg = "0.13" +resvg = "0.42" +image = "0.24" + +# Required dependencies +criterion = { version = "0.5", features = ["html_reports"]} + +# Benchmarks +[[bench]] +name = "painted_dreams" +harness = false + +[[bench]] +name = "path_segment_intersection" +harness = false diff --git a/libraries/path-bool/LICENSE-APACHE b/libraries/path-bool/LICENSE-APACHE new file mode 100644 index 00000000..261eeb9e --- /dev/null +++ b/libraries/path-bool/LICENSE-APACHE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. diff --git a/libraries/path-bool/LICENSE-MIT b/libraries/path-bool/LICENSE-MIT new file mode 100644 index 00000000..826be3fb --- /dev/null +++ b/libraries/path-bool/LICENSE-MIT @@ -0,0 +1,10 @@ +MIT License + +Copyright (c) 2024 Adam Platkevič +Copyright (c) 2024 Graphite Authors + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/libraries/path-bool/NOTICE b/libraries/path-bool/NOTICE new file mode 100644 index 00000000..80cfbdae --- /dev/null +++ b/libraries/path-bool/NOTICE @@ -0,0 +1,6 @@ +NOTICE + +This project includes software originally developed by Adam Platkevič. +The original project is licensed under the MIT License. + +Rust port and modifications are (c) 2024 Graphite Authors. diff --git a/libraries/path-bool/README.md b/libraries/path-bool/README.md new file mode 100644 index 00000000..379b975d --- /dev/null +++ b/libraries/path-bool/README.md @@ -0,0 +1,68 @@ +# Path Bool + +A Rust library for performing boolean operations on SVG paths. + +Path Bool is a port of [PathBool.js](https://github.com/r-flash/PathBool.js), providing low-level functionality for boolean operations on complex 2D paths. It handles paths with multiple subpaths, self-intersections, and different fill rules. + +## Features + +- Supports multiple boolean operations: Union, Intersection, Difference, Exclusion, Division, and Fracture. +- Handles both `NonZero` and `EvenOdd` fill rules. +- Works with paths containing lines, cubic Bézier curves, quadratic Bézier curves, and elliptical arcs. +- Provides utilities for parsing and generating SVG path data. + +## Installation + +Add this to your `Cargo.toml`: + +```toml +[dependencies] +path-bool = "0.1.0" +``` + +## Usage + +Here's a basic example of performing an intersection operation on two paths: + +```rust +use path_bool::{path_boolean, FillRule, PathBooleanOperation, path_from_path_data, path_to_path_data}; + +fn main() { + let path_a = path_from_path_data("M 10 10 L 50 10 L 30 40 Z"); + let path_b = path_from_path_data("M 20 30 L 60 30 L 60 50 L 20 50 Z"); + + let result = path_boolean( + &path_a, + FillRule::NonZero, + &path_b, + FillRule::NonZero, + PathBooleanOperation::Intersection + ).unwrap(); + + let result_data = path_to_path_data(&result[0], 0.001); + println!("Result: {}", result_data); +} +``` + +## Algorithm + +The boolean operations are implemented using a graph-based approach. After the parsing the input, self-intersecting cubic beziers curves are simplified. Then the intersection points between all edges are calculated. These are then turned into a graph representation where every intersection becomes a new vertex. We then apply edge contractions to remove vertices with a degree of 2 to compute the [graph minor](https://en.wikipedia.org/wiki/Graph_minor). At this stage, identical edges are deduplicated. Because we are ultimately interested in the faces of the graph to decide if they should be included in the final output, we then compute the dual graph in which the faces become vertices and vertices become the new faces. That dual structure is then used to determine which faces (dual vertices) should be included in the final output. + +## Development status + +This project is a port of PathBool.js and is still in early stages of development. Contributions, bug reports, and feedback are welcome. + +Future work includes: + +- Comprehensive test suite +- Performance optimizations +- Additional examples and documentation + +## License and acknowledgements + +This library is a Rust port of [PathBool.js](https://github.com/r-flash/PathBool.js) by Adam Platkevič. + +It is dual-licensed under the MIT License or Apache-2.0 License. You may opt to comply with either license. + +Copyright © 2024 Adam Platkevič +Copyright © 2024 Graphite Authors diff --git a/libraries/path-bool/__fixtures__/visual-tests/dangling-01/difference.svg b/libraries/path-bool/__fixtures__/visual-tests/dangling-01/difference.svg new file mode 100644 index 00000000..8bd25088 --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/dangling-01/difference.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/dangling-01/division.svg b/libraries/path-bool/__fixtures__/visual-tests/dangling-01/division.svg new file mode 100644 index 00000000..3f598745 --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/dangling-01/division.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/dangling-01/exclusion.svg b/libraries/path-bool/__fixtures__/visual-tests/dangling-01/exclusion.svg new file mode 100644 index 00000000..b0949e0f --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/dangling-01/exclusion.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/dangling-01/fracture.svg b/libraries/path-bool/__fixtures__/visual-tests/dangling-01/fracture.svg new file mode 100644 index 00000000..142cccbc --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/dangling-01/fracture.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/dangling-01/intersection.svg b/libraries/path-bool/__fixtures__/visual-tests/dangling-01/intersection.svg new file mode 100644 index 00000000..5595e7d7 --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/dangling-01/intersection.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/dangling-01/original.svg b/libraries/path-bool/__fixtures__/visual-tests/dangling-01/original.svg new file mode 100644 index 00000000..73668dee --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/dangling-01/original.svg @@ -0,0 +1,16 @@ + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/dangling-01/union.svg b/libraries/path-bool/__fixtures__/visual-tests/dangling-01/union.svg new file mode 100644 index 00000000..4e4df455 --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/dangling-01/union.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/dangling-02/difference.svg b/libraries/path-bool/__fixtures__/visual-tests/dangling-02/difference.svg new file mode 100644 index 00000000..8bd25088 --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/dangling-02/difference.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/dangling-02/division.svg b/libraries/path-bool/__fixtures__/visual-tests/dangling-02/division.svg new file mode 100644 index 00000000..b95b4e41 --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/dangling-02/division.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/dangling-02/exclusion.svg b/libraries/path-bool/__fixtures__/visual-tests/dangling-02/exclusion.svg new file mode 100644 index 00000000..66504543 --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/dangling-02/exclusion.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/dangling-02/fracture.svg b/libraries/path-bool/__fixtures__/visual-tests/dangling-02/fracture.svg new file mode 100644 index 00000000..b1a44e6a --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/dangling-02/fracture.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/dangling-02/intersection.svg b/libraries/path-bool/__fixtures__/visual-tests/dangling-02/intersection.svg new file mode 100644 index 00000000..21cf4ef8 --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/dangling-02/intersection.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/dangling-02/original.svg b/libraries/path-bool/__fixtures__/visual-tests/dangling-02/original.svg new file mode 100644 index 00000000..24bb0df7 --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/dangling-02/original.svg @@ -0,0 +1,16 @@ + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/dangling-02/union.svg b/libraries/path-bool/__fixtures__/visual-tests/dangling-02/union.svg new file mode 100644 index 00000000..5ce5269a --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/dangling-02/union.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/dangling-03/difference.svg b/libraries/path-bool/__fixtures__/visual-tests/dangling-03/difference.svg new file mode 100644 index 00000000..6db8be97 --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/dangling-03/difference.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/dangling-03/division.svg b/libraries/path-bool/__fixtures__/visual-tests/dangling-03/division.svg new file mode 100644 index 00000000..d962fd3f --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/dangling-03/division.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/dangling-03/exclusion.svg b/libraries/path-bool/__fixtures__/visual-tests/dangling-03/exclusion.svg new file mode 100644 index 00000000..6db8be97 --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/dangling-03/exclusion.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/dangling-03/fracture.svg b/libraries/path-bool/__fixtures__/visual-tests/dangling-03/fracture.svg new file mode 100644 index 00000000..d962fd3f --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/dangling-03/fracture.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/dangling-03/intersection.svg b/libraries/path-bool/__fixtures__/visual-tests/dangling-03/intersection.svg new file mode 100644 index 00000000..6db8be97 --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/dangling-03/intersection.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/dangling-03/original.svg b/libraries/path-bool/__fixtures__/visual-tests/dangling-03/original.svg new file mode 100644 index 00000000..a25711e0 --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/dangling-03/original.svg @@ -0,0 +1,16 @@ + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/dangling-03/union.svg b/libraries/path-bool/__fixtures__/visual-tests/dangling-03/union.svg new file mode 100644 index 00000000..6db8be97 --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/dangling-03/union.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/dangling-04/difference.svg b/libraries/path-bool/__fixtures__/visual-tests/dangling-04/difference.svg new file mode 100644 index 00000000..bae74eb6 --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/dangling-04/difference.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/dangling-04/division.svg b/libraries/path-bool/__fixtures__/visual-tests/dangling-04/division.svg new file mode 100644 index 00000000..201715a3 --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/dangling-04/division.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/dangling-04/exclusion.svg b/libraries/path-bool/__fixtures__/visual-tests/dangling-04/exclusion.svg new file mode 100644 index 00000000..b3569ede --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/dangling-04/exclusion.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/dangling-04/fracture.svg b/libraries/path-bool/__fixtures__/visual-tests/dangling-04/fracture.svg new file mode 100644 index 00000000..33de261f --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/dangling-04/fracture.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/dangling-04/intersection.svg b/libraries/path-bool/__fixtures__/visual-tests/dangling-04/intersection.svg new file mode 100644 index 00000000..73f4c7da --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/dangling-04/intersection.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/dangling-04/original.svg b/libraries/path-bool/__fixtures__/visual-tests/dangling-04/original.svg new file mode 100644 index 00000000..7d32ceef --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/dangling-04/original.svg @@ -0,0 +1,16 @@ + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/dangling-04/union.svg b/libraries/path-bool/__fixtures__/visual-tests/dangling-04/union.svg new file mode 100644 index 00000000..89fe9b63 --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/dangling-04/union.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/establish-ground-truth.sh b/libraries/path-bool/__fixtures__/visual-tests/establish-ground-truth.sh new file mode 100755 index 00000000..6bdb1ae5 --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/establish-ground-truth.sh @@ -0,0 +1,5 @@ +for dir in */; do + for fn in difference division exclusion fracture intersection union; do + cp "${dir}test-results/$fn-ours.svg" "$dir$fn.svg" + done +done diff --git a/libraries/path-bool/__fixtures__/visual-tests/generate-ground-truth.sh b/libraries/path-bool/__fixtures__/visual-tests/generate-ground-truth.sh new file mode 100755 index 00000000..104b43cf --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/generate-ground-truth.sh @@ -0,0 +1,10 @@ +INKSCAPE_CMD=inkscape +OPS=(union difference intersection exclusion division fracture) + +for dir in */; do + for op in "${OPS[@]}"; do + if [ ! -e "$dir/$op.svg" ]; then + $INKSCAPE_CMD --actions="select-all; path-$op; export-filename:$dir/$op.svg; export-plain-svg; export-do; file-close" "$dir/original.svg" + fi + done +done diff --git a/libraries/path-bool/__fixtures__/visual-tests/nesting-01/difference.svg b/libraries/path-bool/__fixtures__/visual-tests/nesting-01/difference.svg new file mode 100644 index 00000000..5cb447eb --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/nesting-01/difference.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/nesting-01/division.svg b/libraries/path-bool/__fixtures__/visual-tests/nesting-01/division.svg new file mode 100644 index 00000000..0e86f178 --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/nesting-01/division.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/nesting-01/exclusion.svg b/libraries/path-bool/__fixtures__/visual-tests/nesting-01/exclusion.svg new file mode 100644 index 00000000..5cb447eb --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/nesting-01/exclusion.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/nesting-01/fracture.svg b/libraries/path-bool/__fixtures__/visual-tests/nesting-01/fracture.svg new file mode 100644 index 00000000..0e86f178 --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/nesting-01/fracture.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/nesting-01/intersection.svg b/libraries/path-bool/__fixtures__/visual-tests/nesting-01/intersection.svg new file mode 100644 index 00000000..45182cc3 --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/nesting-01/intersection.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/nesting-01/original.svg b/libraries/path-bool/__fixtures__/visual-tests/nesting-01/original.svg new file mode 100644 index 00000000..72e961e1 --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/nesting-01/original.svg @@ -0,0 +1,25 @@ + + + + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/nesting-01/union.svg b/libraries/path-bool/__fixtures__/visual-tests/nesting-01/union.svg new file mode 100644 index 00000000..7158b230 --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/nesting-01/union.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/nesting-02/difference.svg b/libraries/path-bool/__fixtures__/visual-tests/nesting-02/difference.svg new file mode 100644 index 00000000..204cfe54 --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/nesting-02/difference.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/nesting-02/division.svg b/libraries/path-bool/__fixtures__/visual-tests/nesting-02/division.svg new file mode 100644 index 00000000..e1f74182 --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/nesting-02/division.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/nesting-02/exclusion.svg b/libraries/path-bool/__fixtures__/visual-tests/nesting-02/exclusion.svg new file mode 100644 index 00000000..6b0fa562 --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/nesting-02/exclusion.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/nesting-02/fracture.svg b/libraries/path-bool/__fixtures__/visual-tests/nesting-02/fracture.svg new file mode 100644 index 00000000..cbaa7fb7 --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/nesting-02/fracture.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/nesting-02/intersection.svg b/libraries/path-bool/__fixtures__/visual-tests/nesting-02/intersection.svg new file mode 100644 index 00000000..32fe0d3d --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/nesting-02/intersection.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/nesting-02/original.svg b/libraries/path-bool/__fixtures__/visual-tests/nesting-02/original.svg new file mode 100644 index 00000000..9538dcfc --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/nesting-02/original.svg @@ -0,0 +1,25 @@ + + + + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/nesting-02/union.svg b/libraries/path-bool/__fixtures__/visual-tests/nesting-02/union.svg new file mode 100644 index 00000000..0b77e355 --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/nesting-02/union.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/nesting-03/difference.svg b/libraries/path-bool/__fixtures__/visual-tests/nesting-03/difference.svg new file mode 100644 index 00000000..1057abc9 --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/nesting-03/difference.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/nesting-03/division.svg b/libraries/path-bool/__fixtures__/visual-tests/nesting-03/division.svg new file mode 100644 index 00000000..7b029cb3 --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/nesting-03/division.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/nesting-03/exclusion.svg b/libraries/path-bool/__fixtures__/visual-tests/nesting-03/exclusion.svg new file mode 100644 index 00000000..1057abc9 --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/nesting-03/exclusion.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/nesting-03/fracture.svg b/libraries/path-bool/__fixtures__/visual-tests/nesting-03/fracture.svg new file mode 100644 index 00000000..7b029cb3 --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/nesting-03/fracture.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/nesting-03/intersection.svg b/libraries/path-bool/__fixtures__/visual-tests/nesting-03/intersection.svg new file mode 100644 index 00000000..d129881f --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/nesting-03/intersection.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/nesting-03/original.svg b/libraries/path-bool/__fixtures__/visual-tests/nesting-03/original.svg new file mode 100644 index 00000000..68fd8000 --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/nesting-03/original.svg @@ -0,0 +1,16 @@ + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/nesting-03/union.svg b/libraries/path-bool/__fixtures__/visual-tests/nesting-03/union.svg new file mode 100644 index 00000000..58b3dc78 --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/nesting-03/union.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/nesting-04/difference.svg b/libraries/path-bool/__fixtures__/visual-tests/nesting-04/difference.svg new file mode 100644 index 00000000..dc5f2f82 --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/nesting-04/difference.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/nesting-04/division.svg b/libraries/path-bool/__fixtures__/visual-tests/nesting-04/division.svg new file mode 100644 index 00000000..98364868 --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/nesting-04/division.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/nesting-04/exclusion.svg b/libraries/path-bool/__fixtures__/visual-tests/nesting-04/exclusion.svg new file mode 100644 index 00000000..dc5f2f82 --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/nesting-04/exclusion.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/nesting-04/fracture.svg b/libraries/path-bool/__fixtures__/visual-tests/nesting-04/fracture.svg new file mode 100644 index 00000000..98364868 --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/nesting-04/fracture.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/nesting-04/intersection.svg b/libraries/path-bool/__fixtures__/visual-tests/nesting-04/intersection.svg new file mode 100644 index 00000000..d796f44c --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/nesting-04/intersection.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/nesting-04/original.svg b/libraries/path-bool/__fixtures__/visual-tests/nesting-04/original.svg new file mode 100644 index 00000000..8289f94c --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/nesting-04/original.svg @@ -0,0 +1,18 @@ + + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/nesting-04/union.svg b/libraries/path-bool/__fixtures__/visual-tests/nesting-04/union.svg new file mode 100644 index 00000000..cbed7f6c --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/nesting-04/union.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/real-01/difference.svg b/libraries/path-bool/__fixtures__/visual-tests/real-01/difference.svg new file mode 100644 index 00000000..cfa290bb --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/real-01/difference.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/real-01/division.svg b/libraries/path-bool/__fixtures__/visual-tests/real-01/division.svg new file mode 100644 index 00000000..10509886 --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/real-01/division.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/real-01/exclusion.svg b/libraries/path-bool/__fixtures__/visual-tests/real-01/exclusion.svg new file mode 100644 index 00000000..007f0449 --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/real-01/exclusion.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/real-01/fracture.svg b/libraries/path-bool/__fixtures__/visual-tests/real-01/fracture.svg new file mode 100644 index 00000000..d05df9c7 --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/real-01/fracture.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/real-01/intersection.svg b/libraries/path-bool/__fixtures__/visual-tests/real-01/intersection.svg new file mode 100644 index 00000000..6811c73e --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/real-01/intersection.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/real-01/original.svg b/libraries/path-bool/__fixtures__/visual-tests/real-01/original.svg new file mode 100644 index 00000000..d5a474d2 --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/real-01/original.svg @@ -0,0 +1,22 @@ + + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/real-01/union.svg b/libraries/path-bool/__fixtures__/visual-tests/real-01/union.svg new file mode 100644 index 00000000..61a8c7c5 --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/real-01/union.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/real-02/difference.svg b/libraries/path-bool/__fixtures__/visual-tests/real-02/difference.svg new file mode 100644 index 00000000..e409ac76 --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/real-02/difference.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/real-02/division.svg b/libraries/path-bool/__fixtures__/visual-tests/real-02/division.svg new file mode 100644 index 00000000..80cd5747 --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/real-02/division.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/real-02/exclusion.svg b/libraries/path-bool/__fixtures__/visual-tests/real-02/exclusion.svg new file mode 100644 index 00000000..9fa91f4f --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/real-02/exclusion.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/real-02/fracture.svg b/libraries/path-bool/__fixtures__/visual-tests/real-02/fracture.svg new file mode 100644 index 00000000..032dc6c4 --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/real-02/fracture.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/real-02/intersection.svg b/libraries/path-bool/__fixtures__/visual-tests/real-02/intersection.svg new file mode 100644 index 00000000..e3931567 --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/real-02/intersection.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/real-02/original.svg b/libraries/path-bool/__fixtures__/visual-tests/real-02/original.svg new file mode 100644 index 00000000..84ce568e --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/real-02/original.svg @@ -0,0 +1,13 @@ + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/real-02/union.svg b/libraries/path-bool/__fixtures__/visual-tests/real-02/union.svg new file mode 100644 index 00000000..48a54a3a --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/real-02/union.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/simple-01/difference.svg b/libraries/path-bool/__fixtures__/visual-tests/simple-01/difference.svg new file mode 100644 index 00000000..96354d58 --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/simple-01/difference.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/simple-01/division.svg b/libraries/path-bool/__fixtures__/visual-tests/simple-01/division.svg new file mode 100644 index 00000000..4fe8382a --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/simple-01/division.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/simple-01/exclusion.svg b/libraries/path-bool/__fixtures__/visual-tests/simple-01/exclusion.svg new file mode 100644 index 00000000..ad6ee042 --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/simple-01/exclusion.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/simple-01/fracture.svg b/libraries/path-bool/__fixtures__/visual-tests/simple-01/fracture.svg new file mode 100644 index 00000000..aad2afb3 --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/simple-01/fracture.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/simple-01/intersection.svg b/libraries/path-bool/__fixtures__/visual-tests/simple-01/intersection.svg new file mode 100644 index 00000000..488ffda7 --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/simple-01/intersection.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/simple-01/original.svg b/libraries/path-bool/__fixtures__/visual-tests/simple-01/original.svg new file mode 100644 index 00000000..549185c1 --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/simple-01/original.svg @@ -0,0 +1,13 @@ + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/simple-01/union.svg b/libraries/path-bool/__fixtures__/visual-tests/simple-01/union.svg new file mode 100644 index 00000000..b8aab23f --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/simple-01/union.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/simple-02/difference.svg b/libraries/path-bool/__fixtures__/visual-tests/simple-02/difference.svg new file mode 100644 index 00000000..435cbd5a --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/simple-02/difference.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/simple-02/division.svg b/libraries/path-bool/__fixtures__/visual-tests/simple-02/division.svg new file mode 100644 index 00000000..91396f9b --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/simple-02/division.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/simple-02/exclusion.svg b/libraries/path-bool/__fixtures__/visual-tests/simple-02/exclusion.svg new file mode 100644 index 00000000..a9d4317e --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/simple-02/exclusion.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/simple-02/fracture.svg b/libraries/path-bool/__fixtures__/visual-tests/simple-02/fracture.svg new file mode 100644 index 00000000..b93d72e7 --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/simple-02/fracture.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/simple-02/intersection.svg b/libraries/path-bool/__fixtures__/visual-tests/simple-02/intersection.svg new file mode 100644 index 00000000..ce7bb7b8 --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/simple-02/intersection.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/simple-02/original.svg b/libraries/path-bool/__fixtures__/visual-tests/simple-02/original.svg new file mode 100644 index 00000000..808705ac --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/simple-02/original.svg @@ -0,0 +1,14 @@ + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/simple-02/union.svg b/libraries/path-bool/__fixtures__/visual-tests/simple-02/union.svg new file mode 100644 index 00000000..95235cd2 --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/simple-02/union.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/simple-03/difference.svg b/libraries/path-bool/__fixtures__/visual-tests/simple-03/difference.svg new file mode 100644 index 00000000..64f3ea32 --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/simple-03/difference.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/simple-03/division.svg b/libraries/path-bool/__fixtures__/visual-tests/simple-03/division.svg new file mode 100644 index 00000000..e345808e --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/simple-03/division.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/simple-03/exclusion.svg b/libraries/path-bool/__fixtures__/visual-tests/simple-03/exclusion.svg new file mode 100644 index 00000000..aa75604d --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/simple-03/exclusion.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/simple-03/fracture.svg b/libraries/path-bool/__fixtures__/visual-tests/simple-03/fracture.svg new file mode 100644 index 00000000..e6571d29 --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/simple-03/fracture.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/simple-03/intersection.svg b/libraries/path-bool/__fixtures__/visual-tests/simple-03/intersection.svg new file mode 100644 index 00000000..41859bf9 --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/simple-03/intersection.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/simple-03/original.svg b/libraries/path-bool/__fixtures__/visual-tests/simple-03/original.svg new file mode 100644 index 00000000..719cd06f --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/simple-03/original.svg @@ -0,0 +1,20 @@ + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/simple-03/union.svg b/libraries/path-bool/__fixtures__/visual-tests/simple-03/union.svg new file mode 100644 index 00000000..9f15c2f1 --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/simple-03/union.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/simple-04/difference.svg b/libraries/path-bool/__fixtures__/visual-tests/simple-04/difference.svg new file mode 100644 index 00000000..44633ab8 --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/simple-04/difference.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/simple-04/division.svg b/libraries/path-bool/__fixtures__/visual-tests/simple-04/division.svg new file mode 100644 index 00000000..5c9452e1 --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/simple-04/division.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/simple-04/exclusion.svg b/libraries/path-bool/__fixtures__/visual-tests/simple-04/exclusion.svg new file mode 100644 index 00000000..0eb72069 --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/simple-04/exclusion.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/simple-04/fracture.svg b/libraries/path-bool/__fixtures__/visual-tests/simple-04/fracture.svg new file mode 100644 index 00000000..b01da51a --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/simple-04/fracture.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/simple-04/intersection.svg b/libraries/path-bool/__fixtures__/visual-tests/simple-04/intersection.svg new file mode 100644 index 00000000..8a74d3aa --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/simple-04/intersection.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/simple-04/original.svg b/libraries/path-bool/__fixtures__/visual-tests/simple-04/original.svg new file mode 100644 index 00000000..175b08d0 --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/simple-04/original.svg @@ -0,0 +1,25 @@ + + + + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/simple-04/union.svg b/libraries/path-bool/__fixtures__/visual-tests/simple-04/union.svg new file mode 100644 index 00000000..901db682 --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/simple-04/union.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/simple-05/difference.svg b/libraries/path-bool/__fixtures__/visual-tests/simple-05/difference.svg new file mode 100644 index 00000000..c8ced7fa --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/simple-05/difference.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/simple-05/division.svg b/libraries/path-bool/__fixtures__/visual-tests/simple-05/division.svg new file mode 100644 index 00000000..ea1e621a --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/simple-05/division.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/simple-05/exclusion.svg b/libraries/path-bool/__fixtures__/visual-tests/simple-05/exclusion.svg new file mode 100644 index 00000000..85ce148d --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/simple-05/exclusion.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/simple-05/fracture.svg b/libraries/path-bool/__fixtures__/visual-tests/simple-05/fracture.svg new file mode 100644 index 00000000..d4aece55 --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/simple-05/fracture.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/simple-05/intersection.svg b/libraries/path-bool/__fixtures__/visual-tests/simple-05/intersection.svg new file mode 100644 index 00000000..7dd6c44e --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/simple-05/intersection.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/simple-05/original.svg b/libraries/path-bool/__fixtures__/visual-tests/simple-05/original.svg new file mode 100644 index 00000000..70d133b2 --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/simple-05/original.svg @@ -0,0 +1,17 @@ + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/simple-05/union.svg b/libraries/path-bool/__fixtures__/visual-tests/simple-05/union.svg new file mode 100644 index 00000000..5b434a40 --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/simple-05/union.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/simple-06/difference.svg b/libraries/path-bool/__fixtures__/visual-tests/simple-06/difference.svg new file mode 100644 index 00000000..d7e31871 --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/simple-06/difference.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/simple-06/division.svg b/libraries/path-bool/__fixtures__/visual-tests/simple-06/division.svg new file mode 100644 index 00000000..d7e31871 --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/simple-06/division.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/simple-06/exclusion.svg b/libraries/path-bool/__fixtures__/visual-tests/simple-06/exclusion.svg new file mode 100644 index 00000000..c1b696c4 --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/simple-06/exclusion.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/simple-06/fracture.svg b/libraries/path-bool/__fixtures__/visual-tests/simple-06/fracture.svg new file mode 100644 index 00000000..e85812ca --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/simple-06/fracture.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/simple-06/intersection.svg b/libraries/path-bool/__fixtures__/visual-tests/simple-06/intersection.svg new file mode 100644 index 00000000..6db8be97 --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/simple-06/intersection.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/simple-06/original.svg b/libraries/path-bool/__fixtures__/visual-tests/simple-06/original.svg new file mode 100644 index 00000000..d074477d --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/simple-06/original.svg @@ -0,0 +1,17 @@ + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/simple-06/union.svg b/libraries/path-bool/__fixtures__/visual-tests/simple-06/union.svg new file mode 100644 index 00000000..c1b696c4 --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/simple-06/union.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/simple-07/difference.svg b/libraries/path-bool/__fixtures__/visual-tests/simple-07/difference.svg new file mode 100644 index 00000000..bf204563 --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/simple-07/difference.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/simple-07/division.svg b/libraries/path-bool/__fixtures__/visual-tests/simple-07/division.svg new file mode 100644 index 00000000..db0eb8d0 --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/simple-07/division.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/simple-07/exclusion.svg b/libraries/path-bool/__fixtures__/visual-tests/simple-07/exclusion.svg new file mode 100644 index 00000000..10010ca5 --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/simple-07/exclusion.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/simple-07/fracture.svg b/libraries/path-bool/__fixtures__/visual-tests/simple-07/fracture.svg new file mode 100644 index 00000000..12398a8d --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/simple-07/fracture.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/simple-07/intersection.svg b/libraries/path-bool/__fixtures__/visual-tests/simple-07/intersection.svg new file mode 100644 index 00000000..977056e6 --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/simple-07/intersection.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/simple-07/original.svg b/libraries/path-bool/__fixtures__/visual-tests/simple-07/original.svg new file mode 100644 index 00000000..c54e7978 --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/simple-07/original.svg @@ -0,0 +1,16 @@ + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/simple-07/union.svg b/libraries/path-bool/__fixtures__/visual-tests/simple-07/union.svg new file mode 100644 index 00000000..4cbea40e --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/simple-07/union.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/simple-08/difference.svg b/libraries/path-bool/__fixtures__/visual-tests/simple-08/difference.svg new file mode 100644 index 00000000..879a7f1d --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/simple-08/difference.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/simple-08/division.svg b/libraries/path-bool/__fixtures__/visual-tests/simple-08/division.svg new file mode 100644 index 00000000..088af61e --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/simple-08/division.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/simple-08/exclusion.svg b/libraries/path-bool/__fixtures__/visual-tests/simple-08/exclusion.svg new file mode 100644 index 00000000..633bca9a --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/simple-08/exclusion.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/simple-08/fracture.svg b/libraries/path-bool/__fixtures__/visual-tests/simple-08/fracture.svg new file mode 100644 index 00000000..61206af9 --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/simple-08/fracture.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/simple-08/intersection.svg b/libraries/path-bool/__fixtures__/visual-tests/simple-08/intersection.svg new file mode 100644 index 00000000..f098ab7a --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/simple-08/intersection.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/simple-08/original.svg b/libraries/path-bool/__fixtures__/visual-tests/simple-08/original.svg new file mode 100644 index 00000000..b6f46719 --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/simple-08/original.svg @@ -0,0 +1,16 @@ + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/simple-08/union.svg b/libraries/path-bool/__fixtures__/visual-tests/simple-08/union.svg new file mode 100644 index 00000000..2060282a --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/simple-08/union.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/libraries/path-bool/__fixtures__/visual-tests/template.svg b/libraries/path-bool/__fixtures__/visual-tests/template.svg new file mode 100644 index 00000000..909afa29 --- /dev/null +++ b/libraries/path-bool/__fixtures__/visual-tests/template.svg @@ -0,0 +1,41 @@ + + + + + + + + diff --git a/libraries/path-bool/benches/painted_dreams.rs b/libraries/path-bool/benches/painted_dreams.rs new file mode 100644 index 00000000..3fe66bc0 --- /dev/null +++ b/libraries/path-bool/benches/painted_dreams.rs @@ -0,0 +1,15 @@ +use criterion::{black_box, criterion_group, criterion_main, Criterion}; +use path_bool::*; + +pub fn criterion_benchmark(c: &mut Criterion) { + let path_a = path_from_path_data("M0,340C161.737914,383.575765 107.564182,490.730587 273,476 C419,463 481.741198,514.692273 481.333333,768 C481.333333,768 -0,768 -0,768 C-0,768 0,340 0,340 Z "); + let path_b = path_from_path_data( + "M458.370270,572.165771C428.525848,486.720093 368.618805,467.485992 273,476 C107.564178,490.730591 161.737915,383.575775 0,340 C0,340 0,689 0,689 C56,700 106.513901,779.342590 188,694.666687 C306.607422,571.416260 372.033966,552.205139 458.370270,572.165771 Z", + ); + c.bench_function("painted_dreams_diff", |b| { + b.iter(|| path_boolean(black_box(&path_a), FillRule::NonZero, black_box(&path_b), FillRule::NonZero, PathBooleanOperation::Difference)) + }); +} + +criterion_group!(benches, criterion_benchmark); +criterion_main!(benches); diff --git a/libraries/path-bool/benches/path_segment_intersection.rs b/libraries/path-bool/benches/path_segment_intersection.rs new file mode 100644 index 00000000..33fc9aec --- /dev/null +++ b/libraries/path-bool/benches/path_segment_intersection.rs @@ -0,0 +1,29 @@ +use criterion::{black_box, criterion_group, criterion_main, Criterion}; +use glam::DVec2; +use path_bool::*; + +pub fn criterion_benchmark(crit: &mut Criterion) { + crit.bench_function("intersect 1", |bench| bench.iter(|| path_segment_intersection(black_box(&a()), black_box(&b()), true, &EPS))); + crit.bench_function("intersect 2", |bench| bench.iter(|| path_segment_intersection(black_box(&c()), black_box(&d()), true, &EPS))); +} + +criterion_group!(benches, criterion_benchmark); +criterion_main!(benches); + +fn a() -> PathSegment { + PathSegment::Cubic( + DVec2::new(458.37027, 572.165771), + DVec2::new(428.525848, 486.720093), + DVec2::new(368.618805, 467.485992), + DVec2::new(273.0, 476.0), + ) +} +fn b() -> PathSegment { + PathSegment::Cubic(DVec2::new(273.0, 476.0), DVec2::new(419.0, 463.0), DVec2::new(481.741198, 514.692273), DVec2::new(481.333333, 768.0)) +} +fn c() -> PathSegment { + PathSegment::Cubic(DVec2::new(273.0, 476.0), DVec2::new(107.564178, 490.730591), DVec2::new(161.737915, 383.575775), DVec2::new(0.0, 340.0)) +} +fn d() -> PathSegment { + PathSegment::Cubic(DVec2::new(0.0, 340.0), DVec2::new(161.737914, 383.575765), DVec2::new(107.564182, 490.730587), DVec2::new(273.0, 476.0)) +} diff --git a/libraries/path-bool/flake.nix b/libraries/path-bool/flake.nix new file mode 100644 index 00000000..88be72b7 --- /dev/null +++ b/libraries/path-bool/flake.nix @@ -0,0 +1,48 @@ +{ + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; + flake-utils.url = "github:numtide/flake-utils"; + rust-overlay = { + url = "github:oxalica/rust-overlay"; + inputs = { + nixpkgs.follows = "nixpkgs"; + flake-utils.follows = "flake-utils"; + }; + }; + }; + + outputs = {self, nixpkgs, flake-utils, rust-overlay }: + flake-utils.lib.eachDefaultSystem ( system: + let + overlays = [ (import rust-overlay) ]; + pkgs = import nixpkgs { + inherit system overlays; + }; + toolchain = pkgs.rust-bin.stable.latest.default.override { + extensions = ["rust-src" "clippy" "rust-analyzer"]; + }; + buildInputs = with pkgs; [ + llvm + ]; + in { + devShells.default = pkgs.mkShell { + stdenv = pkgs.clangStdenv; + packages = with pkgs; [ + bacon + valgrind + kcachegrind + cargo-flamegraph + ]; + nativeBuildInputs = with pkgs; [ + lld + toolchain + llvm + cargo + ]; + inherit buildInputs; + + LD_LIBRARY_PATH = pkgs.lib.makeLibraryPath buildInputs; + }; + } + ); +} diff --git a/libraries/path-bool/shell.nix b/libraries/path-bool/shell.nix new file mode 100644 index 00000000..5feb1012 --- /dev/null +++ b/libraries/path-bool/shell.nix @@ -0,0 +1,81 @@ +# This is a helper file for people using NixOS as their operating system. +# If you don't know what this file does, you can safely ignore it. + +# If you are using Nix as your package manager, you can run 'nix-shell' +# in the root directory of the project and Nix will open a bash shell +# with all the packages needed to build and run Graphite installed. +# A shell.nix file is used in the Nix ecosystem to define a development +# environment with specific dependencies. When you enter a Nix shell using +# this file, it ensures that all the specified tools and libraries are +# available regardless of the host system's configuration. This provides +# a reproducible development environment across different machines and developers. + +# You can enter the Nix shell and run Graphite like normal with: +# > npm start +# Or you can run it like this without needing to first enter the Nix shell: +# > nix-shell --command "npm start" + +let + # Get oxalica's Rust overlay for better Rust integration + rust-overlay-source = builtins.fetchGit { + url = "https://github.com/oxalica/rust-overlay"; + }; + + # Import it so we can use it in Nix + rust-overlay = import rust-overlay-source; + + # Import system packages overlaid with the Rust overlay + pkgs = import { + overlays = [ rust-overlay ]; + }; + + # Define the rustc we need + rustc-wasm = pkgs.rust-bin.stable.latest.default.override { + targets = [ "wasm32-unknown-unknown" ]; + # wasm-pack needs this + extensions = [ "rust-src" "rust-analyzer" "clippy"]; + }; +in + # Make a shell with the dependencies we need + pkgs.mkShell { + packages = with pkgs; [ + rustc-wasm + nodejs + cargo + cargo-watch + cargo-nextest + cargo-expand + wasm-pack + binaryen + wasm-bindgen-cli + vulkan-loader + libxkbcommon + llvm + gcc-unwrapped.lib + llvmPackages.libcxxStdenv + pkg-config + # used for profiling + gnuplot + samply + cargo-flamegraph + + # For Tauri + openssl + glib + gtk3 + libsoup + webkitgtk + + # For Raw-rs tests + libraw + + # Use Mold as a linker + mold + ]; + + # Hacky way to run Cargo through Mold + LD_LIBRARY_PATH = pkgs.lib.makeLibraryPath [pkgs.openssl pkgs.vulkan-loader pkgs.libxkbcommon pkgs.llvmPackages.libcxxStdenv pkgs.gcc-unwrapped.lib pkgs.llvm pkgs.libraw]; + shellHook = '' + alias cargo='mold --run cargo' + ''; + } diff --git a/libraries/path-bool/src/lib.rs b/libraries/path-bool/src/lib.rs new file mode 100644 index 00000000..6dd02719 --- /dev/null +++ b/libraries/path-bool/src/lib.rs @@ -0,0 +1,261 @@ +#![expect(clippy::needless_doctest_main)] +#![doc = include_str!("../README.md")] +mod path_boolean; +#[cfg(feature = "parsing")] +mod parsing { + pub(crate) mod path_command; + pub(crate) mod path_data; +} + +mod util { + pub(crate) mod aabb; + pub(crate) mod epsilons; + pub(crate) mod math; + pub(crate) mod quad_tree; +} +mod path; +#[cfg(test)] +mod visual_tests; + +#[cfg(feature = "parsing")] +pub(crate) use parsing::*; +pub(crate) use path::*; +pub(crate) use util::*; + +pub use intersection_path_segment::path_segment_intersection; +#[cfg(feature = "parsing")] +pub use parsing::path_data::{path_from_path_data, path_to_path_data}; +pub use path_boolean::{path_boolean, BooleanError, FillRule, PathBooleanOperation, EPS}; +pub use path_segment::PathSegment; + +#[cfg(test)] +mod test { + use crate::{ + path_boolean::{self, FillRule, PathBooleanOperation}, + path_data::{path_from_path_data, path_to_path_data}, + }; + use path_boolean::path_boolean; + + #[test] + fn square() { + let a = path_from_path_data("M 10 10 L 50 10 L 30 40 Z"); + let b = path_from_path_data("M 20 30 L 60 30 L 60 50 L 20 50 Z"); + let union = path_boolean( + &a, + path_boolean::FillRule::NonZero, + &b, + path_boolean::FillRule::NonZero, + path_boolean::PathBooleanOperation::Intersection, + ) + .unwrap(); + dbg!(path_to_path_data(&union[0], 0.001)); + assert!(!union[0].is_empty()); + // panic!(); + } + + #[test] + fn nesting_01() { + let a = path_from_path_data("M 47,24 A 23,23 0 0 1 24,47 23,23 0 0 1 1,24 23,23 0 0 1 24,1 23,23 0 0 1 47,24 Z"); + let b = path_from_path_data( + "M 37.909023,24 A 13.909023,13.909023 0 0 1 24,37.909023 13.909023,13.909023 0 0 1 10.090978,24 13.909023,13.909023 0 0 1 24,10.090978 13.909023,13.909023 0 0 1 37.909023,24 Z", + ); + let union = path_boolean(&a, path_boolean::FillRule::NonZero, &b, path_boolean::FillRule::NonZero, path_boolean::PathBooleanOperation::Union).unwrap(); + dbg!(path_to_path_data(&union[0], 0.001)); + assert!(!union[0].is_empty()); + } + #[test] + fn nesting_02() { + let a = path_from_path_data("M 0.99999994,31.334457 C 122.61195,71.81859 -79.025816,-5.5803326 47,32.253367 V 46.999996 H 0.99999994 Z"); + let b = path_from_path_data("m 25.797222,29.08718 c 0,1.292706 -1.047946,2.340652 -2.340652,2.340652 -1.292707,0 -2.340652,-1.047946 -2.340652,-2.340652 0,-1.292707 1.047945,-2.340652 2.340652,-2.340652 1.292706,0 2.340652,1.047945 2.340652,2.340652 z M 7.5851073,28.332212 c 1e-7,1.292706 -1.0479456,2.340652 -2.3406521,2.340652 -1.2927063,-1e-6 -2.3406518,-1.047946 -2.3406517,-2.340652 -10e-8,-1.292707 1.0479454,-2.340652 2.3406517,-2.340652 1.2927065,-1e-6 2.3406522,1.047945 2.3406521,2.340652 z"); + + let result = path_boolean(&a, FillRule::NonZero, &b, FillRule::NonZero, PathBooleanOperation::Union).unwrap(); + + // Add assertions here based on expected results + assert_eq!(result.len(), 1, "Expected 1 resulting path for Union operation"); + // Add more specific assertions about the resulting path if needed + assert!(!result[0].is_empty()); + } + #[test] + fn nesting_03() { + let a = path_from_path_data("m 21.829117,3.5444345 h 4.341766 V 16.502158 H 21.829117 Z M 47,24 A 23,23 0 0 1 24,47 23,23 0 0 1 1,24 23,23 0 0 1 24,1 23,23 0 0 1 47,24 Z"); + let b = path_from_path_data("M 24 6.4960938 A 17.504802 17.504802 0 0 0 6.4960938 24 A 17.504802 17.504802 0 0 0 24 41.503906 A 17.504802 17.504802 0 0 0 41.503906 24 A 17.504802 17.504802 0 0 0 24 6.4960938 z M 24 12.193359 A 11.805881 11.805881 0 0 1 35.806641 24 A 11.805881 11.805881 0 0 1 24 35.806641 A 11.805881 11.805881 0 0 1 12.193359 24 A 11.805881 11.805881 0 0 1 24 12.193359 z "); + + let result = path_boolean(&a, FillRule::NonZero, &b, FillRule::NonZero, PathBooleanOperation::Union).unwrap(); + + // Add assertions here based on expected results + assert_eq!(result.len(), 1, "Expected 1 resulting path for Union operation"); + // Add more specific assertions about the resulting path if needed + let path_string = dbg!(path_to_path_data(&result[0], 0.001)); + assert_eq!(path_string.chars().filter(|c| c == &'M').count(), 1, "More than one path returned"); + assert!(!result[0].is_empty()); + } + #[test] + fn simple_07() { + let a = path_from_path_data("M 37.671452,24 C 52.46888,31.142429 42.887716,37.358779 24,37.671452 16.4505,37.796429 10.328548,31.550534 10.328548,24 c 0,-7.550534 6.120918,-13.671452 13.671452,-13.671452 7.550534,0 6.871598,10.389295 13.671452,13.671452 z", + ); + let b = path_from_path_data("M 37.671452,24 C 33.698699,53.634887 29.50935,49.018306 24,37.671452 20.7021,30.879219 10.328548,31.550534 10.328548,24 c 0,-7.550534 6.120918,-13.671452 13.671452,-13.671452 7.550534,0 14.674677,6.187863 13.671452,13.671452 z"); + + let result = path_boolean(&a, FillRule::NonZero, &b, FillRule::NonZero, PathBooleanOperation::Union).unwrap(); + + // Add assertions here based on expected results + assert_eq!(result.len(), 1, "Expected 1 resulting path for Union operation"); + // Add more specific assertions about the resulting path if needed + dbg!(path_to_path_data(&result[0], 0.001)); + assert!(!result[0].is_empty()); + } + #[test] + fn rect_ellipse() { + let a = path_from_path_data("M0,0C0,0 100,0 100,0 C100,0 100,100 100,100 C100,100 0,100 0,100 C0,100 0,0 0,0 Z"); + let b = path_from_path_data("M50,0C77.589239,0 100,22.410761 100,50 C100,77.589239 77.589239,100 50,100 C22.410761,100 0,77.589239 0,50 C0,22.410761 22.410761,0 50,0 Z"); + + let result = path_boolean(&a, FillRule::NonZero, &b, FillRule::NonZero, PathBooleanOperation::Union).unwrap(); + + // Add assertions here based on expected results + assert_eq!(result.len(), 1, "Expected 1 resulting path for Union operation"); + dbg!(path_to_path_data(&result[0], 0.001)); + assert!(!result[0].is_empty()); + // Add more specific assertions about the resulting path if needed + } + #[test] + fn red_dress_loop() { + let a = path_from_path_data("M969.000000,0.000000C969.000000,0.000000 1110.066898,76.934393 1085.000000,181.000000 C1052.000000,318.000000 1199.180581,334.301571 1277.000000,319.000000 C1455.000000,284.000000 1586.999985,81.000000 1418.000000,0.000000 C1418.000000,0.000000 969.000000,0.000000 969.000000,0.000000"); + let b = path_from_path_data( + "M1211.000000,0.000000C1211.000000,0.000000 1255.000000,78.000000 1536.000000,95.000000 C1536.000000,95.000000 1536.000000,0.000000 1536.000000,0.000000 C1536.000000,0.000000 1211.000000,0.000000 1211.000000,0.000000 Z", + ); + + let result = path_boolean(&a, FillRule::NonZero, &b, FillRule::NonZero, PathBooleanOperation::Intersection).unwrap(); + + // Add assertions here based on expected results + assert_eq!(result.len(), 1, "Expected 1 resulting path for Union operation"); + dbg!(path_to_path_data(&result[0], 0.001)); + // Add more specific assertions about the resulting path if needed + assert!(!result[0].is_empty()); + } + #[test] + fn painted_dreams_1() { + let a = path_from_path_data("M969.000000,0.000000C969.000000,0.000000 1110.066898,76.934393 1085.000000,181.000000 C1052.000000,318.000000 1199.180581,334.301571 1277.000000,319.000000 C1455.000000,284.000000 1586.999985,81.000000 1418.000000,0.000000 C1418.000000,0.000000 969.000000,0.000000 969.000000,0.000000 Z"); + let b = path_from_path_data( + "M763.000000,0.000000C763.000000,0.000000 1536.000000,0.000000 1536.000000,0.000000 C1536.000000,0.000000 1536.000000,254.000000 1536.000000,254.000000 C1536.000000,254.000000 1462.000000,93.000000 1271.000000,199.000000 C1149.163056,266.616314 976.413656,188.510842 908.000000,134.000000 C839.586344,79.489158 763.000000,0.000000 763.000000,0.000000 Z", + ); + + let result = path_boolean(&a, FillRule::NonZero, &b, FillRule::NonZero, PathBooleanOperation::Intersection).unwrap(); + + // Add assertions here based on expected results + assert_eq!(result.len(), 1, "Expected 1 resulting path for Union operation"); + dbg!(path_to_path_data(&result[0], 0.001)); + // Add more specific assertions about the resulting path if needed + assert!(!result[0].is_empty()); + } + #[test] + fn painted_dreams_2() { + let a = path_from_path_data("M0,340C161.737914,383.575765 107.564182,490.730587 273,476 C419,463 481.741198,514.692273 481.333333,768 C481.333333,768 -0,768 -0,768 C-0,768 0,340 0,340 Z "); + let b = path_from_path_data( + "M458.370270,572.165771C428.525848,486.720093 368.618805,467.485992 273,476 C107.564178,490.730591 161.737915,383.575775 0,340 C0,340 0,689 0,689 C56,700 106.513901,779.342590 188,694.666687 C306.607422,571.416260 372.033966,552.205139 458.370270,572.165771 Z", + ); + + let result = path_boolean(&a, FillRule::NonZero, &b, FillRule::NonZero, PathBooleanOperation::Union).unwrap(); + + // Add assertions here based on expected results + assert_eq!(result.len(), 1, "Expected 1 resulting path for Union operation"); + dbg!(path_to_path_data(&result[0], 0.001)); + // Add more specific assertions about the resulting path if needed + assert!(!result[0].is_empty()); + } + #[test] + fn painted_dreams_3() { + let a = path_from_path_data("M889,0C889,0 889,21 898,46 C909.595887,78.210796 872.365858,104.085306 869,147 C865,198 915,237 933,273 C951,309 951.703704,335.407407 923,349 C898.996281,360.366922 881,367 902,394 C923,421 928.592593,431.407407 898,468 C912.888889,472.888889 929.333333,513.333333 896,523 C896,523 876,533.333333 886,572 C896.458810,612.440732 873.333333,657.777778 802.666667,656.444444 C738.670245,655.236965 689,643 655,636 C621,629 604,623 585,666 C566,709 564,768 564,768 C564,768 0,768 0,768 C0,768 0,0 0,0 C0,0 889,0 889,0 Z "); + let b = path_from_path_data( + "M552,768C552,768 993,768 993,768 C993,768 1068.918039,682.462471 1093,600 C1126,487 1007.352460,357.386071 957,324 C906.647540,290.613929 842,253 740,298 C638,343 491.342038,421.999263 491.342038,506.753005 C491.342038,641.999411 552,768 552,768 Z ", + ); + + let result = path_boolean(&a, FillRule::NonZero, &b, FillRule::NonZero, PathBooleanOperation::Difference).unwrap(); + + // Add assertions here based on expected results + assert_eq!(result.len(), 1, "Expected 1 resulting path for Union operation"); + dbg!(path_to_path_data(&result[0], 0.001)); + // Add more specific assertions about the resulting path if needed + assert!(!result[0].is_empty()); + } + #[test] + fn painted_dreams_4() { + let a = path_from_path_data("M458.370270,572.165771C372.033966,552.205139 306.607422,571.416260 188.000000,694.666687 C106.513901,779.342590 56.000000,700.000000 0.000000,689.000000 C0.000000,689.000000 0.000000,768.000000 0.000000,768.000000 C0.000000,768.000000 481.333344,768.000000 481.333344,768.000000 C481.474091,680.589417 474.095154,617.186768 458.370270,572.165771 Z "); + let b = path_from_path_data( + "M364.000000,768.000000C272.000000,686.000000 294.333333,468.666667 173.333333,506.666667 C110.156241,526.507407 0.000000,608.000000 0.000000,608.000000 L -0.000000,768.000000 L 364.000000,768.000000 Z", + ); + + let result = path_boolean(&a, FillRule::NonZero, &b, FillRule::NonZero, PathBooleanOperation::Difference).unwrap(); + + // Add assertions here based on expected results + assert_eq!(result.len(), 1, "Expected 1 resulting path for Union operation"); + dbg!(path_to_path_data(&result[0], 0.001)); + // Add more specific assertions about the resulting path if needed + assert!(!result[0].is_empty()); + } + #[test] + fn painted_dreams_5() { + let a = path_from_path_data("M889.000000,0.000000C889.000000,0.000000 889.000000,21.000000 898.000000,46.000000 C909.595887,78.210796 872.365858,104.085306 869.000000,147.000000 C865.000000,198.000000 915.000000,237.000000 933.000000,273.000000 C951.000000,309.000000 951.703704,335.407407 923.000000,349.000000 C898.996281,360.366922 881.000000,367.000000 902.000000,394.000000 C923.000000,421.000000 928.592593,431.407407 898.000000,468.000000 C912.888889,472.888889 929.333333,513.333333 896.000000,523.000000 C896.000000,523.000000 876.000000,533.333333 886.000000,572.000000 C896.458810,612.440732 873.333333,657.777778 802.666667,656.444444 C738.670245,655.236965 689.000000,643.000000 655.000000,636.000000 C621.000000,629.000000 604.000000,623.000000 585.000000,666.000000 C566.000000,709.000000 564.000000,768.000000 564.000000,768.000000 C564.000000,768.000000 0.000000,768.000000 0.000000,768.000000 C0.000000,768.000000 0.000000,0.000000 0.000000,0.000000 C0.000000,0.000000 889.000000,0.000000 889.000000,0.000000 Z" + ); + let b = path_from_path_data( + "M891.555556,569.382716C891.555556,569.382716 883.555556,577.777778 879.111111,595.851852 C874.666667,613.925926 857.185185,631.407407 830.814815,633.777778 C804.444444,636.148148 765.629630,637.925926 708.148148,616.296296 C650.666667,594.666667 560.666667,568.000000 468.000000,487.333333 C375.333333,406.666667 283.333333,354.666667 283.333333,354.666667 C332.000000,330.666667 373.407788,298.323579 468.479950,219.785706 C495.739209,197.267187 505.084065,165.580817 514.452332,146.721008 C525.711584,124.054345 577.519713,94.951389 589.958848,64.658436 C601.152263,37.399177 601.175694,0.000010 601.175694,0.000000 C601.175694,0.000000 0.000000,0.000000 0.000000,0.000000 C0.000000,0.000000 0.000000,768.000000 0.000000,768.000000 C0.000000,768.000000 891.555556,768.000000 891.555556,768.000000 C891.555556,768.000000 891.555556,569.382716 891.555556,569.382716 Z", + ); + + let result = path_boolean(&a, FillRule::NonZero, &b, FillRule::NonZero, PathBooleanOperation::Intersection).unwrap(); + + // Add assertions here based on expected results + assert_eq!(result.len(), 1, "Expected 1 resulting path for Union operation"); + dbg!(path_to_path_data(&result[0], 0.001)); + // Add more specific assertions about the resulting path if needed + assert!(!result[0].is_empty()); + } + #[test] + fn painted_dreams_6() { + let a = path_from_path_data( + "M 969.000000000000,0.000000000000 C 969.000000000000,0.000000000000 1110.066900000000,76.934400000000 1085.000000000000,181.000000000000 C 1052.000000000000,318.000000000000 1199.180600000000,334.301600000000 1277.000000000000,319.000000000000 C 1455.000000000000,284.000000000000 1587.000000000000,81.000000000000 1418.000000000000,0.000000000000 C 1418.000000000000,0.000000000000 969.000000000000,0.000000000000 969.000000000000,0.000000000000 L 969.000000000000,0.000000000000" + ); + let b = path_from_path_data( + "M 763.000000000000,0.000000000000 C 763.000000000000,0.000000000000 1536.000000000000,0.000000000000 1536.000000000000,0.000000000000 C 1536.000000000000,0.000000000000 1536.000000000000,254.000000000000 1536.000000000000,254.000000000000 C 1536.000000000000,254.000000000000 1462.000000000000,93.000000000000 1271.000000000000,199.000000000000 C 1149.163100000000,266.616300000000 976.413700000000,188.510800000000 908.000000000000,134.000000000000 C 839.586300000000,79.489200000000 763.000000000000,0.000000000000 763.000000000000,0.000000000000 L 763.000000000000,0.000000000000", + ); + + let result = path_boolean(&a, FillRule::NonZero, &b, FillRule::NonZero, PathBooleanOperation::Intersection).unwrap(); + + // Add assertions here based on expected results + assert_eq!(result.len(), 1, "Expected 1 resulting path for Union operation"); + dbg!(path_to_path_data(&result[0], 0.001)); + // Add more specific assertions about the resulting path if needed + assert!(!result[0].is_empty()); + } + #[test] + fn painted_dreams_7() { + let a = path_from_path_data( + "M 989.666700000000,768.000000000000 C 989.666700000000,768.000000000000 1011.111100000000,786.399400000000 1011.111100000000,786.399400000000 C 1011.111100000000,786.399400000000 1299.306500000000,786.399400000000 1299.306500000000,786.399400000000 C 1299.306500000000,786.399400000000 1318.000000000000,768.000000000000 1318.000000000000,768.000000000000 C 1293.666700000000,681.000000000000 1173.363200000000,625.103600000000 1094.162400000000,594.296600000000 C 1094.162400000000,594.296600000000 1058.747200000000,687.805800000000 989.666700000000,768.000000000000" + ); + let b = path_from_path_data( + "M 983.155000000000,775.589300000000 L 1004.599400000000,793.988700000000 L 1007.409000000000,796.399400000000 L 1011.111100000000,796.399400000000 L 1299.306500000000,796.399400000000 L 1303.402200000000,796.399400000000 L 1306.321200000000,793.526300000000 L 1325.014800000000,775.126900000000 L 1329.236900000000,770.971200000000 L 1327.630400000000,765.306400000000 C 1302.280700000000,675.920800000000 1179.503900000000,617.211200000000 1097.787500000000,584.976800000000 L 1088.418100000000,581.280900000000 L 1084.806400000000,590.765700000000 C 1084.117400000000,592.575300000000 1049.449700000000,683.516200000000 982.090100000000,761.473400000000 L 975.539200000000,769.055000000000 L 983.155000000000,775.589300000000 M 1003.696800000000,766.861600000000 C 1068.901100000000,687.878900000000 1102.806400000000,599.696700000000 1103.497000000000,597.883400000000 L 1090.537200000000,603.616300000000 C 1165.521500000000,632.344400000000 1279.846400000000,683.736400000000 1306.585700000000,765.203400000000 L 1295.210700000000,776.399400000000 L 1014.813100000000,776.399400000000 L 1003.696800000000,766.861600000000", + ); + + let result = path_boolean(&a, FillRule::NonZero, &b, FillRule::NonZero, PathBooleanOperation::Difference).unwrap(); + + // Add assertions here based on expected results + assert_eq!(result.len(), 1, "Expected 1 resulting path for Union operation"); + dbg!(path_to_path_data(&result[0], 0.001)); + // Add more specific assertions about the resulting path if needed + assert!(!result[0].is_empty()); + } + #[test] + fn blobs() { + let a = path_from_path_data( + "m658.03348 118.4966c7.85928 4.83645 114.84582 7.8304 127.89652 6.52531 20.97932-2.09799 43.06722-24.79623 43.06722-24.79623 0 0-96.43723-26.02101-108.97311-28.54836-20.22849-4.07832-78.95651 36.37872-61.99063 46.81928z + m658.03348 115.88649c40.45718-30.01653 82.213-45.24662 103.10032-31.32163 7.83037 5.2203-3.58567 22.51547 13.05064 39.152 3.91519 3.9152-129.49099 2.06705-116.15096-7.83037z + m680.87214 56.0165c2.20775-9.60391 62.6449-29.65403 101.79518-30.01652 17.61846-0.16312 119.39605 40.30737 130.50668 54.8128 5.8045 7.57806-76.88558 29.08762-91.35464 31.32162-15.28899 2.36056-144.20983-41.92525-140.94722-56.1179z" + ); + let b = path_from_path_data(""); + + let result = path_boolean(&a, FillRule::NonZero, &b, FillRule::NonZero, PathBooleanOperation::Union).unwrap(); + + // Add assertions here based on expected results + assert_eq!(result.len(), 1, "Expected 1 resulting path for Union operation"); + dbg!(path_to_path_data(&result[0], 0.001)); + // Add more specific assertions about the resulting path if needed + assert!(!result[0].is_empty()); + } +} diff --git a/libraries/path-bool/src/parsing/path_command.rs b/libraries/path-bool/src/parsing/path_command.rs new file mode 100644 index 00000000..67219005 --- /dev/null +++ b/libraries/path-bool/src/parsing/path_command.rs @@ -0,0 +1,124 @@ +use glam::DVec2; + +#[derive(Clone, Debug)] +pub enum AbsolutePathCommand { + H(f64), + V(f64), + M(DVec2), + L(DVec2), + C(DVec2, DVec2, DVec2), + S(DVec2, DVec2), + Q(DVec2, DVec2), + T(DVec2), + A(f64, f64, f64, bool, bool, DVec2), + Z, +} + +#[derive(Clone, Debug)] +pub enum RelativePathCommand { + H(f64), + V(f64), + M(f64, f64), + L(f64, f64), + C(f64, f64, f64, f64, f64, f64), + S(f64, f64, f64, f64), + Q(f64, f64, f64, f64), + T(f64, f64), + A(f64, f64, f64, bool, bool, f64, f64), +} + +#[derive(Clone, Debug)] +pub enum PathCommand { + Absolute(AbsolutePathCommand), + Relative(RelativePathCommand), +} + +pub fn to_absolute_commands(commands: I) -> impl Iterator +where + I: IntoIterator, +{ + let mut last_point = DVec2::ZERO; + let mut first_point = last_point; + + commands.into_iter().flat_map(move |cmd| match cmd { + PathCommand::Absolute(abs_cmd) => { + match abs_cmd { + AbsolutePathCommand::H(x) => { + last_point.x = x; + } + AbsolutePathCommand::V(y) => { + last_point.y = y; + } + AbsolutePathCommand::M(point) => { + last_point = point; + first_point = point; + } + AbsolutePathCommand::L(point) => { + last_point = point; + } + AbsolutePathCommand::C(_, _, end) => { + last_point = end; + } + AbsolutePathCommand::S(_, end) => { + last_point = end; + } + AbsolutePathCommand::Q(_, end) => { + last_point = end; + } + AbsolutePathCommand::T(end) => { + last_point = end; + } + AbsolutePathCommand::A(_, _, _, _, _, end) => { + last_point = end; + } + AbsolutePathCommand::Z => { + last_point = first_point; + } + } + vec![abs_cmd] + } + PathCommand::Relative(rel_cmd) => match rel_cmd { + RelativePathCommand::H(dx) => { + last_point.x += dx; + vec![AbsolutePathCommand::L(last_point)] + } + RelativePathCommand::V(dy) => { + last_point.y += dy; + vec![AbsolutePathCommand::L(last_point)] + } + RelativePathCommand::M(dx, dy) => { + last_point += DVec2::new(dx, dy); + first_point = last_point; + vec![AbsolutePathCommand::M(last_point)] + } + RelativePathCommand::L(dx, dy) => { + last_point += DVec2::new(dx, dy); + vec![AbsolutePathCommand::L(last_point)] + } + RelativePathCommand::C(dx1, dy1, dx2, dy2, dx, dy) => { + let c1 = last_point + DVec2::new(dx1, dy1); + let c2 = last_point + DVec2::new(dx2, dy2); + last_point += DVec2::new(dx, dy); + vec![AbsolutePathCommand::C(c1, c2, last_point)] + } + RelativePathCommand::S(dx2, dy2, dx, dy) => { + let c2 = last_point + DVec2::new(dx2, dy2); + last_point += DVec2::new(dx, dy); + vec![AbsolutePathCommand::S(c2, last_point)] + } + RelativePathCommand::Q(dx1, dy1, dx, dy) => { + let control = last_point + DVec2::new(dx1, dy1); + last_point += DVec2::new(dx, dy); + vec![AbsolutePathCommand::Q(control, last_point)] + } + RelativePathCommand::T(dx, dy) => { + last_point += DVec2::new(dx, dy); + vec![AbsolutePathCommand::T(last_point)] + } + RelativePathCommand::A(rx, ry, x_axis_rotation, large_arc_flag, sweep_flag, dx, dy) => { + last_point += DVec2::new(dx, dy); + vec![AbsolutePathCommand::A(rx, ry, x_axis_rotation, large_arc_flag, sweep_flag, last_point)] + } + }, + }) +} diff --git a/libraries/path-bool/src/parsing/path_data.rs b/libraries/path-bool/src/parsing/path_data.rs new file mode 100644 index 00000000..aa0b66f2 --- /dev/null +++ b/libraries/path-bool/src/parsing/path_data.rs @@ -0,0 +1,166 @@ +use crate::path::{path_from_commands, path_to_commands, Path}; +use crate::path_command::{AbsolutePathCommand, PathCommand, RelativePathCommand}; +use glam::DVec2; +use regex::Regex; + +pub fn commands_from_path_data(d: &str) -> Vec { + let re_float = Regex::new(r"^\s*,?\s*(-?\d*(?:\d\.|\.\d|\d)\d*(?:[eE][+\-]?\d+)?)").unwrap(); + let re_cmd = Regex::new(r"^\s*([MLCSQTAZHVmlhvcsqtaz])").unwrap(); + let re_bool = Regex::new(r"^\s*,?\s*([01])").unwrap(); + + let mut i = 0; + let mut last_cmd = 'M'; + let mut commands = Vec::new(); + + let get_cmd = |i: &mut usize, last_cmd: char| -> Option { + if *i >= d.len() - 1.min(d.len()) { + return None; + } + + if let Some(cap) = re_cmd.captures(&d[*i..]) { + *i += cap[0].len(); + Some(cap[1].chars().next().unwrap()) + } else { + match last_cmd { + 'M' => Some('L'), + 'm' => Some('l'), + _ => Some(last_cmd), + } + } + }; + + let get_float = |i: &mut usize| -> f64 { + if let Some(cap) = re_float.captures(&d[*i..]) { + *i += cap[0].len(); + cap[1].parse().unwrap() + } else { + panic!("Invalid path data. Expected a number at index {}, got {}", i, &d[*i..]); + } + }; + + let get_bool = |i: &mut usize| -> bool { + if let Some(cap) = re_bool.captures(&d[*i..]) { + *i += cap[0].len(); + &cap[1] == "1" + } else { + panic!("Invalid path data. Expected a flag at index {}", i); + } + }; + + while let Some(cmd) = get_cmd(&mut i, last_cmd) { + last_cmd = cmd; + match cmd { + 'M' => commands.push(PathCommand::Absolute(AbsolutePathCommand::M(DVec2::new(get_float(&mut i), get_float(&mut i))))), + 'L' => commands.push(PathCommand::Absolute(AbsolutePathCommand::L(DVec2::new(get_float(&mut i), get_float(&mut i))))), + 'C' => commands.push(PathCommand::Absolute(AbsolutePathCommand::C( + DVec2::new(get_float(&mut i), get_float(&mut i)), + DVec2::new(get_float(&mut i), get_float(&mut i)), + DVec2::new(get_float(&mut i), get_float(&mut i)), + ))), + 'S' => commands.push(PathCommand::Absolute(AbsolutePathCommand::S( + DVec2::new(get_float(&mut i), get_float(&mut i)), + DVec2::new(get_float(&mut i), get_float(&mut i)), + ))), + 'Q' => commands.push(PathCommand::Absolute(AbsolutePathCommand::Q( + DVec2::new(get_float(&mut i), get_float(&mut i)), + DVec2::new(get_float(&mut i), get_float(&mut i)), + ))), + 'T' => commands.push(PathCommand::Absolute(AbsolutePathCommand::T(DVec2::new(get_float(&mut i), get_float(&mut i))))), + 'A' => commands.push(PathCommand::Absolute(AbsolutePathCommand::A( + get_float(&mut i), + get_float(&mut i), + get_float(&mut i), + get_bool(&mut i), + get_bool(&mut i), + DVec2::new(get_float(&mut i), get_float(&mut i)), + ))), + 'Z' | 'z' => commands.push(PathCommand::Absolute(AbsolutePathCommand::Z)), + 'H' => commands.push(PathCommand::Absolute(AbsolutePathCommand::H(get_float(&mut i)))), + 'V' => commands.push(PathCommand::Absolute(AbsolutePathCommand::V(get_float(&mut i)))), + 'm' => commands.push(PathCommand::Relative(RelativePathCommand::M(get_float(&mut i), get_float(&mut i)))), + 'l' => commands.push(PathCommand::Relative(RelativePathCommand::L(get_float(&mut i), get_float(&mut i)))), + 'h' => commands.push(PathCommand::Relative(RelativePathCommand::H(get_float(&mut i)))), + 'v' => commands.push(PathCommand::Relative(RelativePathCommand::V(get_float(&mut i)))), + 'c' => commands.push(PathCommand::Relative(RelativePathCommand::C( + get_float(&mut i), + get_float(&mut i), + get_float(&mut i), + get_float(&mut i), + get_float(&mut i), + get_float(&mut i), + ))), + 's' => commands.push(PathCommand::Relative(RelativePathCommand::S( + get_float(&mut i), + get_float(&mut i), + get_float(&mut i), + get_float(&mut i), + ))), + 'q' => commands.push(PathCommand::Relative(RelativePathCommand::Q( + get_float(&mut i), + get_float(&mut i), + get_float(&mut i), + get_float(&mut i), + ))), + 't' => commands.push(PathCommand::Relative(RelativePathCommand::T(get_float(&mut i), get_float(&mut i)))), + 'a' => commands.push(PathCommand::Relative(RelativePathCommand::A( + get_float(&mut i), + get_float(&mut i), + get_float(&mut i), + get_bool(&mut i), + get_bool(&mut i), + get_float(&mut i), + get_float(&mut i), + ))), + _ => panic!("Invalid command: {}", cmd), + } + } + + commands +} + +pub fn path_from_path_data(d: &str) -> Path { + path_from_commands(commands_from_path_data(d)).collect() +} + +pub fn path_to_path_data(path: &Path, eps: f64) -> String { + path_to_commands(path.iter(), eps) + .map(|cmd| match cmd { + PathCommand::Absolute(abs_cmd) => match abs_cmd { + AbsolutePathCommand::H(dx) => format!("H {:.12}", dx), + AbsolutePathCommand::V(dy) => format!("V {:.12}", dy), + AbsolutePathCommand::M(p) => format!("M {:.12},{:.12}", p.x, p.y), + AbsolutePathCommand::L(p) => format!("L {:.12},{:.12}", p.x, p.y), + AbsolutePathCommand::C(p1, p2, p3) => format!("C {:.12},{:.12} {:.12},{:.12} {:.12},{:.12}", p1.x, p1.y, p2.x, p2.y, p3.x, p3.y), + AbsolutePathCommand::S(p1, p2) => { + format!("S {:.12},{:.12} {:.12},{:.12}", p1.x, p1.y, p2.x, p2.y) + } + AbsolutePathCommand::Q(p1, p2) => { + format!("Q {:.12},{:.12} {:.12},{:.12}", p1.x, p1.y, p2.x, p2.y) + } + AbsolutePathCommand::T(p) => format!("T {:.12},{:.12}", p.x, p.y), + AbsolutePathCommand::A(rx, ry, x_axis_rotation, large_arc_flag, sweep_flag, p) => { + format!("A {:.12} {:.12} {:.12} {} {} {:.12},{:.12}", rx, ry, x_axis_rotation, large_arc_flag as u8, sweep_flag as u8, p.x, p.y) + } + AbsolutePathCommand::Z => "Z".to_string(), + }, + PathCommand::Relative(rel_cmd) => match rel_cmd { + RelativePathCommand::M(dx, dy) => format!("m {:.12},{:.12}", dx, dy), + RelativePathCommand::L(dx, dy) => format!("l {:.12},{:.12}", dx, dy), + RelativePathCommand::H(dx) => format!("h {:.12}", dx), + RelativePathCommand::V(dy) => format!("v {:.12}", dy), + RelativePathCommand::C(dx1, dy1, dx2, dy2, dx, dy) => format!("c{:.12},{:.12} {:.12},{:.12} {:.12},{:.12}", dx1, dy1, dx2, dy2, dx, dy), + RelativePathCommand::S(dx2, dy2, dx, dy) => { + format!("s {:.12},{:.12} {:.12},{:.12}", dx2, dy2, dx, dy) + } + RelativePathCommand::Q(dx1, dy1, dx, dy) => { + format!("q {:.12},{:.12} {:.12},{:.12}", dx1, dy1, dx, dy) + } + RelativePathCommand::T(dx, dy) => format!("t{:.12},{:.12}", dx, dy), + RelativePathCommand::A(rx, ry, x_axis_rotation, large_arc_flag, sweep_flag, dx, dy) => { + format!("a {:.12} {:.12} {:.12} {} {} {:.12},{:.12}", rx, ry, x_axis_rotation, large_arc_flag as u8, sweep_flag as u8, dx, dy) + } + }, + }) + .collect::>() + .join(" ") +} diff --git a/libraries/path-bool/src/path.rs b/libraries/path-bool/src/path.rs new file mode 100644 index 00000000..7c71bb82 --- /dev/null +++ b/libraries/path-bool/src/path.rs @@ -0,0 +1,138 @@ +pub(crate) mod intersection_path_segment; +pub(crate) mod line_segment; +pub(crate) mod line_segment_aabb; +pub(crate) mod path_cubic_segment_self_intersection; +pub(crate) mod path_segment; + +use glam::DVec2; + +#[cfg(feature = "parsing")] +use crate::path_command::{to_absolute_commands, AbsolutePathCommand, PathCommand}; +use crate::path_segment::PathSegment; + +pub type Path = Vec; + +fn reflect_control_point(point: DVec2, control_point: DVec2) -> DVec2 { + point * 2.0 - control_point +} + +pub fn path_from_commands(commands: I) -> impl Iterator +where + I: IntoIterator, +{ + let mut first_point: Option = None; + let mut last_point: Option = None; + let mut last_control_point: Option = None; + + to_absolute_commands(commands).filter_map(move |cmd| match cmd { + AbsolutePathCommand::M(point) => { + last_point = Some(point); + first_point = Some(point); + last_control_point = None; + None + } + AbsolutePathCommand::L(point) => { + let start = last_point.unwrap(); + last_point = Some(point); + last_control_point = None; + Some(PathSegment::Line(start, point)) + } + AbsolutePathCommand::H(x) => { + let start = last_point.unwrap(); + let point = DVec2::new(x, start.y); + last_point = Some(point); + last_control_point = None; + Some(PathSegment::Line(start, point)) + } + AbsolutePathCommand::V(y) => { + let start = last_point.unwrap(); + let point = DVec2::new(start.x, y); + last_point = Some(point); + last_control_point = None; + Some(PathSegment::Line(start, point)) + } + AbsolutePathCommand::C(c1, c2, end) => { + let start = last_point.unwrap(); + last_point = Some(end); + last_control_point = Some(c2); + Some(PathSegment::Cubic(start, c1, c2, end)) + } + AbsolutePathCommand::S(c2, end) => { + let start = last_point.unwrap(); + let c1 = reflect_control_point(start, last_control_point.unwrap_or(start)); + last_point = Some(end); + last_control_point = Some(c2); + Some(PathSegment::Cubic(start, c1, c2, end)) + } + AbsolutePathCommand::Q(c, end) => { + let start = last_point.unwrap(); + last_point = Some(end); + last_control_point = Some(c); + Some(PathSegment::Quadratic(start, c, end)) + } + AbsolutePathCommand::T(end) => { + let start = last_point.unwrap(); + let c = reflect_control_point(start, last_control_point.unwrap_or(start)); + last_point = Some(end); + last_control_point = Some(c); + Some(PathSegment::Quadratic(start, c, end)) + } + AbsolutePathCommand::A(rx, ry, x_axis_rotation, large_arc_flag, sweep_flag, end) => { + let start = last_point.unwrap(); + last_point = Some(end); + last_control_point = None; + Some(PathSegment::Arc(start, rx, ry, x_axis_rotation, large_arc_flag, sweep_flag, end)) + } + AbsolutePathCommand::Z => { + let start = last_point.unwrap(); + let end = first_point.unwrap(); + last_point = Some(end); + last_control_point = None; + Some(PathSegment::Line(start, end)) + } + }) +} + +pub fn path_to_commands<'a, I>(segments: I, eps: f64) -> impl Iterator + 'a +where + I: IntoIterator + 'a, +{ + let mut last_point: Option = None; + + segments + .into_iter() + .flat_map(move |seg| { + let start = seg.start(); + let mut commands = Vec::new(); + + if last_point.map_or(true, |lp| !start.abs_diff_eq(lp, eps)) { + if last_point.is_some() { + commands.push(PathCommand::Absolute(AbsolutePathCommand::Z)); + } + + commands.push(PathCommand::Absolute(AbsolutePathCommand::M(start))); + } + + match seg { + PathSegment::Line(_, end) => { + commands.push(PathCommand::Absolute(AbsolutePathCommand::L(*end))); + last_point = Some(*end); + } + PathSegment::Cubic(_, c1, c2, end) => { + commands.push(PathCommand::Absolute(AbsolutePathCommand::C(*c1, *c2, *end))); + last_point = Some(*end); + } + PathSegment::Quadratic(_, c, end) => { + commands.push(PathCommand::Absolute(AbsolutePathCommand::Q(*c, *end))); + last_point = Some(*end); + } + PathSegment::Arc(_, rx, ry, x_axis_rotation, large_arc_flag, sweep_flag, end) => { + commands.push(PathCommand::Absolute(AbsolutePathCommand::A(*rx, *ry, *x_axis_rotation, *large_arc_flag, *sweep_flag, *end))); + last_point = Some(*end); + } + } + + commands + }) + .chain(std::iter::once(PathCommand::Absolute(AbsolutePathCommand::Z))) +} diff --git a/libraries/path-bool/src/path/intersection_path_segment.rs b/libraries/path-bool/src/path/intersection_path_segment.rs new file mode 100644 index 00000000..b5a6deae --- /dev/null +++ b/libraries/path-bool/src/path/intersection_path_segment.rs @@ -0,0 +1,298 @@ +use glam::DVec2; + +use crate::aabb::{bounding_box_max_extent, bounding_boxes_overlap, Aabb}; +use crate::epsilons::Epsilons; +use crate::line_segment::{line_segment_intersection, line_segments_intersect}; +use crate::line_segment_aabb::line_segment_aabb_intersect; +use crate::math::lerp; +use crate::path_segment::PathSegment; + +#[derive(Clone)] +struct IntersectionSegment { + seg: PathSegment, + start_param: f64, + end_param: f64, + bounding_box: Aabb, +} + +#[inline(never)] +fn subdivide_intersection_segment(int_seg: &IntersectionSegment) -> [IntersectionSegment; 2] { + let (seg0, seg1) = int_seg.seg.split_at(0.5); + let mid_param = (int_seg.start_param + int_seg.end_param) / 2.0; + [ + IntersectionSegment { + seg: seg0, + start_param: int_seg.start_param, + end_param: mid_param, + bounding_box: seg0.bounding_box(), + }, + IntersectionSegment { + seg: seg1, + start_param: mid_param, + end_param: int_seg.end_param, + bounding_box: seg1.bounding_box(), + }, + ] +} + +#[inline(never)] +fn path_segment_to_line_segment(seg: &PathSegment) -> [DVec2; 2] { + match seg { + PathSegment::Line(start, end) => [*start, *end], + PathSegment::Cubic(start, _, _, end) => [*start, *end], + PathSegment::Quadratic(start, _, end) => [*start, *end], + PathSegment::Arc(start, _, _, _, _, _, end) => [*start, *end], + } +} + +#[inline(never)] +fn intersection_segments_overlap(seg0: &IntersectionSegment, seg1: &IntersectionSegment) -> bool { + match (&seg0.seg, &seg1.seg) { + (PathSegment::Line(start0, end0), PathSegment::Line(start1, end1)) => { + line_segments_intersect([*start0, *end0], [*start1, *end1], 1e-6) // TODO: configurable + } + (PathSegment::Line(start, end), _) => line_segment_aabb_intersect([*start, *end], &seg1.bounding_box), + (_, PathSegment::Line(start, end)) => line_segment_aabb_intersect([*start, *end], &seg0.bounding_box), + _ => bounding_boxes_overlap(&seg0.bounding_box, &seg1.bounding_box), + } +} + +#[inline(never)] +pub fn segments_equal(seg0: &PathSegment, seg1: &PathSegment, point_epsilon: f64) -> bool { + match (*seg0, *seg1) { + (PathSegment::Line(start0, end0), PathSegment::Line(start1, end1)) => start0.abs_diff_eq(start1, point_epsilon) && end0.abs_diff_eq(end1, point_epsilon), + (PathSegment::Cubic(p00, p01, p02, p03), PathSegment::Cubic(p10, p11, p12, p13)) => { + let start_and_end_equal = p00.abs_diff_eq(p10, point_epsilon) && p03.abs_diff_eq(p13, point_epsilon); + + let parameter_equal = p01.abs_diff_eq(p11, point_epsilon) && p02.abs_diff_eq(p12, point_epsilon); + let direction1 = seg0.sample_at(0.1); + let direction2 = seg1.sample_at(0.1); + let angles_equal = (direction1 - p00).angle_to(direction2 - p00).abs() < point_epsilon * 4.; + + start_and_end_equal && (parameter_equal || angles_equal) + } + (PathSegment::Quadratic(p00, p01, p02), PathSegment::Quadratic(p10, p11, p12)) => { + p00.abs_diff_eq(p10, point_epsilon) && p01.abs_diff_eq(p11, point_epsilon) && p02.abs_diff_eq(p12, point_epsilon) + } + (PathSegment::Arc(p00, rx0, ry0, angle0, large_arc0, sweep0, p01), PathSegment::Arc(p10, rx1, ry1, angle1, large_arc1, sweep1, p11)) => { + p00.abs_diff_eq(p10, point_epsilon) && + (rx0 - rx1).abs() < point_epsilon && + (ry0 - ry1).abs() < point_epsilon && + (angle0 - angle1).abs() < point_epsilon && // TODO: Phi can be anything if rx = ry. Also, handle rotations by Pi/2. + large_arc0 == large_arc1 && + sweep0 == sweep1 && + p01.abs_diff_eq(p11, point_epsilon) + } + _ => false, + } +} + +pub fn path_segment_intersection(seg0: &PathSegment, seg1: &PathSegment, endpoints: bool, eps: &Epsilons) -> Vec<[f64; 2]> { + // dbg!(&seg0, &seg1, endpoints); + if let (PathSegment::Line(start0, end0), PathSegment::Line(start1, end1)) = (seg0, seg1) { + if let Some(st) = line_segment_intersection([*start0, *end0], [*start1, *end1], eps.param) { + if !endpoints && (st.0 < eps.param || st.0 > 1.0 - eps.param) && (st.1 < eps.param || st.1 > 1.0 - eps.param) { + return vec![]; + } + return vec![st.into()]; + } + } + + // https://math.stackexchange.com/questions/20321/how-can-i-tell-when-two-cubic-b%C3%A9zier-curves-intersect + + let mut pairs = vec![( + IntersectionSegment { + seg: *seg0, + start_param: 0.0, + end_param: 1.0, + bounding_box: seg0.bounding_box(), + }, + IntersectionSegment { + seg: *seg1, + start_param: 0.0, + end_param: 1.0, + bounding_box: seg1.bounding_box(), + }, + )]; + let mut next_pairs = Vec::new(); + + let mut params = Vec::new(); + let mut subdivided0 = Vec::new(); + let mut subdivided1 = Vec::new(); + + // check if start and end points are on the other bezier curves. If so, add as intersection. + + while !pairs.is_empty() { + next_pairs.clear(); + + if pairs.len() > 1000 { + // TODO: check for intersections of the start/end points. If the two lines overlap, return split points for the start/end points. Use a binary search to check where the points are on the line. + return calculate_overlap_intersections(seg0, seg1, eps); + } + + for (seg0, seg1) in pairs.iter() { + if segments_equal(&seg0.seg, &seg1.seg, eps.point) { + // TODO: move this outside of this loop? + continue; // TODO: what to do? + } + + let is_linear0 = bounding_box_max_extent(&seg0.bounding_box) <= eps.linear || (seg0.end_param - seg0.start_param).abs() < eps.param; + let is_linear1 = bounding_box_max_extent(&seg1.bounding_box) <= eps.linear || (seg1.end_param - seg1.start_param).abs() < eps.param; + + if is_linear0 && is_linear1 { + let line_segment0 = path_segment_to_line_segment(&seg0.seg); + let line_segment1 = path_segment_to_line_segment(&seg1.seg); + if let Some(st) = line_segment_intersection(line_segment0, line_segment1, eps.param) { + // dbg!("pushing param"); + params.push([lerp(seg0.start_param, seg0.end_param, st.0), lerp(seg1.start_param, seg1.end_param, st.1)]); + } + } else { + subdivided0.clear(); + subdivided1.clear(); + if is_linear0 { + subdivided0.push(seg0.clone()) + } else { + subdivided0.extend_from_slice(&subdivide_intersection_segment(seg0)) + }; + if is_linear1 { + subdivided1.push(seg1.clone()) + } else { + subdivided1.extend_from_slice(&subdivide_intersection_segment(seg1)) + }; + + for seg0 in &subdivided0 { + for seg1 in &subdivided1 { + if intersection_segments_overlap(seg0, seg1) { + next_pairs.push((seg0.clone(), seg1.clone())); + } + } + } + } + } + + std::mem::swap(&mut pairs, &mut next_pairs); + } + + if !endpoints { + params.retain(|[s, t]| (s > &eps.param && s < &(1.0 - eps.param)) || (t > &eps.param && t < &(1.0 - eps.param))); + } + + params +} + +fn calculate_overlap_intersections(seg0: &PathSegment, seg1: &PathSegment, eps: &Epsilons) -> Vec<[f64; 2]> { + let start0 = seg0.start(); + let end0 = seg0.end(); + let start1 = seg1.start(); + let end1 = seg1.end(); + + let mut intersections = Vec::new(); + + // Check start0 against seg1 + if let Some(t1) = find_point_on_segment(seg1, start0, eps) { + intersections.push([0.0, t1]); + } + + // Check end0 against seg1 + if let Some(t1) = find_point_on_segment(seg1, end0, eps) { + intersections.push([1.0, t1]); + } + + // Check start1 against seg0 + if let Some(t0) = find_point_on_segment(seg0, start1, eps) { + intersections.push([t0, 0.0]); + } + + // Check end1 against seg0 + if let Some(t0) = find_point_on_segment(seg0, end1, eps) { + intersections.push([t0, 1.0]); + } + + // Remove duplicates and sort intersections + intersections.sort_unstable_by(|a, b| a[0].partial_cmp(&b[0]).unwrap()); + intersections.dedup_by(|a, b| DVec2::from(*a).abs_diff_eq(DVec2::from(*b), eps.param)); + + // Handle special cases + if intersections.is_empty() { + // Check if segments are identical + if (start0.abs_diff_eq(start1, eps.point)) && end0.abs_diff_eq(end1, eps.point) { + return vec![[0.0, 0.0], [1.0, 1.0]]; + } + } else if intersections.len() > 2 { + // Keep only the first and last intersection points + intersections = vec![intersections[0], intersections[intersections.len() - 1]]; + } + + intersections +} + +fn find_point_on_segment(seg: &PathSegment, point: DVec2, eps: &Epsilons) -> Option { + let start = 0.0; + let end = 1.0; + let mut t = 0.5; + + for _ in 0..32 { + // Limit iterations to prevent infinite loops + let current_point = seg.sample_at(t); + + if current_point.abs_diff_eq(point, eps.point) { + return Some(t); + } + + let start_point = seg.sample_at(start); + let end_point = seg.sample_at(end); + + let dist_start = (point - start_point).length_squared(); + let dist_end = (point - end_point).length_squared(); + let dist_current = (point - current_point).length_squared(); + + if dist_current < dist_start && dist_current < dist_end { + return Some(t); + } + + if dist_start < dist_end { + t = (start + t) / 2.0; + } else { + t = (t + end) / 2.0; + } + + if (end - start) < eps.param { + break; + } + } + + None +} + +#[cfg(test)] +mod test { + use super::*; + use glam::DVec2; + + #[test] + fn intersect_cubic_slow_first() { + path_segment_intersection(&a(), &b(), true, &crate::EPS); + } + #[test] + fn intersect_cubic_slow_second() { + path_segment_intersection(&c(), &d(), true, &crate::EPS); + } + + fn a() -> PathSegment { + PathSegment::Cubic( + DVec2::new(458.37027, 572.165771), + DVec2::new(428.525848, 486.720093), + DVec2::new(368.618805, 467.485992), + DVec2::new(273.0, 476.0), + ) + } + fn b() -> PathSegment { + PathSegment::Cubic(DVec2::new(273.0, 476.0), DVec2::new(419.0, 463.0), DVec2::new(481.741198, 514.692273), DVec2::new(481.333333, 768.0)) + } + fn c() -> PathSegment { + PathSegment::Cubic(DVec2::new(273.0, 476.0), DVec2::new(107.564178, 490.730591), DVec2::new(161.737915, 383.575775), DVec2::new(0.0, 340.0)) + } + fn d() -> PathSegment { + PathSegment::Cubic(DVec2::new(0.0, 340.0), DVec2::new(161.737914, 383.575765), DVec2::new(107.564182, 490.730587), DVec2::new(273.0, 476.0)) + } +} diff --git a/libraries/path-bool/src/path/line_segment.rs b/libraries/path-bool/src/path/line_segment.rs new file mode 100644 index 00000000..71e0a28c --- /dev/null +++ b/libraries/path-bool/src/path/line_segment.rs @@ -0,0 +1,33 @@ +use glam::DVec2; + +pub type LineSegment = [DVec2; 2]; + +const COLLINEAR_EPS: f64 = f64::EPSILON * 64.0; + +#[inline(never)] +pub fn line_segment_intersection([p1, p2]: LineSegment, [p3, p4]: LineSegment, eps: f64) -> Option<(f64, f64)> { + // https://en.wikipedia.org/wiki/Intersection_(geometry)#Two_line_segments + + let a = p2 - p1; + let b = p3 - p4; + let c = p3 - p1; + + let denom = a.x * b.y - a.y * b.x; + + if denom.abs() < COLLINEAR_EPS { + return None; + } + + let s = (c.x * b.y - c.y * b.x) / denom; + let t = (a.x * c.y - a.y * c.x) / denom; + + if (-eps..=1.0 + eps).contains(&s) && (-eps..=1.0 + eps).contains(&t) { + Some((s, t)) + } else { + None + } +} + +pub fn line_segments_intersect(seg1: LineSegment, seg2: LineSegment, eps: f64) -> bool { + line_segment_intersection(seg1, seg2, eps).is_some() +} diff --git a/libraries/path-bool/src/path/line_segment_aabb.rs b/libraries/path-bool/src/path/line_segment_aabb.rs new file mode 100644 index 00000000..58be8316 --- /dev/null +++ b/libraries/path-bool/src/path/line_segment_aabb.rs @@ -0,0 +1,89 @@ +use crate::aabb::Aabb; +use crate::line_segment::LineSegment; + +const INSIDE: u8 = 0; +const LEFT: u8 = 1; +const RIGHT: u8 = 1 << 1; +const BOTTOM: u8 = 1 << 2; +const TOP: u8 = 1 << 3; + +fn out_code(x: f64, y: f64, bounding_box: &Aabb) -> u8 { + let mut code = INSIDE; + + if x < bounding_box.left { + code |= LEFT; + } else if x > bounding_box.right { + code |= RIGHT; + } + + if y < bounding_box.top { + code |= BOTTOM; + } else if y > bounding_box.bottom { + code |= TOP; + } + + code +} + +pub(crate) fn line_segment_aabb_intersect(seg: LineSegment, bounding_box: &Aabb) -> bool { + let [mut p0, mut p1] = seg; + + let mut outcode0 = out_code(p0.x, p0.y, bounding_box); + let mut outcode1 = out_code(p1.x, p1.y, bounding_box); + + loop { + if (outcode0 | outcode1) == 0 { + // bitwise OR is 0: both points inside window; trivially accept and exit loop + return true; + } else if (outcode0 & outcode1) != 0 { + // bitwise AND is not 0: both points share an outside zone (LEFT, RIGHT, TOP, + // or BOTTOM), so both must be outside window; exit loop (accept is false) + return false; + } else { + // failed both tests, so calculate the line segment to clip + // from an outside point to an intersection with clip edge + let mut x = 0.0; + let mut y = 0.0; + + // At least one endpoint is outside the clip rectangle; pick it. + let outcode_out = if outcode1 > outcode0 { outcode1 } else { outcode0 }; + + // Now find the intersection point; + // use formulas: + // slope = (y1 - y0) / (x1 - x0) + // x = x0 + (1 / slope) * (ym - y0), where ym is ymin or ymax + // y = y0 + slope * (xm - x0), where xm is xmin or xmax + // No need to worry about divide-by-zero because, in each case, the + // outcode bit being tested guarantees the denominator is non-zero + if (outcode_out & TOP) != 0 { + // point is above the clip window + x = p0.x + (p1.x - p0.x) * (bounding_box.bottom - p0.y) / (p1.y - p0.y); + y = bounding_box.bottom; + } else if (outcode_out & BOTTOM) != 0 { + // point is below the clip window + x = p0.x + (p1.x - p0.x) * (bounding_box.top - p0.y) / (p1.y - p0.y); + y = bounding_box.top; + } else if (outcode_out & RIGHT) != 0 { + // point is to the right of clip window + y = p0.y + (p1.y - p0.y) * (bounding_box.right - p0.x) / (p1.x - p0.x); + x = bounding_box.right; + } else if (outcode_out & LEFT) != 0 { + // point is to the left of clip window + y = p0.y + (p1.y - p0.y) * (bounding_box.left - p0.x) / (p1.x - p0.x); + x = bounding_box.left; + } + + // Now we move outside point to intersection point to clip + // and get ready for next pass. + if outcode_out == outcode0 { + p0.x = x; + p0.y = y; + outcode0 = out_code(p0.x, p0.y, bounding_box); + } else { + p1.x = x; + p1.y = y; + outcode1 = out_code(p1.x, p1.y, bounding_box); + } + } + } +} diff --git a/libraries/path-bool/src/path/path_cubic_segment_self_intersection.rs b/libraries/path-bool/src/path/path_cubic_segment_self_intersection.rs new file mode 100644 index 00000000..bb766ae3 --- /dev/null +++ b/libraries/path-bool/src/path/path_cubic_segment_self_intersection.rs @@ -0,0 +1,39 @@ +use crate::path_segment::PathSegment; + +const EPS: f64 = 1e-12; + +pub fn path_cubic_segment_self_intersection(seg: &PathSegment) -> Option<[f64; 2]> { + // https://math.stackexchange.com/questions/3931865/self-intersection-of-a-cubic-bezier-interpretation-of-the-solution + + if let PathSegment::Cubic(p1, p2, p3, p4) = seg { + let ax = -p1.x + 3.0 * p2.x - 3.0 * p3.x + p4.x; + let ay = -p1.y + 3.0 * p2.y - 3.0 * p3.y + p4.y; + let bx = 3.0 * p1.x - 6.0 * p2.x + 3.0 * p3.x; + let by = 3.0 * p1.y - 6.0 * p2.y + 3.0 * p3.y; + let cx = -3.0 * p1.x + 3.0 * p2.x; + let cy = -3.0 * p1.y + 3.0 * p2.y; + + let m = ay * bx - ax * by; + let n = ax * cy - ay * cx; + + let k = (-3.0 * ax * ax * cy * cy + 6.0 * ax * ay * cx * cy + 4.0 * ax * bx * by * cy - 4.0 * ax * by * by * cx - 3.0 * ay * ay * cx * cx - 4.0 * ay * bx * bx * cy + 4.0 * ay * bx * by * cx) + / (ax * ax * by * by - 2.0 * ax * ay * bx * by + ay * ay * bx * bx); + + if k < 0.0 { + return None; + } + + let t1 = (n / m + k.sqrt()) / 2.0; + let t2 = (n / m - k.sqrt()) / 2.0; + + if (EPS..=1.0 - EPS).contains(&t1) && (EPS..=1.0 - EPS).contains(&t2) { + let mut result = [t1, t2]; + result.sort_by(|a, b| a.partial_cmp(b).unwrap()); + Some(result) + } else { + None + } + } else { + None + } +} diff --git a/libraries/path-bool/src/path/path_segment.rs b/libraries/path-bool/src/path/path_segment.rs new file mode 100644 index 00000000..7d14a0db --- /dev/null +++ b/libraries/path-bool/src/path/path_segment.rs @@ -0,0 +1,720 @@ +//! Defines the `PathSegment` enum and related functionality for representing and +//! manipulating path segments in 2D space. +//! +//! This module provides implementations for various types of path segments including +//! lines, cubic and quadratic Bézier curves, and elliptical arcs. It also includes +//! utility functions for operations such as bounding box calculation, segment splitting, +//! and arc-to-cubic conversion. +//! +//! The implementations in this module closely follow the SVG path specification, +//! making it suitable for use in vector graphics applications. + +use glam::{DMat2, DMat3, DVec2}; +use std::f64::consts::{PI, TAU}; + +use crate::aabb::{bounding_box_around_point, expand_bounding_box, extend_bounding_box, merge_bounding_boxes, Aabb}; +use crate::math::{lerp, vector_angle}; +use crate::EPS; + +/// Represents a segment of a path in a 2D space, based on the SVG path specification. +/// +/// This enum closely follows the path segment types defined in the SVG 2 specification. +/// For more details, see: +/// +/// Each variant of this enum corresponds to a different type of path segment: +/// - Line: A straight line between two points. +/// - Cubic: A cubic Bézier curve. +/// - Quadratic: A quadratic Bézier curve. +/// - Arc: An elliptical arc. +/// +/// # Examples +/// +/// Creating a line segment: +/// ``` +/// use path_bool::PathSegment; +/// use glam::DVec2; +/// +/// let line = PathSegment::Line(DVec2::new(0.0, 0.0), DVec2::new(1.0, 1.0)); +/// ``` +/// +/// Creating a cubic Bézier curve: +/// ``` +/// use path_bool::PathSegment; +/// use glam::DVec2; +/// +/// let cubic = PathSegment::Cubic( +/// DVec2::new(0.0, 0.0), +/// DVec2::new(1.0, 0.0), +/// DVec2::new(1.0, 1.0), +/// DVec2::new(2.0, 1.0) +/// ); +/// ``` +#[derive(Clone, Copy, Debug, PartialEq)] +pub enum PathSegment { + /// A line segment from the first point to the second. + /// Corresponds to the SVG "L" command. + Line(DVec2, DVec2), + + /// A cubic Bézier curve with start point, two control points, and end point. + /// Corresponds to the SVG "C" command. + Cubic(DVec2, DVec2, DVec2, DVec2), + + /// A quadratic Bézier curve with start point, control point, and end point. + /// Corresponds to the SVG "Q" command. + Quadratic(DVec2, DVec2, DVec2), + + /// An elliptical arc. + /// Corresponds to the SVG "A" command. + /// + /// Parameters: + /// - Start point + /// - X-axis radius + /// - Y-axis radius + /// - X-axis rotation (in radians) + /// - Large arc flag (true if the arc should be greater than or equal to 180 degrees) + /// - Sweep flag (true if the arc should be drawn in a "positive-angle" direction) + /// - End point + Arc(DVec2, f64, f64, f64, bool, bool, DVec2), +} + +impl PathSegment { + /// Calculates the angle of the tangent at the start point of the segment. + /// + /// This method computes the angle (in radians) of the tangent vector at the + /// beginning of the path segment. The angle is measured clockwise + /// from the positive x-axis. + /// + /// # Returns + /// + /// A float representing the angle in radians, normalized to the range [0, 2π). + /// + /// # Examples + /// + /// ``` + /// use path_bool::PathSegment; + /// use glam::DVec2; + /// use std::f64::consts::{TAU, FRAC_PI_4}; + /// + /// let line = PathSegment::Line(DVec2::new(0.0, 0.0), DVec2::new(1.0, 1.0)); + /// assert_eq!(line.start_angle(), TAU - (FRAC_PI_4)); + /// ``` + pub fn start_angle(&self) -> f64 { + let angle = match *self { + PathSegment::Line(start, end) => (end - start).angle_to(DVec2::X), + PathSegment::Cubic(start, control1, control2, _) => { + let diff = control1 - start; + if diff.abs_diff_eq(DVec2::ZERO, EPS.point) { + // if this diff were empty too, the segments would have been convertet to a line + (control2 - start).angle_to(DVec2::X) + } else { + diff.angle_to(DVec2::X) + } + } + // Apply same logic as for cubic bezier + PathSegment::Quadratic(start, control, _) => (control - start).to_angle(), + PathSegment::Arc(..) => self.arc_segment_to_cubics(0.001)[0].start_angle(), + }; + use std::f64::consts::TAU; + (angle + TAU) % TAU + } + + /// Computes the curvature at the start point of the segment. + /// + /// The curvature is a measure of how sharply a curve bends. A straight line + /// has a curvature of 0, while a tight curve has a higher curvature value. + /// + /// # Returns + /// + /// A float representing the curvature. Positive values indicate a left + /// curve, while negative values indicate a right curve. + /// + /// # Examples + /// + /// ``` + /// use path_bool::PathSegment; + /// use glam::DVec2; + /// + /// let line = PathSegment::Line(DVec2::new(0.0, 0.0), DVec2::new(1.0, 1.0)); + /// assert_eq!(line.start_curvature(), 0.0); + /// + /// let curve = PathSegment::Cubic( + /// DVec2::new(0.0, 0.0), + /// DVec2::new(0.0, 1.0), + /// DVec2::new(1.0, 1.0), + /// DVec2::new(1.0, 0.0) + /// ); + /// assert!(curve.start_curvature() < 0.0); + /// ``` + pub fn start_curvature(&self) -> f64 { + match *self { + PathSegment::Line(_, _) => 0.0, + PathSegment::Cubic(start, control1, control2, _) => { + let a = control1 - start; + let a = 3. * a; + let b = start - 2.0 * control1 + control2; + let b = 6. * b; + let numerator = a.x * b.y - a.y * b.x; + let denominator = a.length_squared() * a.length(); + // dbg!(a, b, numerator, denominator); + if denominator == 0.0 { + 0.0 + } else { + numerator / denominator + } + } + PathSegment::Quadratic(start, control, end) => { + // first derivatiave + let a = 2. * (control - start); + // second derivatiave + let b = 2. * (start - 2.0 * control + end); + let numerator = a.x * b.y - a.y * b.x; + let denominator = a.length_squared() * a.length(); + if denominator == 0.0 { + 0.0 + } else { + numerator / denominator + } + } + PathSegment::Arc(..) => self.arc_segment_to_cubics(0.001)[0].start_curvature(), + } + } + /// Converts the segment to a cubic Bézier curve representation. + /// + /// This method provides a uniform representation of all segment types as + /// cubic Bézier curves. For segments that are not naturally cubic Bézier + /// curves (like lines or quadratic Bézier curves), an equivalent cubic + /// Bézier representation is computed. + /// + /// # Returns + /// + /// An array of four `DVec2` points representing the cubic Bézier curve: + /// [start point, first control point, second control point, end point] + /// + /// # Examples + /// + /// ``` + /// use path_bool::PathSegment; + /// use glam::DVec2; + /// + /// let line = PathSegment::Line(DVec2::new(0.0, 0.0), DVec2::new(1.0, 1.0)); + /// let cubic = line.to_cubic(); + /// assert_eq!(cubic[0], DVec2::new(0.0, 0.0)); + /// assert_eq!(cubic[3], DVec2::new(1.0, 1.0)); + /// ``` + /// + /// # Panics + /// + /// This method is not implemented for `PathSegment::Arc`. Attempting to call + /// `to_cubic()` on an `Arc` segment will result in a panic. + pub fn to_cubic(&self) -> [DVec2; 4] { + match *self { + PathSegment::Line(start, end) => [start, start, end, end], + PathSegment::Cubic(s, c1, c2, e) => [s, c1, c2, e], + PathSegment::Quadratic(start, control, end) => { + // C0 = Q0 + // C1 = Q0 + (2/3) (Q1 - Q0) + // C2 = Q2 + (2/3) (Q1 - Q2) + // C3 = Q2 + let d1 = control - start; + let d2 = control - end; + [start, start + (2. / 3.) * d1, end + (2. / 3.) * d2, end] + } + PathSegment::Arc(..) => unimplemented!(), + } + } + + #[must_use] + /// Retrieves the start point of a path segment. + pub fn start(&self) -> DVec2 { + match self { + PathSegment::Line(start, _) => *start, + PathSegment::Cubic(start, _, _, _) => *start, + PathSegment::Quadratic(start, _, _) => *start, + PathSegment::Arc(start, _, _, _, _, _, _) => *start, + } + } + + #[must_use] + /// Retrieves the end point of a path segment. + pub fn end(&self) -> DVec2 { + match self { + PathSegment::Line(_, end) => *end, + PathSegment::Cubic(_, _, _, end) => *end, + PathSegment::Quadratic(_, _, end) => *end, + PathSegment::Arc(_, _, _, _, _, _, end) => *end, + } + } + + #[must_use] + /// Reverses the direction of the path segment. + /// + /// This method creates a new `PathSegment` that represents the same geometric shape + /// but in the opposite direction. + /// + /// # Examples + /// + /// ``` + /// use path_bool::PathSegment; + /// use glam::DVec2; + /// + /// let line = PathSegment::Line(DVec2::new(0.0, 0.0), DVec2::new(1.0, 1.0)); + /// let reversed = line.reverse(); + /// assert_eq!(reversed.start(), DVec2::new(1.0, 1.0)); + /// assert_eq!(reversed.end(), DVec2::new(0.0, 0.0)); + /// ``` + pub fn reverse(&self) -> PathSegment { + match *self { + PathSegment::Line(start, end) => PathSegment::Line(end, start), + PathSegment::Cubic(p1, p2, p3, p4) => PathSegment::Cubic(p4, p3, p2, p1), + PathSegment::Quadratic(p1, p2, p3) => PathSegment::Quadratic(p3, p2, p1), + PathSegment::Arc(start, rx, ry, phi, fa, fs, end) => PathSegment::Arc(end, rx, ry, phi, fa, !fs, start), + } + } + + #[must_use] + /// Converts an arc segment to its center parameterization. + /// + /// This method is only meaningful for `Arc` segments. For other segment types, + /// it returns `None`. + /// + /// # Returns + /// + /// An `Option` containing `PathArcSegmentCenterParametrization` if the segment + /// is an `Arc`, or `None` otherwise. + pub fn arc_segment_to_center(&self) -> Option { + if let PathSegment::Arc(xy1, rx, ry, phi, fa, fs, xy2) = *self { + if rx == 0.0 || ry == 0.0 { + return None; + } + + let rotation_matrix = DMat2::from_angle(-phi.to_radians()); + let xy1_prime = rotation_matrix * (xy1 - xy2) * 0.5; + + let mut rx2 = rx * rx; + let mut ry2 = ry * ry; + let x1_prime2 = xy1_prime.x * xy1_prime.x; + let y1_prime2 = xy1_prime.y * xy1_prime.y; + + let mut rx = rx.abs(); + let mut ry = ry.abs(); + let lambda = x1_prime2 / rx2 + y1_prime2 / ry2 + 1e-12; + if lambda > 1.0 { + let lambda_sqrt = lambda.sqrt(); + rx *= lambda_sqrt; + ry *= lambda_sqrt; + let lambda_abs = lambda.abs(); + rx2 *= lambda_abs; + ry2 *= lambda_abs; + } + + let sign = if fa == fs { -1.0 } else { 1.0 }; + let multiplier = ((rx2 * ry2 - rx2 * y1_prime2 - ry2 * x1_prime2) / (rx2 * y1_prime2 + ry2 * x1_prime2)).sqrt(); + let cx_prime = sign * multiplier * ((rx * xy1_prime.y) / ry); + let cy_prime = sign * multiplier * ((-ry * xy1_prime.x) / rx); + + let cxy = rotation_matrix.transpose() * DVec2::new(cx_prime, cy_prime) + (xy1 + xy2) * 0.5; + + let vec1 = DVec2::new((xy1_prime.x - cx_prime) / rx, (xy1_prime.y - cy_prime) / ry); + let theta1 = vector_angle(DVec2::new(1.0, 0.0), vec1); + let mut delta_theta = vector_angle(vec1, DVec2::new((-xy1_prime.x - cx_prime) / rx, (-xy1_prime.y - cy_prime) / ry)); + + if !fs && delta_theta > 0.0 { + delta_theta -= TAU; + } else if fs && delta_theta < 0.0 { + delta_theta += TAU; + } + + Some(PathArcSegmentCenterParametrization { + center: cxy, + theta1, + delta_theta, + rx, + ry, + phi, + }) + } else { + None + } + } + + #[must_use] + /// Samples a point on the path segment at a given parameter value. + /// + /// # Arguments + /// + /// * `t` - A value between 0.0 and 1.0 representing the position along the segment. + /// + /// # Examples + /// + /// ``` + /// use path_bool::PathSegment; + /// use glam::DVec2; + /// + /// let line = PathSegment::Line(DVec2::new(0.0, 0.0), DVec2::new(2.0, 2.0)); + /// assert_eq!(line.sample_at(0.5), DVec2::new(1.0, 1.0)); + /// ``` + pub fn sample_at(&self, t: f64) -> DVec2 { + match *self { + PathSegment::Line(start, end) => start.lerp(end, t), + PathSegment::Cubic(p1, p2, p3, p4) => { + let p01 = p1.lerp(p2, t); + let p12 = p2.lerp(p3, t); + let p23 = p3.lerp(p4, t); + let p012 = p01.lerp(p12, t); + let p123 = p12.lerp(p23, t); + p012.lerp(p123, t) + } + PathSegment::Quadratic(p1, p2, p3) => { + let p01 = p1.lerp(p2, t); + let p12 = p2.lerp(p3, t); + p01.lerp(p12, t) + } + PathSegment::Arc(start, rx, ry, phi, _, _, end) => { + if let Some(center_param) = self.arc_segment_to_center() { + let theta = center_param.theta1 + t * center_param.delta_theta; + let p = DVec2::new(rx * theta.cos(), ry * theta.sin()); + let rotation_matrix = DMat2::from_angle(phi); + rotation_matrix * p + center_param.center + } else { + start.lerp(end, t) + } + } + } + } + + #[must_use] + /// Approximates an arc segment with a series of cubic Bézier curves. + /// + /// This method is primarily used for `Arc` segments, converting them into + /// a series of cubic Bézier curves for easier rendering or manipulation. + /// For non-`Arc` segments, it returns a vector containing only the original segment. + /// + /// # Arguments + /// + /// * `max_delta_theta` - The maximum angle (in radians) that each cubic Bézier + /// curve approximation should span. + /// + /// # Returns + /// + /// A vector of `PathSegment::Cubic` approximating the original segment. + pub fn arc_segment_to_cubics(&self, max_delta_theta: f64) -> Vec { + if let PathSegment::Arc(start, rx, ry, phi, _, _, end) = *self { + if let Some(center_param) = self.arc_segment_to_center() { + let count = ((center_param.delta_theta.abs() / max_delta_theta).ceil() as usize).max(1); + + let from_unit = DMat3::from_translation(center_param.center) * DMat3::from_angle(phi.to_radians()) * DMat3::from_scale(DVec2::new(rx, ry)); + + let theta = center_param.delta_theta / count as f64; + let k = (4.0 / 3.0) * (theta / 4.0).tan(); + let sin_theta = theta.sin(); + let cos_theta = theta.cos(); + + (0..count) + .map(|i| { + let start = DVec2::new(1.0, 0.0); + let control1 = DVec2::new(1.0, k); + let control2 = DVec2::new(cos_theta + k * sin_theta, sin_theta - k * cos_theta); + let end = DVec2::new(cos_theta, sin_theta); + + let matrix = DMat3::from_angle(center_param.theta1 + i as f64 * theta) * from_unit; + let start = (matrix * start.extend(1.0)).truncate(); + let control1 = (matrix * control1.extend(1.0)).truncate(); + let control2 = (matrix * control2.extend(1.0)).truncate(); + let end = (matrix * end.extend(1.0)).truncate(); + + PathSegment::Cubic(start, control1, control2, end) + }) + .collect() + } else { + vec![PathSegment::Line(start, end)] + } + } else { + vec![*self] + } + } +} + +/// Represents the center parameterization of an elliptical arc. +/// +/// This struct is used internally to perform calculations on arc segments. +pub struct PathArcSegmentCenterParametrization { + center: DVec2, + theta1: f64, + delta_theta: f64, + rx: f64, + ry: f64, + phi: f64, +} + +/// Converts the center parameterization back to an arc segment. +/// +/// # Arguments +/// +/// * `start` - Optional start point of the arc. If `None`, the start point is calculated. +/// * `end` - Optional end point of the arc. If `None`, the end point is calculated. +/// +/// # Returns +/// +/// A `PathSegment::Arc` representing the arc described by this parameterization. +impl PathArcSegmentCenterParametrization { + #[must_use] + pub fn arc_segment_from_center(&self, start: Option, end: Option) -> PathSegment { + let rotation_matrix = DMat2::from_angle(self.phi); + + let mut xy1 = rotation_matrix * DVec2::new(self.rx * self.theta1.cos(), self.ry * self.theta1.sin()) + self.center; + + let mut xy2 = rotation_matrix * DVec2::new(self.rx * (self.theta1 + self.delta_theta).cos(), self.ry * (self.theta1 + self.delta_theta).sin()) + self.center; + + let fa = self.delta_theta.abs() > PI; + let fs = self.delta_theta > 0.0; + xy1 = start.unwrap_or(xy1); + xy2 = end.unwrap_or(xy2); + + PathSegment::Arc(xy1, self.rx, self.ry, self.phi, fa, fs, xy2) + } +} + +/// Evaluates a 1D cubic Bézier curve at a given parameter value. +/// +/// # Arguments +/// +/// * `p0`, `p1`, `p2`, `p3` - Control points of the cubic Bézier curve. +/// * `t` - Parameter value between 0 and 1. +/// +/// # Returns +/// +/// The value of the Bézier curve at parameter `t`. +fn eval_cubic_1d(p0: f64, p1: f64, p2: f64, p3: f64, t: f64) -> f64 { + let p01 = lerp(p0, p1, t); + let p12 = lerp(p1, p2, t); + let p23 = lerp(p2, p3, t); + let p012 = lerp(p01, p12, t); + let p123 = lerp(p12, p23, t); + lerp(p012, p123, t) +} + +/// Computes the bounding interval of a 1D cubic Bézier curve. +/// +/// This function finds the minimum and maximum values of a cubic Bézier curve +/// over the interval [0, 1]. +/// +/// # Arguments +/// +/// * `p0`, `p1`, `p2`, `p3` - Control points of the cubic Bézier curve. +/// +/// # Returns +/// +/// A tuple `(min, max)` representing the bounding interval. +fn cubic_bounding_interval(p0: f64, p1: f64, p2: f64, p3: f64) -> (f64, f64) { + let mut min = p0.min(p3); + let mut max = p0.max(p3); + + let a = 3.0 * (-p0 + 3.0 * p1 - 3.0 * p2 + p3); + let b = 6.0 * (p0 - 2.0 * p1 + p2); + let c = 3.0 * (p1 - p0); + let d = b * b - 4.0 * a * c; + + if d < 0.0 || a == 0.0 { + // TODO: if a=0, solve linear + return (min, max); + } + + let sqrt_d = d.sqrt(); + + let t0 = (-b - sqrt_d) / (2.0 * a); + if 0.0 < t0 && t0 < 1.0 { + let x0 = eval_cubic_1d(p0, p1, p2, p3, t0); + min = min.min(x0); + max = max.max(x0); + } + + let t1 = (-b + sqrt_d) / (2.0 * a); + if 0.0 < t1 && t1 < 1.0 { + let x1 = eval_cubic_1d(p0, p1, p2, p3, t1); + min = min.min(x1); + max = max.max(x1); + } + + (min, max) +} + +/// Evaluates a 1D quadratic Bézier curve at a given parameter value. +/// +/// # Arguments +/// +/// * `p0`, `p1`, `p2` - Control points of the quadratic Bézier curve. +/// * `t` - Parameter value between 0 and 1. +/// +/// # Returns +/// +/// The value of the Bézier curve at parameter `t`. +fn eval_quadratic_1d(p0: f64, p1: f64, p2: f64, t: f64) -> f64 { + let p01 = lerp(p0, p1, t); + let p12 = lerp(p1, p2, t); + lerp(p01, p12, t) +} + +/// Computes the bounding interval of a 1D quadratic Bézier curve. +/// +/// This function finds the minimum and maximum values of a quadratic Bézier curve +/// over the interval [0, 1]. +/// +/// # Arguments +/// +/// * `p0`, `p1`, `p2` - Control points of the quadratic Bézier curve. +/// +/// # Returns +/// +/// A tuple `(min, max)` representing the bounding interval. +fn quadratic_bounding_interval(p0: f64, p1: f64, p2: f64) -> (f64, f64) { + let mut min = p0.min(p2); + let mut max = p0.max(p2); + + let denominator = p0 - 2.0 * p1 + p2; + + if denominator == 0.0 { + return (min, max); + } + + let t = (p0 - p1) / denominator; + if (0.0..=1.0).contains(&t) { + let x = eval_quadratic_1d(p0, p1, p2, t); + min = min.min(x); + max = max.max(x); + } + + (min, max) +} + +fn in_interval(x: f64, x0: f64, x1: f64) -> bool { + (x0..=x1).contains(&x) +} + +impl PathSegment { + /// Computes the bounding box of the path segment. + /// + /// # Returns + /// + /// An `AaBb` representing the axis-aligned bounding box of the segment. + pub(crate) fn bounding_box(&self) -> Aabb { + match *self { + PathSegment::Line(start, end) => Aabb { + top: start.y.min(end.y), + right: start.x.max(end.x), + bottom: start.y.max(end.y), + left: start.x.min(end.x), + }, + PathSegment::Cubic(p1, p2, p3, p4) => { + let (left, right) = cubic_bounding_interval(p1.x, p2.x, p3.x, p4.x); + let (top, bottom) = cubic_bounding_interval(p1.y, p2.y, p3.y, p4.y); + Aabb { top, right, bottom, left } + } + PathSegment::Quadratic(p1, p2, p3) => { + let (left, right) = quadratic_bounding_interval(p1.x, p2.x, p3.x); + let (top, bottom) = quadratic_bounding_interval(p1.y, p2.y, p3.y); + Aabb { top, right, bottom, left } + } + PathSegment::Arc(start, rx, ry, phi, _, _, end) => { + if let Some(center_param) = self.arc_segment_to_center() { + let theta2 = center_param.theta1 + center_param.delta_theta; + let mut bounding_box = extend_bounding_box(Some(bounding_box_around_point(start, 0.0)), end); + + if phi == 0.0 || rx == ry { + // FIXME: the following gives false positives, resulting in larger boxes + if in_interval(-PI, center_param.theta1, theta2) || in_interval(PI, center_param.theta1, theta2) { + bounding_box = extend_bounding_box(Some(bounding_box), DVec2::new(center_param.center.x - rx, center_param.center.y)); + } + if in_interval(-PI / 2.0, center_param.theta1, theta2) || in_interval(3.0 * PI / 2.0, center_param.theta1, theta2) { + bounding_box = extend_bounding_box(Some(bounding_box), DVec2::new(center_param.center.x, center_param.center.y - ry)); + } + if in_interval(0.0, center_param.theta1, theta2) || in_interval(2.0 * PI, center_param.theta1, theta2) { + bounding_box = extend_bounding_box(Some(bounding_box), DVec2::new(center_param.center.x + rx, center_param.center.y)); + } + if in_interval(PI / 2.0, center_param.theta1, theta2) || in_interval(5.0 * PI / 2.0, center_param.theta1, theta2) { + bounding_box = extend_bounding_box(Some(bounding_box), DVec2::new(center_param.center.x, center_param.center.y + ry)); + } + expand_bounding_box(&bounding_box, 1e-11) // TODO: get rid of expansion + } else { + // TODO: don't convert to cubics + let cubics = self.arc_segment_to_cubics(PI / 16.0); + let mut bounding_box = None; + for cubic_seg in cubics { + bounding_box = Some(merge_bounding_boxes(bounding_box, &cubic_seg.bounding_box())); + } + bounding_box.unwrap_or_else(|| bounding_box_around_point(start, 0.0)) + } + } else { + extend_bounding_box(Some(bounding_box_around_point(start, 0.0)), end) + } + } + } + } + + /// Splits the path segment at a given parameter value. + /// + /// # Arguments + /// + /// * `t` - A value between 0.0 and 1.0 representing the split point along the segment. + /// + /// # Returns + /// + /// A tuple of two `PathSegment`s representing the parts before and after the split point. + /// + /// # Examples + /// + /// ``` + /// use path_bool::PathSegment; + /// use glam::DVec2; + /// + /// let line = PathSegment::Line(DVec2::new(0.0, 0.0), DVec2::new(2.0, 2.0)); + /// let (first_half, second_half) = line.split_at(0.5); + /// assert_eq!(first_half.end(), DVec2::new(1.0, 1.0)); + /// assert_eq!(second_half.start(), DVec2::new(1.0, 1.0)); + /// ``` + pub fn split_at(&self, t: f64) -> (PathSegment, PathSegment) { + match *self { + PathSegment::Line(start, end) => { + let p = start.lerp(end, t); + (PathSegment::Line(start, p), PathSegment::Line(p, end)) + } + PathSegment::Cubic(p0, p1, p2, p3) => { + let p01 = p0.lerp(p1, t); + let p12 = p1.lerp(p2, t); + let p23 = p2.lerp(p3, t); + let p012 = p01.lerp(p12, t); + let p123 = p12.lerp(p23, t); + let p = p012.lerp(p123, t); + + (PathSegment::Cubic(p0, p01, p012, p), PathSegment::Cubic(p, p123, p23, p3)) + } + PathSegment::Quadratic(p0, p1, p2) => { + let p01 = p0.lerp(p1, t); + let p12 = p1.lerp(p2, t); + let p = p01.lerp(p12, t); + + (PathSegment::Quadratic(p0, p01, p), PathSegment::Quadratic(p, p12, p2)) + } + PathSegment::Arc(start, _, _, _, _, _, end) => { + if let Some(center_param) = self.arc_segment_to_center() { + let mid_delta_theta = center_param.delta_theta * t; + let seg1 = PathArcSegmentCenterParametrization { + delta_theta: mid_delta_theta, + ..center_param + } + .arc_segment_from_center(Some(start), None); + let seg2 = PathArcSegmentCenterParametrization { + theta1: center_param.theta1 + mid_delta_theta, + delta_theta: center_param.delta_theta - mid_delta_theta, + ..center_param + } + .arc_segment_from_center(None, Some(end)); + (seg1, seg2) + } else { + // https://svgwg.org/svg2-draft/implnote.html#ArcCorrectionOutOfRangeRadii + let p = start.lerp(end, t); + (PathSegment::Line(start, p), PathSegment::Line(p, end)) + } + } + } + } +} diff --git a/libraries/path-bool/src/path_boolean.rs b/libraries/path-bool/src/path_boolean.rs new file mode 100644 index 00000000..138bf0b6 --- /dev/null +++ b/libraries/path-bool/src/path_boolean.rs @@ -0,0 +1,1858 @@ +//! Implements boolean operations on paths using graph-based algorithms. +//! +//! This module uses concepts from graph theory to efficiently perform boolean +//! operations on complex paths. The main algorithms involve creating a graph +//! representation of the paths, simplifying this graph, and then working with +//! its dual graph to determine the result of the boolean operation. +//! +//! ## Graph Minor +//! +//! A graph minor is a simplified version of a graph, obtained by contracting edges +//! (merging connected vertices) and removing isolated vertices. In the context of +//! path boolean operations, we use a graph minor to simplify the initial graph +//! representation of the paths. This simplification involves: +//! +//! 1. Merging collinear segments into single edges. +//! 2. Removing vertices that don't represent significant features (like intersections +//! or endpoints). +//! +//! The resulting graph minor preserves the topological structure of the paths while +//! reducing computational complexity. +//! +//! For more information on graph minors, see: +//! +//! +//! ## Dual Graph +//! +//! The dual graph is a graph derived from another graph (the primal graph). In the +//! context of path boolean operations, we construct the dual graph as follows: +//! +//! 1. Each face (region) in the primal graph becomes a vertex in the dual graph. +//! 2. Each edge in the primal graph becomes an edge in the dual graph, connecting +//! the vertices that represent the faces on either side of the original edge. +//! +//! The dual graph allows us to efficiently determine which regions are inside or +//! outside the original paths, which is crucial for performing boolean operations. +//! +//! For more information on dual graphs, see: +//! +//! +//! ## Algorithm Overview +//! +//! The boolean operation algorithm follows these main steps: +//! +//! 1. Create a graph representation of both input paths (MajorGraph). +//! 2. Simplify this graph to create a graph minor (MinorGraph). +//! 3. Construct the dual graph of the MinorGraph. +//! 4. Use the dual graph to determine which regions should be included in the result, +//! based on the specific boolean operation being performed. +//! 5. Reconstruct the resulting path(s) from the selected regions. +//! +//! This approach allows for efficient and accurate boolean operations, even on +//! complex paths with many intersections or self-intersections. + +use slotmap::{new_key_type, SlotMap}; + +new_key_type! { + pub struct MajorVertexKey; + pub struct MajorEdgeKey; + pub struct MinorVertexKey; + pub struct MinorEdgeKey; + pub struct DualVertexKey; + pub struct DualEdgeKey; +} +// Copyright 2024 Adam Platkevič +// +// SPDX-License-Identifier: MIT + +use crate::aabb::{bounding_box_around_point, bounding_box_max_extent, merge_bounding_boxes, Aabb}; +use crate::epsilons::Epsilons; +use crate::intersection_path_segment::{path_segment_intersection, segments_equal}; +use crate::path::Path; +use crate::path_cubic_segment_self_intersection::path_cubic_segment_self_intersection; +use crate::path_segment::PathSegment; +#[cfg(feature = "logging")] +use crate::path_to_path_data; +use crate::quad_tree::QuadTree; +use glam::DVec2; +use std::cmp::Ordering; +use std::collections::{HashMap, HashSet, VecDeque}; + +/// Represents the types of boolean operations that can be performed on paths. +#[derive(Debug, Clone, Copy)] +pub enum PathBooleanOperation { + /// Computes the union of two paths. + /// + /// The result contains all areas that are inside either path A or path B (or both). + /// This operation is useful for combining shapes or creating complex outlines. + Union, + + /// Computes the difference between two paths (A minus B). + /// + /// The result contains all areas that are inside path A but not inside path B. + /// This operation is useful for cutting holes or subtracting shapes from each other. + Difference, + + /// Computes the intersection of two paths. + /// + /// The result contains only the areas that are inside both path A and path B. + /// This operation is useful for finding overlapping regions between shapes. + Intersection, + + /// Computes the symmetric difference (exclusive or) of two paths. + /// + /// The result contains areas that are inside either path A or path B, but not in both. + /// This operation is useful for creating non-overlapping regions or finding boundaries. + Exclusion, + + /// Divides the first path using the second path as a "knife". + /// + /// This operation splits path A wherever it intersects with path B, but keeps all + /// parts of path A. It's useful for creating segments or partitioning shapes. + Division, + + /// Breaks both paths into separate pieces where they intersect. + /// + /// This operation splits both path A and path B at their intersection points, + /// resulting in all possible non-overlapping segments from both paths. + /// It's useful for creating detailed breakdowns of overlapping shapes. + Fracture, +} + +/// Specifies how to determine the "inside" of a path for filling. +#[derive(Debug, Clone, Copy)] +pub enum FillRule { + /// A point is inside if a ray from the point to infinity crosses an odd number of path segments. + NonZero, + /// A point is inside if a ray from the point to infinity crosses an even number of path segments. + EvenOdd, +} + +const INTERSECTION_TREE_DEPTH: usize = 8; +const POINT_TREE_DEPTH: usize = 8; + +pub const EPS: Epsilons = Epsilons { + point: 1e-5, + linear: 1e-4, + param: 1e-8, +}; + +type MajorGraphEdgeStage1 = (PathSegment, u8); +type MajorGraphEdgeStage2 = (PathSegment, u8, Aabb); + +#[derive(Debug, Clone)] +pub struct MajorGraphEdge { + seg: PathSegment, + parent: u8, + incident_vertices: [MajorVertexKey; 2], + direction_flag: Direction, + twin: Option, +} + +#[derive(Debug, Clone, Default)] +pub struct MajorGraphVertex { + #[cfg_attr(not(feature = "logging"), expect(dead_code))] + pub point: DVec2, + outgoing_edges: Vec, +} + +/// Represents the initial graph structure used in boolean operations. +/// +/// This graph contains all segments from both input paths. +#[derive(Debug, Clone)] +struct MajorGraph { + edges: SlotMap, + vertices: SlotMap, +} + +#[derive(Debug, Clone, PartialEq)] +struct MinorGraphEdge { + segments: Vec, + parent: u8, + incident_vertices: [MinorVertexKey; 2], + direction_flag: Direction, + twin: Option, +} + +impl MinorGraphEdge { + fn start_segment(&self) -> PathSegment { + let segment = self.segments[0]; + match self.direction_flag { + Direction::Forward => segment, + Direction::Backwards => segment.reverse(), + } + } +} +// Compares Segments based on their derivative at the start. If the derivative +// is equal, check the curvature instead. This should correctly sort most instances. +fn compare_segments(a: &PathSegment, b: &PathSegment) -> Ordering { + let angle_a = a.start_angle(); + let angle_b = b.start_angle(); + + // Normalize angles to [0, 2π) + let angle_a = (angle_a * 1000.).round() / 1000.; + let angle_b = (angle_b * 1000.).round() / 1000.; + + // Compare angles first + match angle_b.partial_cmp(&angle_a) { + Some(Ordering::Equal) => { + // If angles are equal (or very close), compare curvatures + let curvature_a = a.start_curvature(); + let curvature_b = b.start_curvature(); + curvature_a.partial_cmp(&curvature_b).unwrap_or(Ordering::Equal) + } + Some(ordering) => ordering, + None => Ordering::Equal, // Handle NaN cases + } +} + +impl PartialOrd for MinorGraphEdge { + fn partial_cmp(&self, other: &Self) -> Option { + Some(compare_segments(&self.start_segment(), &other.start_segment())) + } +} + +#[derive(Debug, Clone, Default)] +struct MinorGraphVertex { + outgoing_edges: Vec, +} + +#[derive(Debug, Clone)] +struct MinorGraphCycle { + segments: Vec, + parent: u8, + direction_flag: Direction, +} + +/// Represents a simplified graph structure derived from the MajorGraph. +/// +/// This graph combines collinear segments and removes unnecessary vertices. +#[derive(Debug, Clone)] +struct MinorGraph { + edges: SlotMap, + vertices: SlotMap, + cycles: Vec, +} + +#[derive(Debug, Clone, PartialEq)] +struct DualGraphHalfEdge { + segments: Vec, + parent: u8, + incident_vertex: DualVertexKey, + direction_flag: Direction, + twin: Option, +} + +#[derive(Debug, Clone, PartialEq, Eq, Hash)] +struct DualGraphVertex { + incident_edges: Vec, +} + +/// Represents a component in the dual graph. +/// +/// A component is a connected subset of the dual graph, typically corresponding +/// to a distinct region in the original paths. +#[derive(Debug, Clone)] +struct DualGraphComponent { + edges: Vec, + vertices: Vec, + outer_face: Option, +} + +/// Represents the dual graph of the MinorGraph. +/// +/// In this graph, faces of the MinorGraph become vertices, and edges represent +/// adjacency between faces. This structure is crucial for determining the +/// inside/outside regions of the paths. +#[derive(Debug, Clone)] +struct DualGraph { + components: Vec, + edges: SlotMap, + vertices: SlotMap, +} + +/// Represents the hierarchical nesting of regions in the paths. +/// +/// This tree structure captures how different regions of the paths are contained +/// within each other +#[derive(Debug, Clone)] +struct NestingTree { + component: DualGraphComponent, + outgoing_edges: HashMap>, +} + +#[cfg(feature = "logging")] +fn major_graph_to_dot(graph: &MajorGraph) -> String { + let mut dot = String::from("digraph {\n"); + for (vertex_key, vertex) in &graph.vertices { + dot.push_str(&format!(" {:?} [label=\"{:.1},{:.1}\"]\n", (vertex_key.0.as_ffi() & 0xFF), vertex.point.x, vertex.point.y)); + } + for (_, edge) in &graph.edges { + dot.push_str(&format!( + " {:?} -> {:?}: {:0b}\n", + (edge.incident_vertices[0].0.as_ffi() & 0xFF), + (edge.incident_vertices[1].0.as_ffi() & 0xFF), + edge.parent + )); + } + dot.push_str("}\n"); + dot +} + +#[cfg(feature = "logging")] +fn minor_graph_to_dot(edges: &SlotMap) -> String { + let mut dot = String::from("digraph {\n"); + for edge in edges.values() { + dot.push_str(&format!( + " {:?} -> {:?}: {:0b}\n", + (edge.incident_vertices[0].0.as_ffi() & 0xFF), + (edge.incident_vertices[1].0.as_ffi() & 0xFF), + edge.parent + )); + } + dot.push_str("}\n"); + dot +} + +#[cfg(feature = "logging")] +fn dual_graph_to_dot(components: &[DualGraphComponent], edges: &SlotMap) -> String { + let mut dot = String::from("strict graph {\n"); + for component in components { + for &edge_key in &component.edges { + let edge = &edges[edge_key]; + dot.push_str(&format!( + " {:?} -- {:?}\n", + (edge.incident_vertex.0.as_ffi() & 0xFF), + (edges[edge.twin.unwrap()].incident_vertex.0.as_ffi() & 0xFF) + )); + } + } + dot.push_str("}\n"); + dot +} + +fn segment_to_edge(parent: u8) -> impl Fn(&PathSegment) -> Option { + move |seg| { + if bounding_box_max_extent(&seg.bounding_box()) < EPS.point { + return None; + } + + match seg { + // Convert Line Segments expressed as cubic beziers to proper line segments + PathSegment::Cubic(start, _, _, end) => { + let direction = seg.sample_at(0.1); + if (*end - *start).angle_to(direction - *start).abs() < EPS.point * 4. { + Some((PathSegment::Line(*start, *end), parent)) + } else { + Some((*seg, parent)) + } + } + seg => Some((*seg, parent)), + } + } +} + +fn split_at_self_intersections(edges: &mut Vec) { + let mut new_edges = Vec::new(); + for (seg, parent) in edges.iter_mut() { + if let PathSegment::Cubic(..) = seg { + if let Some(intersection) = path_cubic_segment_self_intersection(seg) { + let mut intersection = intersection; + if intersection[0] > intersection[1] { + intersection.swap(0, 1); + } + let [t1, t2] = intersection; + if (t1 - t2).abs() < EPS.param { + let (seg1, seg2) = seg.split_at(t1); + *seg = seg1; + new_edges.push((seg2, *parent)); + } else { + let (seg1, tmp_seg) = seg.split_at(t1); + let (seg2, seg3) = &tmp_seg.split_at((t2 - t1) / (1.0 - t1)); + *seg = seg1; + new_edges.push((*seg2, *parent)); + new_edges.push((*seg3, *parent)); + } + } + } + } + edges.extend(new_edges); +} + +/// Splits path segments at their intersections with other segments. +/// +/// This function performs the following steps: +/// 1. Computes bounding boxes for all input edges. +/// 2. Creates a spatial index (quad tree) of edges for efficient intersection checks. +/// 3. For each edge: +/// a. Finds potential intersecting edges using the spatial index. +/// b. Computes precise intersections with these candidates. +/// c. Records the intersection points as split locations. +/// 4. Splits the original edges at the recorded intersection points. +/// 5. Returns the split edges along with an overall bounding box. +/// +/// The function uses an epsilon value to handle floating-point imprecision +/// when determining if intersections occur at endpoints. +/// +/// # Arguments +/// +/// * `edges` - A slice of initial path segments (MajorGraphEdgeStage1). +/// +/// # Returns +/// +/// A tuple containing: +/// * A vector of split edges (MajorGraphEdgeStage2). +/// * An optional overall bounding box (AaBb) for all edges. +fn split_at_intersections(edges: &[MajorGraphEdgeStage1]) -> (Vec, Option) { + // Step 1: Add bounding boxes to edges + let with_bounding_box: Vec = edges.iter().map(|(seg, parent)| (*seg, *parent, seg.bounding_box())).collect(); + + // Step 2: Calculate total bounding box + let total_bounding_box = with_bounding_box.iter().fold(None, |acc, (_, _, bb)| Some(merge_bounding_boxes(acc, bb))); + + let total_bounding_box = match total_bounding_box { + Some(bb) => bb, + None => return (Vec::new(), None), + }; + + // Step 3: Create edge tree for efficient intersection checks + let mut edge_tree = QuadTree::new(total_bounding_box, INTERSECTION_TREE_DEPTH, 8); + + let mut splits_per_edge: HashMap> = HashMap::new(); + + fn add_split(splits_per_edge: &mut HashMap>, i: usize, t: f64) { + splits_per_edge.entry(i).or_default().push(t); + } + + // Step 4: Find intersections and record split points + for (i, edge) in with_bounding_box.iter().enumerate() { + let candidates = edge_tree.find(&edge.2); + for &j in &candidates { + let candidate: &(PathSegment, u8) = &edges[j]; + let include_endpoints = edge.1 != candidate.1 || !(candidate.0.end().abs_diff_eq(edge.0.start(), EPS.point) || candidate.0.start().abs_diff_eq(edge.0.end(), EPS.point)); + let intersection = path_segment_intersection(&edge.0, &candidate.0, include_endpoints, &EPS); + for [t0, t1] in intersection { + add_split(&mut splits_per_edge, i, t0); + add_split(&mut splits_per_edge, j, t1); + } + } + edge_tree.insert(edge.2, i); + } + + // Step 5: Apply splits to create new edges + let mut new_edges = Vec::new(); + + for (i, (seg, parent, _)) in with_bounding_box.into_iter().enumerate() { + if let Some(splits) = splits_per_edge.get(&i) { + let mut splits = splits.clone(); + splits.sort_by(|a, b| a.partial_cmp(b).unwrap()); + let mut tmp_seg = seg; + let mut prev_t = 0.0; + for &t in splits.iter() { + if t > 1.0 - EPS.param { + break; + } + let tt = (t - prev_t) / (1.0 - prev_t); + prev_t = t; + if tt < EPS.param { + continue; + } + if tt > 1.0 - EPS.param { + continue; + } + let (seg1, seg2) = tmp_seg.split_at(tt); + new_edges.push((seg1, parent, seg1.bounding_box())); + tmp_seg = seg2; + } + new_edges.push((tmp_seg, parent, tmp_seg.bounding_box())); + } else { + new_edges.push((seg, parent, seg.bounding_box())); + } + } + + (new_edges, Some(total_bounding_box)) +} + +#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] +pub enum Direction { + Forward, + Backwards, +} + +impl std::ops::Neg for Direction { + type Output = Self; + + fn neg(self) -> Self::Output { + match self { + Self::Forward => Self::Backwards, + Self::Backwards => Self::Forward, + } + } +} +impl std::ops::Not for Direction { + type Output = Self; + + fn not(self) -> Self::Output { + match self { + Self::Forward => Self::Backwards, + Self::Backwards => Self::Forward, + } + } +} + +impl Direction { + pub fn forward(self) -> bool { + self == Self::Forward + } +} + +// TODO:(@TrueDoctor) Optimize this by rounding each vertex up and down and then inserting them in a hashmap. This should remove the need for bbox calculations and the quad tree +fn find_vertices(edges: &[MajorGraphEdgeStage2], bounding_box: Aabb) -> MajorGraph { + let mut vertex_tree = QuadTree::new(bounding_box, POINT_TREE_DEPTH, 8); + let mut graph = MajorGraph { + edges: SlotMap::with_key(), + vertices: SlotMap::with_key(), + }; + + let mut parents: HashMap = HashMap::new(); + + let mut vertex_pair_id_to_edges: HashMap<_, Vec<(MajorGraphEdgeStage2, MajorEdgeKey, MajorEdgeKey)>> = HashMap::new(); + + for (seg, parent, bounding_box) in edges { + let mut get_vertex = |point: DVec2| -> MajorVertexKey { + let box_around_point = bounding_box_around_point(point, EPS.point); + if let Some(&existing_vertex) = vertex_tree.find(&box_around_point).iter().next() { + existing_vertex + } else { + let vertex_key = graph.vertices.insert(MajorGraphVertex { point, outgoing_edges: Vec::new() }); + vertex_tree.insert(box_around_point, vertex_key); + vertex_key + } + }; + + let start_vertex = get_vertex(seg.start()); + let end_vertex = get_vertex(seg.end()); + + if start_vertex == end_vertex { + match seg { + PathSegment::Line(..) => continue, + PathSegment::Cubic(_, c1, c2, _) => { + if c1.abs_diff_eq(*c2, EPS.point) { + continue; + } + } + PathSegment::Quadratic(_, c, _) => { + if seg.start().abs_diff_eq(*c, EPS.point) { + continue; + } + } + PathSegment::Arc(_, _, _, _, _, false, _) => continue, + _ => {} + } + } + + let vertex_pair_id = (start_vertex.min(end_vertex), start_vertex.max(end_vertex)); + if let Some(existing_edges) = vertex_pair_id_to_edges.get(&vertex_pair_id) { + if let Some(existing_edge) = existing_edges + .iter() + .find(|(other_seg, ..)| segments_equal(seg, &other_seg.0, EPS.point) || segments_equal(&seg.reverse(), &other_seg.0, EPS.point)) + { + *parents.entry(existing_edge.1).or_default() |= parent; + *parents.entry(existing_edge.2).or_default() |= parent; + continue; + } + } + + let fwd_edge_key = graph.edges.insert(MajorGraphEdge { + seg: *seg, + parent: *parent, + incident_vertices: [start_vertex, end_vertex], + direction_flag: Direction::Forward, + twin: None, + }); + + let bwd_edge_key = graph.edges.insert(MajorGraphEdge { + seg: *seg, + parent: *parent, + incident_vertices: [end_vertex, start_vertex], + direction_flag: Direction::Backwards, + twin: Some(fwd_edge_key), + }); + + graph.edges[fwd_edge_key].twin = Some(bwd_edge_key); + + graph.vertices[start_vertex].outgoing_edges.push(fwd_edge_key); + graph.vertices[end_vertex].outgoing_edges.push(bwd_edge_key); + + vertex_pair_id_to_edges + .entry(vertex_pair_id) + .or_default() + .push(((*seg, *parent, *bounding_box), fwd_edge_key, bwd_edge_key)); + } + for (edge_key, parent) in parents { + graph.edges[edge_key].parent |= parent; + } + + graph +} + +fn get_order(vertex: &MajorGraphVertex) -> usize { + vertex.outgoing_edges.len() +} + +/// Computes the minor graph from the major graph. +/// +/// This function simplifies the graph structure by performing the following steps: +/// 1. Iterates through vertices of the major graph. +/// 2. For vertices with exactly two edges (degree 2): +/// a. Combines the two edges into a single edge if they have the same parent. +/// b. Updates the endpoints of the new edge to skip the current vertex. +/// 3. For vertices with degree != 2: +/// a. Creates a new vertex in the minor graph. +/// b. Creates new edges in the minor graph for each outgoing edge. +/// 4. Handles any cyclic components (closed loops with no high-degree vertices). +/// +/// The resulting minor graph preserves the topological structure of the paths +/// while reducing the number of vertices and edges. +/// +/// # Arguments +/// +/// * `major_graph` - A reference to the MajorGraph. +/// +/// # Returns +/// +/// A new MinorGraph representing the simplified structure. +fn compute_minor(major_graph: &MajorGraph) -> MinorGraph { + let mut new_edges = SlotMap::with_key(); + let mut new_vertices = SlotMap::with_key(); + let mut to_minor_vertex = HashMap::new(); + let mut id_to_edge = HashMap::new(); + let mut visited = HashSet::new(); + + // Handle components that are not cycles + for (major_vertex_key, vertex) in &major_graph.vertices { + // Edges are contracted + if get_order(vertex) == 2 { + continue; + } + let start_vertex = *to_minor_vertex + .entry(major_vertex_key) + .or_insert_with(|| new_vertices.insert(MinorGraphVertex { outgoing_edges: Vec::new() })); + + for &start_edge_key in &vertex.outgoing_edges { + let mut segments = Vec::new(); + let mut edge_key = start_edge_key; + let mut edge = &major_graph.edges[edge_key]; + + while edge.parent == major_graph.edges[start_edge_key].parent + && edge.direction_flag == major_graph.edges[start_edge_key].direction_flag + && get_order(&major_graph.vertices[edge.incident_vertices[1]]) == 2 + { + segments.push(edge.seg); + visited.insert(edge.incident_vertices[1]); + let next_vertex = &major_graph.vertices[edge.incident_vertices[1]]; + // choose the edge which is not our twin so we can make progress + edge_key = *next_vertex.outgoing_edges.iter().find(|&&e| Some(e) != edge.twin).unwrap(); + edge = &major_graph.edges[edge_key]; + } + segments.push(edge.seg); + + let end_vertex = *to_minor_vertex + .entry(edge.incident_vertices[1]) + .or_insert_with(|| new_vertices.insert(MinorGraphVertex { outgoing_edges: Vec::new() })); + assert!(major_graph.edges[start_edge_key].twin.is_some()); + assert!(edge.twin.is_some()); + + let edge_id = (start_edge_key, edge_key); + let twin_id = (edge.twin.unwrap(), major_graph.edges[start_edge_key].twin.unwrap()); + + let twin_key = id_to_edge.get(&twin_id); + + let new_edge_key = new_edges.insert(MinorGraphEdge { + segments, + parent: major_graph.edges[start_edge_key].parent, + incident_vertices: [start_vertex, end_vertex], + direction_flag: major_graph.edges[start_edge_key].direction_flag, + twin: twin_key.copied(), + }); + if let Some(&twin_key) = twin_key { + new_edges[twin_key].twin = Some(new_edge_key); + } + id_to_edge.insert(edge_id, new_edge_key); + new_vertices[start_vertex].outgoing_edges.push(new_edge_key); + } + } + + // Handle cyclic components (if any) + let mut cycles = Vec::new(); + for (major_vertex_key, vertex) in &major_graph.vertices { + if vertex.outgoing_edges.len() != 2 || visited.contains(&major_vertex_key) { + continue; + } + let mut edge_key = vertex.outgoing_edges[0]; + let mut edge = &major_graph.edges[edge_key]; + let mut cycle = MinorGraphCycle { + segments: Vec::new(), + parent: edge.parent, + direction_flag: edge.direction_flag, + }; + loop { + cycle.segments.push(edge.seg); + visited.insert(edge.incident_vertices[0]); + assert_eq!(major_graph.vertices[edge.incident_vertices[1]].outgoing_edges.len(), 2, "Found an unvisited vertex of order != 2."); + let next_vertex = &major_graph.vertices[edge.incident_vertices[1]]; + edge_key = *next_vertex.outgoing_edges.iter().find(|&&e| Some(e) != edge.twin).unwrap(); + edge = &major_graph.edges[edge_key]; + if edge.incident_vertices[0] == major_vertex_key { + break; + } + } + cycles.push(cycle); + } + + MinorGraph { + edges: new_edges, + vertices: new_vertices, + cycles, + } +} + +fn remove_dangling_edges(graph: &mut MinorGraph) { + // Basically DFS for each parent with bfs number + fn walk(parent: u8, graph: &MinorGraph) -> HashSet { + let mut kept_vertices = HashSet::new(); + let mut vertex_to_level = HashMap::new(); + + fn visit( + vertex: MinorVertexKey, + incoming_edge: Option, + level: usize, + graph: &MinorGraph, + vertex_to_level: &mut HashMap, + kept_vertices: &mut HashSet, + parent: u8, + ) -> usize { + if let Some(&existing_level) = vertex_to_level.get(&vertex) { + return existing_level; + } + vertex_to_level.insert(vertex, level); + + let mut min_level = usize::MAX; + for &edge_key in &graph.vertices[vertex].outgoing_edges { + let edge = &graph.edges[edge_key]; + if edge.parent & parent != 0 && Some(edge_key) != incoming_edge { + min_level = min_level.min(visit(edge.incident_vertices[1], edge.twin, level + 1, graph, vertex_to_level, kept_vertices, parent)); + } + } + + if min_level <= level { + kept_vertices.insert(vertex); + } + + min_level + } + + for edge in graph.edges.values() { + if edge.parent & parent != 0 { + visit(edge.incident_vertices[0], None, 0, graph, &mut vertex_to_level, &mut kept_vertices, parent); + } + } + + kept_vertices + } + + let kept_vertices_a = walk(1, graph); + let kept_vertices_b = walk(2, graph); + + graph.vertices.retain(|k, _| kept_vertices_a.contains(&k) || kept_vertices_b.contains(&k)); + + for vertex in graph.vertices.values_mut() { + vertex.outgoing_edges.retain(|&edge_key| { + let edge = &graph.edges[edge_key]; + (edge.parent & 1 == 1 && kept_vertices_a.contains(&edge.incident_vertices[0]) && kept_vertices_a.contains(&edge.incident_vertices[1])) + || (edge.parent & 2 == 2 && kept_vertices_b.contains(&edge.incident_vertices[0]) && kept_vertices_b.contains(&edge.incident_vertices[1])) + }); + } + // TODO(@TrueDoctor): merge + graph.edges.retain(|_, edge| { + (edge.parent & 1 == 1 && kept_vertices_a.contains(&edge.incident_vertices[0]) && kept_vertices_a.contains(&edge.incident_vertices[1])) + || (edge.parent & 2 == 2 && kept_vertices_b.contains(&edge.incident_vertices[0]) && kept_vertices_b.contains(&edge.incident_vertices[1])) + }); +} + +fn get_incidence_angle(edge: &MinorGraphEdge) -> f64 { + let seg = &edge.segments[0]; // TODO: explain in comment why this is always the incident one in both fwd and bwd + + // eprintln!("{edge:?}"); //, edge.direction_flag.forward()); + let (p0, p1) = if edge.direction_flag.forward() { + (seg.sample_at(0.0), seg.sample_at(EPS.param)) + } else { + (seg.sample_at(1.0), seg.sample_at(1.0 - EPS.param)) + }; + + // eprintln!("{p0:?} {p1:?}"); + let angle = (p1.y - p0.y).atan2(p1.x - p0.x); + // eprintln!("angle: {}", angle); + (angle * 10000.).round() / 1000. +} + +fn sort_outgoing_edges_by_angle(graph: &mut MinorGraph) { + for (vertex_key, vertex) in graph.vertices.iter_mut() { + if vertex.outgoing_edges.len() > 2 { + vertex.outgoing_edges.sort_by(|&a, &b| { + // TODO(@TrueDoctor): Make more robust. The js version seems to sort the data slightly differently when the angles are reallly close. In that case put the edge wich was discovered later first. + let new = graph.edges[a].partial_cmp(&graph.edges[b]).unwrap(); + let old = (get_incidence_angle(&graph.edges[a]) - (a.0.as_ffi() & 0xFFFFFF) as f64 / 1000000.) + .partial_cmp(&(get_incidence_angle(&graph.edges[b]) - (b.0.as_ffi() & 0xFFFFFF) as f64 / 1000000.)) + .unwrap_or(b.cmp(&a)); + if new != old { + // dbg!(new, old, a, b); + } + new + }); + if cfg!(feature = "logging") { + eprintln!("Outgoing edges for {:?}:", vertex_key); + for &edge_key in &vertex.outgoing_edges { + let edge = &graph.edges[edge_key]; + let angle = edge.start_segment().start_angle(); + eprintln!("{:?}: {}°", edge_key.0, angle.to_degrees()) + } + } + } + } +} + +fn face_to_polygon(face: &DualGraphVertex, edges: &SlotMap) -> Vec { + const CNT: usize = 3; + // #[cfg(feature = "logging")] + // eprintln!("incident node counts {}", face.incident_edges.len()); + + face.incident_edges + .iter() + .flat_map(|&edge_key| { + let edge = &edges[edge_key]; + // eprintln!("{}", path_to_path_data(&edge.segments, 0.001)); + edge.segments.iter().flat_map(move |seg| { + (0..CNT).map(move |i| { + let t0 = i as f64 / CNT as f64; + let t = if edge.direction_flag.forward() { t0 } else { 1.0 - t0 }; + seg.sample_at(t) + }) + }) + }) + .collect() +} + +fn interval_crosses_point(a: f64, b: f64, p: f64) -> bool { + let dy1 = a >= p; + let dy2 = b < p; + dy1 == dy2 +} + +fn line_segment_intersects_horizontal_ray(a: DVec2, b: DVec2, point: DVec2) -> bool { + if !interval_crosses_point(a.y, b.y, point.y) { + return false; + } + let x = crate::math::lin_map(point.y, a.y, b.y, a.x, b.x); + x >= point.x +} + +fn compute_point_winding(polygon: &[DVec2], tested_point: DVec2) -> i32 { + if polygon.len() <= 2 { + return 0; + } + let mut prev_point = polygon[polygon.len() - 1]; + let mut winding = 0; + for &point in polygon { + if line_segment_intersects_horizontal_ray(prev_point, point, tested_point) { + winding += if point.y > prev_point.y { -1 } else { 1 }; + } + prev_point = point; + } + winding +} + +fn compute_winding(face: &DualGraphVertex, edges: &SlotMap) -> Option { + let polygon = face_to_polygon(face, edges); + + for i in 0..polygon.len() { + let a = polygon[i]; + let b = polygon[(i + 1) % polygon.len()]; + let c = polygon[(i + 2) % polygon.len()]; + let center = (a + b + c) / 3.; + let winding = compute_point_winding(&polygon, center); + if winding != 0 { + return Some(winding); + } + } + + None +} + +fn compute_signed_area(face: &DualGraphVertex, edges: &SlotMap) -> f64 { + let polygon = face_to_polygon(face, edges); + if polygon.len() <= 4 { + return -1.; + } + + #[cfg(feature = "logging")] + eprintln!("vertex: {:?}", face); + #[cfg(feature = "logging")] + for point in &polygon { + eprintln!("{}, {}", point.x, point.y); + } + let mut area = 0.; + + for i in 0..polygon.len() { + let a = polygon[i]; + let b = polygon[(i + 1) % polygon.len()]; + area += a.x * b.y; + area -= b.x * a.y; + // let center = (a + b + c) / 3.; + // let winding = compute_point_winding(&polygon, center); + // if winding != 0 { + // return (winding, center); + // } + } + + #[cfg(feature = "logging")] + eprintln!("winding: {}", area); + area + + // panic!("No ear in polygon found."); +} + +/// Computes the dual graph from the minor graph. +/// +/// This function creates the dual graph by following these steps: +/// 1. Initializes empty structures for dual graph vertices and edges. +/// 2. For each edge in the minor graph: +/// a. Creates a new face (dual vertex) if not already created. +/// b. Traverses around the face, creating dual edges for each minor edge. +/// c. Connects dual edges to their twins (edges representing the same minor edge). +/// 3. Handles special cases like isolated cycles. +/// 4. Groups dual graph elements into connected components. +/// 5. Determines the outer face for each component. +/// +/// The dual graph represents faces of the minor graph as vertices and adjacencies +/// between faces as edges, effectively flipping the concepts of vertices and faces. +/// +/// # Arguments +/// +/// * `minor_graph` - A reference to the MinorGraph. +/// +/// # Returns +/// +/// A Result containing either the computed DualGraph or a BooleanError if the +/// operation cannot be completed successfully. +fn compute_dual(minor_graph: &MinorGraph) -> Result { + let mut new_vertices: Vec = Vec::new(); + let mut minor_to_dual_edge: HashMap = HashMap::new(); + let mut dual_edges = SlotMap::with_key(); + let mut dual_vertices = SlotMap::with_key(); + + for (start_edge_key, start_edge) in &minor_graph.edges { + #[cfg(feature = "logging")] + eprintln!("Processing start edge: {}", (start_edge_key.0.as_ffi() & 0xFF)); + if minor_to_dual_edge.contains_key(&start_edge_key) { + continue; + } + + let face_key = dual_vertices.insert(DualGraphVertex { incident_edges: Vec::new() }); + + let mut edge_key = start_edge_key; + let mut edge = start_edge; + + loop { + #[cfg(feature = "logging")] + eprintln!("Processing edge: {}", (edge_key.0.as_ffi() & 0xFF)); + let twin = edge.twin.expect("Edge doesn't have a twin"); + let twin_dual_key = minor_to_dual_edge.get(&twin).copied(); + + let new_edge_key = dual_edges.insert(DualGraphHalfEdge { + segments: edge.segments.clone(), + parent: edge.parent, + incident_vertex: face_key, + direction_flag: edge.direction_flag, + twin: twin_dual_key, + }); + + if let Some(twin_key) = twin_dual_key { + dual_edges[twin_key].twin = Some(new_edge_key); + } + + minor_to_dual_edge.insert(edge_key, new_edge_key); + + dual_vertices[face_key].incident_edges.push(new_edge_key); + + edge_key = get_next_edge(edge_key, minor_graph); + #[cfg(feature = "logging")] + eprintln!("Next edge: {}", (edge_key.0.as_ffi() & 0xFF)); + edge = &minor_graph.edges[edge_key]; + + if edge.incident_vertices[0] == start_edge.incident_vertices[0] { + break; + } + } + + new_vertices.push(face_key); + } + + for cycle in &minor_graph.cycles { + let inner_face_key = dual_vertices.insert(DualGraphVertex { incident_edges: Vec::new() }); + let outer_face_key = dual_vertices.insert(DualGraphVertex { incident_edges: Vec::new() }); + + let inner_half_edge_key = dual_edges.insert(DualGraphHalfEdge { + segments: cycle.segments.clone(), + parent: cycle.parent, + incident_vertex: inner_face_key, + direction_flag: cycle.direction_flag, + twin: None, + }); + + let outer_half_edge_key = dual_edges.insert(DualGraphHalfEdge { + segments: cycle.segments.iter().cloned().rev().collect(), + parent: cycle.parent, + incident_vertex: outer_face_key, + direction_flag: !cycle.direction_flag, + twin: Some(inner_half_edge_key), + }); + + dual_edges[inner_half_edge_key].twin = Some(outer_half_edge_key); + dual_vertices[inner_face_key].incident_edges.push(inner_half_edge_key); + dual_vertices[outer_face_key].incident_edges.push(outer_half_edge_key); + new_vertices.push(inner_face_key); + new_vertices.push(outer_face_key); + } + + let mut components = Vec::new(); + let mut visited_vertices = HashSet::new(); + let mut visited_edges = HashSet::new(); + + if cfg!(feature = "logging") { + // eeprintln!("minor_to_dual: {:#?}", minor_to_dual_edge); + eprintln!("faces: {}, dual-edges: {}, cycles: {}", new_vertices.len(), dual_edges.len(), minor_graph.cycles.len()) + } + + // This can be very useful for debugging: + // Copy the face outlines to a file called faces_combined.csv and then use this + // gnuplot command: + // `plot 'faces_combined.csv' i 0:99 w l, 'faces_combined.csv' index 0 w l lc 'red'` + // the first part of the command plots all faces to the graph and the second comand + // plots one surface, specifed by the index, in red. This allows you to check if all surfaces are closed paths and can be used in conjunction with the flag debugging to identify issues later down the line as well + #[cfg(feature = "logging")] + for (vertex_key, vertex) in &dual_vertices { + eprintln!("\n\n#{:?}", vertex_key.0); + let polygon = face_to_polygon(vertex, &dual_edges); + for point in polygon.iter() { + eprintln!("{}, {}", point.x, point.y); + } + eprintln!("{}, {}", polygon[0].x, polygon[0].y); + } + + for &start_vertex_key in &new_vertices { + if visited_vertices.contains(&start_vertex_key) { + continue; + } + + let mut component_vertices = Vec::new(); + let mut component_edges = Vec::new(); + + let mut stack = vec![start_vertex_key]; + while let Some(vertex_key) = stack.pop() { + if visited_vertices.insert(vertex_key) { + component_vertices.push(vertex_key); + } + + for &edge_key in &dual_vertices[vertex_key].incident_edges { + if !visited_edges.insert(edge_key) { + continue; + } + + let edge = &dual_edges[edge_key]; + let twin_key = edge.twin.expect("Edge doesn't have a twin."); + component_edges.push(edge_key); + component_edges.push(twin_key); + visited_edges.insert(twin_key); + stack.push(dual_edges[twin_key].incident_vertex); + } + } + #[cfg(feature = "logging")] + eprintln!("component_vertices: {}", component_vertices.len()); + + let windings: Option> = component_vertices + .iter() + .map(|face_key| compute_winding(&dual_vertices[*face_key], &dual_edges).map(|w| (face_key, w))) + .collect(); + let Some(windings) = windings else { + return Err(BooleanError::NoEarInPolygon); + }; + + let areas: Vec<_> = component_vertices + .iter() + .map(|face_key| (face_key, compute_signed_area(&dual_vertices[*face_key], &dual_edges))) + .collect(); + #[cfg(feature = "logging")] + dbg!(&areas); + + #[cfg(feature = "logging")] + if cfg!(feature = "logging") { + eprintln!( + "{}", + dual_graph_to_dot( + &[DualGraphComponent { + vertices: component_vertices.clone(), + edges: component_edges.clone(), + outer_face: None, + }], + &dual_edges, + ) + ); + } + + let mut count = windings.iter().filter(|(_, winding)| winding < &0).count(); + let mut reverse_winding = false; + // If the paths are reversed use positive winding as outer face + if windings.len() > 2 && count == windings.len() - 1 { + count = 1; + reverse_winding = true; + } + let outer_face_key = if count != 1 { + // return Err(BooleanError::MultipleOuterFaces); + #[cfg(feature = "logging")] + eprintln!("Found multiple outer faces: {areas:?}, falling back to area calculation"); + let (key, _) = *areas.iter().max_by_key(|(_, area)| ((area.abs() * 1000.) as u64)).unwrap(); + *key + } else { + *windings.iter().find(|(&_, winding)| (winding < &0) ^ reverse_winding).expect("No outer face of a component found.").0 + }; + #[cfg(feature = "logging")] + dbg!(outer_face_key); + + components.push(DualGraphComponent { + vertices: component_vertices, + edges: component_edges, + outer_face: Some(outer_face_key), + }); + } + + Ok(DualGraph { + vertices: dual_vertices, + edges: dual_edges, + components, + }) +} + +fn get_next_edge(edge_key: MinorEdgeKey, graph: &MinorGraph) -> MinorEdgeKey { + let edge = &graph.edges[edge_key]; + let vertex = &graph.vertices[edge.incident_vertices[1]]; + #[cfg(feature = "logging")] + eprintln!("{edge_key:?}, twin: {:?}, {:?}", edge.twin, vertex.outgoing_edges); + let index = vertex.outgoing_edges.iter().position(|&e| Some(edge_key) == graph.edges[e].twin).unwrap(); + vertex.outgoing_edges[(index + 1) % vertex.outgoing_edges.len()] +} + +fn test_inclusion(a: &DualGraphComponent, b: &DualGraphComponent, edges: &SlotMap, vertices: &SlotMap) -> Option { + let tested_point = edges[a.edges[0]].segments[0].start(); + for (face_key, face) in b.vertices.iter().map(|&key| (key, &vertices[key])) { + if Some(face_key) == b.outer_face { + continue; + } + let mut count = 0; + for &edge_key in &face.incident_edges { + let edge = &edges[edge_key]; + for seg in &edge.segments { + count += path_segment_horizontal_ray_intersection_count(seg, tested_point); + } + } + if count % 2 == 1 { + return Some(face_key); + } + } + None +} +fn bounding_box_intersects_horizontal_ray(bounding_box: &Aabb, point: DVec2) -> bool { + interval_crosses_point(bounding_box.top, bounding_box.bottom, point[1]) && bounding_box.right >= point[0] +} + +struct IntersectionSegment { + bounding_box: Aabb, + seg: PathSegment, +} + +pub fn path_segment_horizontal_ray_intersection_count(orig_seg: &PathSegment, point: DVec2) -> usize { + let total_bounding_box = orig_seg.bounding_box(); + + if !bounding_box_intersects_horizontal_ray(&total_bounding_box, point) { + return 0; + } + + let mut segments = vec![IntersectionSegment { + bounding_box: total_bounding_box, + seg: *orig_seg, + }]; + let mut count = 0; + + while !segments.is_empty() { + let mut next_segments = Vec::new(); + for segment in segments { + if bounding_box_max_extent(&segment.bounding_box) < EPS.linear { + if line_segment_intersects_horizontal_ray(segment.seg.start(), segment.seg.end(), point) { + count += 1; + } + } else { + let split = &segment.seg.split_at(0.5); + let bounding_box0 = split.0.bounding_box(); + let bounding_box1 = split.1.bounding_box(); + + if bounding_box_intersects_horizontal_ray(&bounding_box0, point) { + next_segments.push(IntersectionSegment { + bounding_box: bounding_box0, + seg: split.0, + }); + } + if bounding_box_intersects_horizontal_ray(&bounding_box1, point) { + next_segments.push(IntersectionSegment { + bounding_box: bounding_box1, + seg: split.1, + }); + } + } + } + segments = next_segments; + } + + count +} + +/// Computes the nesting tree of the dual graph components. +/// +/// This function builds a hierarchical structure representing how the components +/// of the dual graph are nested within each other. It does this by: +/// 1. Initializing an empty list of top-level nesting trees. +/// 2. For each component in the dual graph: +/// a. Tests for inclusion against existing nesting trees. +/// b. If included in an existing tree, recursively inserts it at the appropriate level. +/// c. If not included, creates a new top-level tree. +/// d. Checks if any existing trees should become children of the new tree. +/// 3. Continues this process until all components are placed in the nesting structure. +/// +/// The resulting nesting tree captures the containment relationships between +/// different regions of the original paths. +/// +/// # Arguments +/// +/// * `dual_graph` - A reference to the DualGraph. +/// +/// # Returns +/// +/// A vector of NestingTree structures representing the top-level components and their nested subcomponents. +fn compute_nesting_tree(DualGraph { components, vertices, edges }: &DualGraph) -> Vec { + let mut nesting_trees = Vec::new(); + + for component in components { + insert_component(&mut nesting_trees, component, edges, vertices); + } + + nesting_trees +} + +fn insert_component(trees: &mut Vec, component: &DualGraphComponent, edges: &SlotMap, vertices: &SlotMap) { + for tree in trees.iter_mut() { + if let Some(face_key) = test_inclusion(component, &tree.component, edges, vertices) { + if let Some(children) = tree.outgoing_edges.get_mut(&face_key) { + insert_component(children, component, edges, vertices); + } else { + tree.outgoing_edges.insert( + face_key, + vec![NestingTree { + component: component.clone(), + outgoing_edges: HashMap::new(), + }], + ); + } + return; + } + } + + let mut new_tree = NestingTree { + component: component.clone(), + outgoing_edges: HashMap::new(), + }; + + let mut i = 0; + while i < trees.len() { + if let Some(face_key) = test_inclusion(&trees[i].component, &new_tree.component, edges, vertices) { + // TODO: (@TrueDoctor) use swap remove + let tree = trees.remove(i); + new_tree.outgoing_edges.entry(face_key).or_default().push(tree); + } else { + i += 1; + } + } + + trees.push(new_tree); +} + +fn get_flag(count: i32, fill_rule: FillRule) -> u8 { + match fill_rule { + FillRule::NonZero => { + if count == 0 { + 0 + } else { + 1 + } + } + FillRule::EvenOdd => (count % 2).unsigned_abs() as u8, + } +} + +/// Determines which faces should be included in the result based on the boolean operation. +/// +/// This function applies the specified boolean operation and fill rules to decide +/// which regions of the dual graph should be part of the resulting path. +fn flag_faces( + nesting_trees: &[NestingTree], + a_fill_rule: FillRule, + b_fill_rule: FillRule, + edges: &SlotMap, + vertices: &SlotMap, + flags: &mut HashMap, +) { + for tree in nesting_trees.iter() { + let mut tree_stack = vec![(tree, 0, 0)]; + + while let Some((current_tree, a_running_count, b_running_count)) = tree_stack.pop() { + let mut visited_faces = HashSet::new(); + let mut face_stack = VecDeque::new(); + + let outer_face_key = current_tree.component.outer_face.expect("Component doesn't have an outer face."); + face_stack.push_back((outer_face_key, a_running_count, b_running_count)); + + while let Some((face_key, a_count, b_count)) = face_stack.pop_front() { + if visited_faces.contains(&face_key) { + continue; + } + visited_faces.insert(face_key); + + // dbg!(face_key, a_count, b_count); + let a_flag = get_flag(a_count, a_fill_rule); + let b_flag = get_flag(b_count, b_fill_rule); + *flags.entry(face_key).or_default() = a_flag | (b_flag << 1); + + for edge_key in &vertices[face_key].incident_edges { + let edge = &edges[*edge_key]; + let twin_key = edge.twin.expect("Edge doesn't have a twin"); + #[cfg(feature = "logging")] + eprintln!("Processing edge: {:?} to: {:?}", edge_key.0, edges[twin_key].incident_vertex.0); + let mut next_a_count = a_count; + if edge.parent & 1 != 0 { + next_a_count += if edge.direction_flag.forward() { 1 } else { -1 }; + } + let mut next_b_count = b_count; + if edge.parent & 2 != 0 { + next_b_count += if edge.direction_flag.forward() { 1 } else { -1 }; + } + #[cfg(feature = "logging")] + eprintln!("next_count a: {}, b:{}", next_a_count, next_b_count); + face_stack.push_back((edges[twin_key].incident_vertex, next_a_count, next_b_count)); + } + + // Collect subtrees to be processed later + if let Some(subtrees) = current_tree.outgoing_edges.get(&face_key) { + for subtree in subtrees { + tree_stack.push((subtree, a_count, b_count)); + } + } + } + } + } +} + +fn get_selected_faces<'a>(predicate: &'a impl Fn(u8) -> bool, flags: &'a HashMap) -> impl Iterator + 'a { + flags.iter().filter_map(|(key, &flag)| predicate(flag).then_some(*key)) +} + +fn walk_faces<'a>(faces: &'a HashSet, edges: &SlotMap, vertices: &SlotMap) -> impl Iterator + 'a { + let is_removed_edge = |edge: &DualGraphHalfEdge| faces.contains(&edge.incident_vertex) == faces.contains(&edges[edge.twin.unwrap()].incident_vertex); + + let mut edge_to_next = HashMap::new(); + for face_key in faces { + let face = &vertices[*face_key]; + let mut prev_edge = *face.incident_edges.last().unwrap(); + for &edge in &face.incident_edges { + edge_to_next.insert(prev_edge, edge); + prev_edge = edge; + } + } + + let mut visited_edges = HashSet::new(); + let mut result = Vec::new(); + + for &face_key in faces { + let face = &vertices[face_key]; + for &start_edge in &face.incident_edges { + if is_removed_edge(&edges[start_edge]) || visited_edges.contains(&start_edge) { + continue; + } + let mut edge = start_edge; + loop { + let current_edge = &edges[edge]; + if current_edge.direction_flag.forward() { + result.extend(current_edge.segments.iter().cloned()); + } else { + result.extend(current_edge.segments.iter().map(PathSegment::reverse)); + } + visited_edges.insert(edge); + edge = *edge_to_next.get(&edge).unwrap(); + while is_removed_edge(&edges[edge]) { + edge = *edge_to_next.get(&edges[edge].twin.unwrap()).unwrap(); + } + if edge == start_edge { + break; + } + } + } + } + + result.into_iter() +} + +/// Reconstructs the resulting path(s) from the selected faces of the dual graph. +/// +/// This function takes the faces that were flagged for inclusion and reconstructs +/// the path segments that form the boundaries of these faces, resulting in the +/// final output of the boolean operation. +fn dump_faces( + nesting_trees: &[NestingTree], + predicate: impl Fn(u8) -> bool + Copy, + edges: &SlotMap, + vertices: &SlotMap, + flags: &HashMap, +) -> Vec { + let mut paths = Vec::new(); + + fn visit( + tree: &NestingTree, + predicate: impl Fn(u8) -> bool + Copy, + paths: &mut Vec, + edges: &SlotMap, + vertices: &SlotMap, + flags: &HashMap, + ) { + for &face_key in tree.component.vertices.iter() { + let face = &vertices[face_key]; + let flag = flags[&face_key]; + if !predicate(flag) || Some(face_key) == tree.component.outer_face { + continue; + } + + let mut path = Vec::new(); + + for &edge_key in &face.incident_edges { + let edge = &edges[edge_key]; + if edge.direction_flag.forward() { + path.extend(edge.segments.iter().cloned()); + } else { + path.extend(edge.segments.iter().map(PathSegment::reverse)); + } + } + + // poke holes in the face + if let Some(subtrees) = tree.outgoing_edges.get(&face_key) { + for subtree in subtrees { + let outer_face_key = subtree.component.outer_face.unwrap(); + for &edge_key in &vertices[outer_face_key].incident_edges { + let edge = &edges[edge_key]; + if edge.direction_flag.forward() { + path.extend(edge.segments.iter().cloned()); + } else { + path.extend(edge.segments.iter().map(PathSegment::reverse)); + } + } + } + } + + paths.push(path); + } + + for subtrees in tree.outgoing_edges.values() { + for subtree in subtrees { + visit(subtree, predicate, paths, edges, vertices, flags); + } + } + } + + for tree in nesting_trees { + visit(tree, predicate, &mut paths, edges, vertices, flags); + } + + paths +} + +const OPERATION_PREDICATES: [fn(u8) -> bool; 6] = [ + |flag: u8| flag > 0, // Union + |flag: u8| flag == 1, // Difference + |flag: u8| flag == 0b11, // Intersection + |flag: u8| flag == 1 || flag == 2, // Exclusion + |flag: u8| (flag & 1) == 1, // Division + |flag: u8| flag > 0, // Fracture +]; + +// TODO: Impl error trait +/// Represents errors that can occur during boolean operations on paths. +#[derive(Debug)] +pub enum BooleanError { + /// Indicates that multiple outer faces were found where only one was expected. + MultipleOuterFaces, + /// Indicates that no valid ear was found in a polygon during triangulation. + NoEarInPolygon, +} + +/// Performs boolean operations on two paths. +/// +/// Takes two paths, applies specified fill rules, and performs a boolean operation, +/// returning the resulting path(s). +/// +/// # Examples +/// +/// ``` +/// use path_bool::{path_boolean, FillRule, PathBooleanOperation, path_from_path_data, path_to_path_data}; +/// +/// let path_a = path_from_path_data("M 10 10 L 50 10 L 30 40 Z"); +/// let path_b = path_from_path_data("M 20 30 L 60 30 L 60 50 L 20 50 Z"); +/// +/// let result = path_boolean( +/// &path_a, +/// FillRule::NonZero, +/// &path_b, +/// FillRule::NonZero, +/// PathBooleanOperation::Intersection +/// ).unwrap(); +/// +/// let result_data = path_to_path_data(&result[0], 0.001); +/// assert_eq!(result_data, "M 36.666666666667,30.000000000000 L 23.333333333333,30.000000000000 L 30.000000000000,40.000000000000 L 36.666666666667,30.000000000000 Z"); +/// ``` +/// +/// # Operations +/// +/// The function supports various boolean operations: +/// - Union +/// - Difference +/// - Intersection +/// - Exclusion +/// - Division +/// - Fracture +/// +/// See [`PathBooleanOperation`] for more details on each operation. +/// +/// # Algorithm +/// +/// The boolean operation is performed in several steps: +/// +/// 1. Preprocessing: Convert input paths to edges and split at intersections. +/// 2. Graph Construction: Build a graph representation of path segments. +/// 3. Intersection Analysis: Compute intersections between path segments. +/// 4. Graph Transformation: Convert the initial graph into the graph minor using edge contractions. +/// 5. Nesting Analysis: Determine nesting relationships between path parts. +/// 6. Boolean Evaluation: Apply the specified operation based on nesting. +/// 7. Result Construction: Generate final path(s) based on the operation result. +/// +/// # Errors +/// +/// Returns a [`BooleanError`] if: +/// - Input paths are invalid or cannot be processed. +/// - The operation encounters an unsolvable geometric configuration. +/// - Issues arise in determining the nesting structure of the paths. +pub fn path_boolean(a: &Path, a_fill_rule: FillRule, b: &Path, b_fill_rule: FillRule, op: PathBooleanOperation) -> Result, BooleanError> { + let mut unsplit_edges: Vec = a.iter().map(segment_to_edge(1)).chain(b.iter().map(segment_to_edge(2))).flatten().collect(); + + split_at_self_intersections(&mut unsplit_edges); + + let (split_edges, total_bounding_box) = split_at_intersections(&unsplit_edges); + + #[cfg(feature = "logging")] + for (edge, _, _) in split_edges.iter() { + // eprintln!("{}", edge.format_path()); + eprintln!("{}", path_to_path_data(&vec![*edge], 0.001)); + } + + let total_bounding_box = match total_bounding_box { + Some(bb) => bb, + None => return Ok(Vec::new()), // input geometry is empty + }; + + let major_graph = find_vertices(&split_edges, total_bounding_box); + + #[cfg(feature = "logging")] + eprintln!("Major graph:"); + #[cfg(feature = "logging")] + eprintln!("{}", major_graph_to_dot(&major_graph)); + + let mut minor_graph = compute_minor(&major_graph); + + #[cfg(feature = "logging")] + eprintln!("Minor graph:"); + #[cfg(feature = "logging")] + eprintln!("{}", minor_graph_to_dot(&minor_graph.edges)); + + remove_dangling_edges(&mut minor_graph); + #[cfg(feature = "logging")] + eprintln!("After removing dangling edges:"); + #[cfg(feature = "logging")] + eprintln!("{}", minor_graph_to_dot(&minor_graph.edges)); + + #[cfg(feature = "logging")] + for (key, edge) in minor_graph.edges.iter() { + // eprintln!("{}", edge.format_path()); + eprintln!("{key:?}:\n{}", path_to_path_data(&edge.segments, 0.001)); + } + #[cfg(feature = "logging")] + for vertex in minor_graph.vertices.values() { + eprintln!("{:?}", vertex); + } + sort_outgoing_edges_by_angle(&mut minor_graph); + #[cfg(feature = "logging")] + for vertex in minor_graph.vertices.values() { + eprintln!("{:?}", vertex); + } + + for (edge_key, edge) in &minor_graph.edges { + assert!(minor_graph.vertices.contains_key(edge.incident_vertices[0]), "Edge {:?} has invalid start vertex", edge_key); + assert!(minor_graph.vertices.contains_key(edge.incident_vertices[1]), "Edge {:?} has invalid end vertex", edge_key); + assert!(edge.twin.is_some(), "Edge {:?} should have a twin", edge_key); + let twin = &minor_graph.edges[edge.twin.unwrap()]; + assert_eq!(twin.twin.unwrap(), edge_key, "Twin relationship should be symmetrical for edge {:?}", edge_key); + } + + let dual_graph = compute_dual(&minor_graph)?; + + let nesting_trees = compute_nesting_tree(&dual_graph); + + #[cfg(feature = "logging")] + for tree in &nesting_trees { + eprintln!("nesting_trees: {:?}", tree); + } + + let DualGraph { edges, vertices, .. } = &dual_graph; + + #[cfg(feature = "logging")] + eprintln!("Dual Graph:"); + #[cfg(feature = "logging")] + eprintln!("{}", dual_graph_to_dot(&dual_graph.components, edges)); + + let mut flags = HashMap::new(); + flag_faces(&nesting_trees, a_fill_rule, b_fill_rule, edges, vertices, &mut flags); + + #[cfg(feature = "logging")] + for (face, flag) in &flags { + eprintln!("{:?}: {:b}", face.0, flag); + } + + let predicate = OPERATION_PREDICATES[op as usize]; + + match op { + PathBooleanOperation::Division | PathBooleanOperation::Fracture => Ok(dump_faces(&nesting_trees, predicate, edges, vertices, &flags)), + _ => { + let selected_faces: HashSet = get_selected_faces(&predicate, &flags).collect(); + Ok(vec![walk_faces(&selected_faces, edges, vertices).collect()]) + } + } +} + +#[cfg(test)] +mod tests { + use std::f64::consts::TAU; + + use super::*; + use glam::DVec2; // Assuming DVec2 is defined in your crate + + #[test] + fn test_split_at_intersections() { + let unsplit_edges = unsplit_edges(); + let (split_edges, total_bounding_box) = split_at_intersections(&unsplit_edges); + + // Check that we have a valid bounding box + assert!(total_bounding_box.is_some()); + + // Check that we have more edges after splitting (due to intersections) + assert!(split_edges.len() >= unsplit_edges.len()); + + // Check that all edges have a valid bounding box + for (_, _, bb) in &split_edges { + assert!(bb.left <= bb.right); + assert!(bb.top <= bb.bottom); + } + + // You might want to add more specific checks based on the expected behavior + // of your split_at_intersections function + } + + fn unsplit_edges() -> Vec<(PathSegment, u8)> { + let unsplit_edges = vec![ + (PathSegment::Arc(DVec2::new(39.0, 20.0), 19.0, 19.0, 0.0, false, true, DVec2::new(20.0, 39.0)), 1), + (PathSegment::Arc(DVec2::new(20.0, 39.0), 19.0, 19.0, 0.0, false, true, DVec2::new(1.0, 20.0)), 1), + (PathSegment::Arc(DVec2::new(1.0, 20.0), 19.0, 19.0, 0.0, false, true, DVec2::new(20.0, 1.0)), 1), + (PathSegment::Arc(DVec2::new(20.0, 1.0), 19.0, 19.0, 0.0, false, true, DVec2::new(39.0, 20.0)), 1), + (PathSegment::Arc(DVec2::new(47.0, 28.0), 19.0, 19.0, 0.0, false, true, DVec2::new(28.0, 47.0)), 2), + (PathSegment::Arc(DVec2::new(28.0, 47.0), 19.0, 19.0, 0.0, false, true, DVec2::new(9.0, 28.0)), 2), + (PathSegment::Arc(DVec2::new(9.0, 28.0), 19.0, 19.0, 0.0, false, true, DVec2::new(28.0, 9.0)), 2), + (PathSegment::Arc(DVec2::new(28.0, 9.0), 19.0, 19.0, 0.0, false, true, DVec2::new(47.0, 28.0)), 2), + ]; + unsplit_edges + } + + #[test] + fn test_compute_minor() { + // Set up the initial graph + let unsplit_edges = unsplit_edges(); + let (split_edges, total_bounding_box) = split_at_intersections(&unsplit_edges); + let major_graph = find_vertices(&split_edges, total_bounding_box.unwrap()); + + // Compute minor graph + let minor_graph = compute_minor(&major_graph); + + // Print minor graph state + // eprintln!("Minor Graph:"); + print_minor_graph_state(&minor_graph); + + // Assertions + assert_eq!(minor_graph.edges.len(), 8, "Expected 8 edges in minor graph"); + assert_eq!(minor_graph.vertices.len(), 2, "Expected 2 vertices in minor graph"); + assert!(minor_graph.cycles.is_empty(), "Expected no cycles in minor graph"); + + // Check that each vertex has 4 outgoing edges + for (vertex_key, vertex) in &minor_graph.vertices { + assert_eq!(vertex.outgoing_edges.len(), 4, "Vertex {:?} should have 4 outgoing edges", vertex_key); + } + + // Check that all edges have valid incident vertices and twins + for (edge_key, edge) in &minor_graph.edges { + assert!(minor_graph.vertices.contains_key(edge.incident_vertices[0]), "Edge {:?} has invalid start vertex", edge_key); + assert!(minor_graph.vertices.contains_key(edge.incident_vertices[1]), "Edge {:?} has invalid end vertex", edge_key); + assert!(edge.twin.is_some(), "Edge {:?} should have a twin", edge_key); + let twin = &minor_graph.edges[edge.twin.unwrap()]; + assert_eq!(twin.twin.unwrap(), edge_key, "Twin relationship should be symmetrical for edge {:?}", edge_key); + } + + // Check that parents are correctly assigned + assert_eq!(minor_graph.edges.values().filter(|e| e.parent == 1).count(), 4, "Expected 4 edges with parent 1"); + assert_eq!(minor_graph.edges.values().filter(|e| e.parent == 2).count(), 4, "Expected 4 edges with parent 2"); + } + + fn print_minor_graph_state(graph: &MinorGraph) { + eprintln!(" Vertices: {}", graph.vertices.len()); + eprintln!(" Edges: {}", graph.edges.len()); + eprintln!(" Cycles: {}", graph.cycles.len()); + + for (vertex_key, vertex) in &graph.vertices { + eprintln!(" Vertex {:?}: {} outgoing edges", vertex_key, vertex.outgoing_edges.len()); + } + + for (edge_key, edge) in &graph.edges { + eprintln!(" Edge {:?}:", edge_key); + eprintln!(" Parent: {}", edge.parent); + eprintln!(" Twin: {:?}", edge.twin); + eprintln!(" Incident vertices: {:?}", edge.incident_vertices); + } + } + + #[test] + fn test_sort_outgoing_edges_by_angle() { + // Set up the initial graph + let unsplit_edges = unsplit_edges(); + let (split_edges, total_bounding_box) = split_at_intersections(&unsplit_edges); + let major_graph = find_vertices(&split_edges, total_bounding_box.unwrap()); + let mut minor_graph = compute_minor(&major_graph); + + // Print initial state + eprintln!("Initial Minor Graph:"); + print_minor_graph_state(&minor_graph); + + // Store initial edge order + let initial_edge_order: HashMap> = minor_graph.vertices.iter().map(|(k, v)| (k, v.outgoing_edges.clone())).collect(); + + // Apply sort_outgoing_edges_by_angle + sort_outgoing_edges_by_angle(&mut minor_graph); + + // Print final state + eprintln!("\nAfter sort_outgoing_edges_by_angle:"); + print_minor_graph_state(&minor_graph); + + // Assertions + assert_eq!(minor_graph.edges.len(), 8, "Number of edges should remain unchanged"); + assert_eq!(minor_graph.vertices.len(), 2, "Number of vertices should remain unchanged"); + assert!(minor_graph.cycles.is_empty(), "Expected no cycles"); + + // Check that each vertex still has 4 outgoing edges + for (vertex_key, vertex) in &minor_graph.vertices { + assert_eq!(vertex.outgoing_edges.len(), 4, "Vertex {:?} should have 4 outgoing edges", vertex_key); + } + + // Check that the edges are sorted by angle + for (vertex_key, vertex) in &minor_graph.vertices { + let angles: Vec = vertex.outgoing_edges.iter().map(|&edge_key| get_incidence_angle(&minor_graph.edges[edge_key])).collect(); + + // Check if angles are in ascending order + for i in 1..angles.len() { + assert!(angles[i] >= angles[i - 1], "Edges for vertex {:?} are not sorted by angle {} {}", vertex_key, angles[i], angles[i - 1]); + } + + // Check that the set of edges is the same as before, just in different order + let initial_edges: HashSet<_> = initial_edge_order[&vertex_key].iter().collect(); + let sorted_edges: HashSet<_> = vertex.outgoing_edges.iter().collect(); + assert_eq!(initial_edges, sorted_edges, "Set of edges for vertex {:?} changed after sorting", vertex_key); + } + + // Check that all edges still have valid incident vertices and twins + for (edge_key, edge) in &minor_graph.edges { + assert!(minor_graph.vertices.contains_key(edge.incident_vertices[0]), "Edge {:?} has invalid start vertex", edge_key); + assert!(minor_graph.vertices.contains_key(edge.incident_vertices[1]), "Edge {:?} has invalid end vertex", edge_key); + assert!(edge.twin.is_some(), "Edge {:?} should have a twin", edge_key); + let twin = &minor_graph.edges[edge.twin.unwrap()]; + assert_eq!(twin.twin.unwrap(), edge_key, "Twin relationship should be symmetrical for edge {:?}", edge_key); + } + } + + fn get_incidence_angle(edge: &MinorGraphEdge) -> f64 { + let seg = &edge.segments[0]; // First segment is always the incident one in both fwd and bwd + let (p0, p1) = if edge.direction_flag.forward() { + (seg.sample_at(0.0), seg.sample_at(0.1)) + } else { + (seg.sample_at(1.0), seg.sample_at(1.0 - 0.1)) + }; + ((p1.y - p0.y).atan2(p1.x - p0.x) + TAU) % TAU + } + + #[test] + fn test_path_segment_horizontal_ray_intersection_count() { + let orig_seg = PathSegment::Arc(DVec2::new(24.0, 10.090978), 13.909023, 13.909023, 0.0, false, true, DVec2::new(47., 24.0)); + + let point = DVec2::new(37.99, 24.0); + + eprintln!("Starting test with segment: {:?}", orig_seg); + eprintln!("Test point: {:?}", point); + + let count = path_segment_horizontal_ray_intersection_count(&orig_seg, point); + + eprintln!("Final intersection count: {}", count); + + let expected_count = 1; + assert_eq!(count, expected_count, "Intersection count mismatch"); + } + + #[test] + fn test_bounding_box_intersects_horizontal_ray() { + let bbox = Aabb { + top: 10.0, + right: 40.0, + bottom: 30.0, + left: 20.0, + }; + + assert!(bounding_box_intersects_horizontal_ray(&bbox, DVec2::new(0.0, 30.0))); + assert!(bounding_box_intersects_horizontal_ray(&bbox, DVec2::new(20.0, 30.0))); + assert!(bounding_box_intersects_horizontal_ray(&bbox, DVec2::new(10.0, 20.0))); + assert!(!bounding_box_intersects_horizontal_ray(&bbox, DVec2::new(30.0, 40.0))); + } +} diff --git a/libraries/path-bool/src/util/aabb.rs b/libraries/path-bool/src/util/aabb.rs new file mode 100644 index 00000000..a8d8f79c --- /dev/null +++ b/libraries/path-bool/src/util/aabb.rs @@ -0,0 +1,64 @@ +use glam::DVec2; + +#[derive(Clone, Copy, Debug, PartialEq)] +pub(crate) struct Aabb { + pub top: f64, + pub right: f64, + pub bottom: f64, + pub left: f64, +} + +pub(crate) fn bounding_boxes_overlap(a: &Aabb, b: &Aabb) -> bool { + a.left <= b.right && b.left <= a.right && a.top <= b.bottom && b.top <= a.bottom +} + +pub(crate) fn merge_bounding_boxes(a: Option, b: &Aabb) -> Aabb { + match a { + Some(a) => Aabb { + top: a.top.min(b.top), + right: a.right.max(b.right), + bottom: a.bottom.max(b.bottom), + left: a.left.min(b.left), + }, + None => *b, + } +} + +pub(crate) fn extend_bounding_box(bounding_box: Option, point: DVec2) -> Aabb { + match bounding_box { + Some(bb) => Aabb { + top: bb.top.min(point.y), + right: bb.right.max(point.x), + bottom: bb.bottom.max(point.y), + left: bb.left.min(point.x), + }, + None => Aabb { + top: point.y, + right: point.x, + bottom: point.y, + left: point.x, + }, + } +} + +pub(crate) fn bounding_box_max_extent(bounding_box: &Aabb) -> f64 { + (bounding_box.right - bounding_box.left).max(bounding_box.bottom - bounding_box.top) +} + +pub(crate) fn bounding_box_around_point(point: DVec2, padding: f64) -> Aabb { + Aabb { + top: point.y - padding, + right: point.x + padding, + bottom: point.y + padding, + left: point.x - padding, + } +} + +pub(crate) fn expand_bounding_box(bounding_box: &Aabb, padding: f64) -> Aabb { + Aabb { + top: bounding_box.top - padding, + right: bounding_box.right + padding, + bottom: bounding_box.bottom + padding, + left: bounding_box.left - padding, + } +} diff --git a/libraries/path-bool/src/util/epsilons.rs b/libraries/path-bool/src/util/epsilons.rs new file mode 100644 index 00000000..aed8ca27 --- /dev/null +++ b/libraries/path-bool/src/util/epsilons.rs @@ -0,0 +1,6 @@ +#[derive(Clone, Copy, Debug)] +pub struct Epsilons { + pub point: f64, + pub linear: f64, + pub param: f64, +} diff --git a/libraries/path-bool/src/util/math.rs b/libraries/path-bool/src/util/math.rs new file mode 100644 index 00000000..6367d048 --- /dev/null +++ b/libraries/path-bool/src/util/math.rs @@ -0,0 +1,23 @@ +use glam::{DVec2, FloatExt}; +pub use std::f64::consts::PI; + +pub fn lin_map(value: f64, in_min: f64, in_max: f64, out_min: f64, out_max: f64) -> f64 { + ((value - in_min) / (in_max - in_min)) * (out_max - out_min) + out_min +} + +pub fn lerp(a: f64, b: f64, t: f64) -> f64 { + a.lerp(b, t) +} + +pub fn vector_angle(u: DVec2, v: DVec2) -> f64 { + const EPS: f64 = 1e-12; + + let sign = u.x * v.y - u.y * v.x; + + if sign.abs() < EPS && (u + v).length_squared() < EPS * EPS { + // TODO: u can be scaled + return PI; + } + + sign.signum() * (u.dot(v) / (u.length() * v.length())).acos() +} diff --git a/libraries/path-bool/src/util/quad_tree.rs b/libraries/path-bool/src/util/quad_tree.rs new file mode 100644 index 00000000..75fece1d --- /dev/null +++ b/libraries/path-bool/src/util/quad_tree.rs @@ -0,0 +1,121 @@ +use crate::aabb::Aabb; +use std::collections::HashSet; + +pub struct QuadTree { + bounding_box: Aabb, + depth: usize, + inner_node_capacity: usize, + subtrees: Option; 4]>>, + pairs: Vec<(Aabb, T)>, +} + +impl QuadTree { + pub fn new(bounding_box: Aabb, depth: usize, inner_node_capacity: usize) -> Self { + QuadTree { + bounding_box, + depth, + inner_node_capacity, + subtrees: None, + pairs: Vec::new(), + } + } + + pub fn insert(&mut self, bounding_box: Aabb, value: T) -> bool { + if !crate::aabb::bounding_boxes_overlap(&bounding_box, &self.bounding_box) { + return false; + } + + if self.depth > 0 && self.pairs.len() >= self.inner_node_capacity { + self.ensure_subtrees(); + for tree in self.subtrees.as_mut().unwrap().iter_mut() { + tree.insert(bounding_box, value.clone()); + } + } else { + self.pairs.push((bounding_box, value)); + } + + true + } + + pub fn find(&self, bounding_box: &Aabb) -> HashSet + where + T: Eq + std::hash::Hash + Clone, + { + let mut set = HashSet::new(); + self.find_internal(bounding_box, &mut set); + set + } + + fn find_internal(&self, bounding_box: &Aabb, set: &mut HashSet) + where + T: Eq + std::hash::Hash + Clone, + { + if !crate::aabb::bounding_boxes_overlap(bounding_box, &self.bounding_box) { + return; + } + + for (key, value) in &self.pairs { + if crate::aabb::bounding_boxes_overlap(bounding_box, key) { + set.insert(value.clone()); + } + } + + if let Some(subtrees) = &self.subtrees { + for tree in subtrees.iter() { + tree.find_internal(bounding_box, set); + } + } + } + + fn ensure_subtrees(&mut self) { + if self.subtrees.is_some() { + return; + } + + let midx = (self.bounding_box.left + self.bounding_box.right) / 2.0; + let midy = (self.bounding_box.top + self.bounding_box.bottom) / 2.0; + + self.subtrees = Some(Box::new([ + QuadTree::new( + Aabb { + top: self.bounding_box.top, + right: midx, + bottom: midy, + left: self.bounding_box.left, + }, + self.depth - 1, + self.inner_node_capacity, + ), + QuadTree::new( + Aabb { + top: self.bounding_box.top, + right: self.bounding_box.right, + bottom: midy, + left: midx, + }, + self.depth - 1, + self.inner_node_capacity, + ), + QuadTree::new( + Aabb { + top: midy, + right: midx, + bottom: self.bounding_box.bottom, + left: self.bounding_box.left, + }, + self.depth - 1, + self.inner_node_capacity, + ), + QuadTree::new( + Aabb { + top: midy, + right: self.bounding_box.right, + bottom: self.bounding_box.bottom, + left: midx, + }, + self.depth - 1, + self.inner_node_capacity, + ), + ])); + } +} diff --git a/libraries/path-bool/src/visual_tests.rs b/libraries/path-bool/src/visual_tests.rs new file mode 100644 index 00000000..3bebb92a --- /dev/null +++ b/libraries/path-bool/src/visual_tests.rs @@ -0,0 +1,183 @@ +use core::panic; +use glob::glob; +use image::{DynamicImage, GenericImageView, RgbaImage}; +use resvg::render; +use resvg::tiny_skia::Transform; +use resvg::usvg::{Options, Tree}; +use std::fs; +use std::path::PathBuf; +use svg::parser::Event; + +use crate::path_boolean::{self, FillRule, PathBooleanOperation}; +use crate::path_data::{path_from_path_data, path_to_path_data}; + +const TOLERANCE: u8 = 84; + +fn get_fill_rule(fill_rule: &str) -> FillRule { + match fill_rule { + "evenodd" => FillRule::EvenOdd, + _ => FillRule::NonZero, + } +} + +#[test] +fn visual_tests() { + let ops = [ + ("union", PathBooleanOperation::Union), + ("difference", PathBooleanOperation::Difference), + ("intersection", PathBooleanOperation::Intersection), + ("exclusion", PathBooleanOperation::Exclusion), + ("division", PathBooleanOperation::Division), + ("fracture", PathBooleanOperation::Fracture), + ]; + + let folders: Vec<(String, PathBuf, &str, PathBooleanOperation)> = glob("__fixtures__/visual-tests/*/") + .expect("Failed to read glob pattern") + .flat_map(|entry| { + let dir = entry.expect("Failed to get directory entry"); + ops.iter() + .map(move |(op_name, op)| (dir.file_name().unwrap().to_string_lossy().into_owned(), dir.clone(), *op_name, *op)) + }) + .collect(); + + let mut failure = false; + + for (name, dir, op_name, op) in folders { + let test_name = format!("{} {}", name, op_name); + println!("Running test: {}", test_name); + + fs::create_dir_all(dir.join("test-results")).expect("Failed to create test-results directory"); + + let original_path = dir.join("original.svg"); + + let mut content = String::new(); + let svg_tree = svg::open(&original_path, &mut content).expect("Failed to parse SVG"); + + let mut paths = Vec::new(); + let mut first_path_attributes = String::new(); + let mut width = String::new(); + let mut height = String::new(); + let mut view_box = String::new(); + for event in svg_tree { + match event { + Event::Tag("svg", svg::node::element::tag::Type::Start, attributes) => { + width = attributes.get("width").map(|s| s.to_string()).unwrap_or_default(); + height = attributes.get("height").map(|s| s.to_string()).unwrap_or_default(); + view_box = attributes.get("viewBox").map(|s| s.to_string()).unwrap_or_default(); + } + Event::Tag("path", svg::node::element::tag::Type::Empty, attributes) => { + let data = attributes.get("d").map(|s| s.to_string()).expect("Path data not found"); + let fill_rule = attributes.get("fill-rule").map(|v| v.to_string()).unwrap_or_else(|| "nonzero".to_string()); + paths.push((data, fill_rule)); + + // Store attributes of the first path + if first_path_attributes.is_empty() { + for (key, value) in attributes.iter() { + if key != "d" && key != "id" { + first_path_attributes.push_str(&format!("{}=\"{}\" ", key, value)); + } + } + } + } + _ => {} + } + } + + if (width.is_empty() || height.is_empty()) && !view_box.is_empty() { + let vb: Vec<&str> = view_box.split_whitespace().collect(); + if vb.len() == 4 { + width = vb[2].to_string(); + height = vb[3].to_string(); + } + } + + if width.is_empty() || height.is_empty() { + panic!("Failed to extract width and height from SVG"); + } + + let a_node = paths[0].clone(); + let b_node = paths[1].clone(); + + let a = path_from_path_data(&a_node.0); + let b = path_from_path_data(&b_node.0); + + let a_fill_rule = get_fill_rule(&a_node.1); + let b_fill_rule = get_fill_rule(&b_node.1); + + let result = path_boolean::path_boolean(&a, a_fill_rule, &b, b_fill_rule, op).unwrap(); + + // Create the result SVG with correct dimensions + let mut result_svg = format!("", width, height, view_box); + for path in &result { + result_svg.push_str(&format!("", path_to_path_data(path, 1e-4), first_path_attributes)); + } + result_svg.push_str(""); + + // Save the result SVG + let destination_path = dir.join("test-results").join(format!("{}-ours.svg", op_name)); + fs::write(&destination_path, &result_svg).expect("Failed to write result SVG"); + + // Render and compare images + let ground_truth_path = dir.join(format!("{}.svg", op_name)); + let ground_truth_svg = fs::read_to_string(&ground_truth_path).expect("Failed to read ground truth SVG"); + + let ours_image = render_svg(&result_svg); + let ground_truth_image = render_svg(&ground_truth_svg); + + let ours_png_path = dir.join("test-results").join(format!("{}-ours.png", op_name)); + ours_image.save(&ours_png_path).expect("Failed to save our PNG"); + + let ground_truth_png_path = dir.join("test-results").join(format!("{}.png", op_name)); + ground_truth_image.save(&ground_truth_png_path).expect("Failed to save ground truth PNG"); + + failure |= compare_images(&ours_image, &ground_truth_image, TOLERANCE); + + // Check the number of paths + let result_path_count = result.len(); + let ground_truth_path_count = ground_truth_svg.matches(" DynamicImage { + let opts = Options::default(); + let tree = Tree::from_str(svg_code, &opts).unwrap(); + let pixmap_size = tree.size(); + let (width, height) = (pixmap_size.width() as u32, pixmap_size.height() as u32); + let mut pixmap = resvg::tiny_skia::Pixmap::new(width, height).unwrap(); + let mut pixmap_mut = pixmap.as_mut(); + render(&tree, Transform::default(), &mut pixmap_mut); + DynamicImage::ImageRgba8(RgbaImage::from_raw(width, height, pixmap.data().to_vec()).unwrap()) +} + +fn compare_images(img1: &DynamicImage, img2: &DynamicImage, tolerance: u8) -> bool { + assert_eq!(img1.dimensions(), img2.dimensions(), "Image dimensions do not match"); + + for (x, y, pixel1) in img1.pixels() { + let pixel2 = img2.get_pixel(x, y); + for i in 0..4 { + let difference = (pixel1[i] as i32 - pixel2[i] as i32).unsigned_abs() as u8; + if difference > tolerance { + println!("Difference {} larger than tolerance {} at [{}, {}], channel {}.", difference, tolerance, x, y, i); + return true; + } + + assert!( + difference <= tolerance, + "Difference {} larger than tolerance {} at [{}, {}], channel {}.", + difference, + tolerance, + x, + y, + i + ); + } + } + false +} diff --git a/node-graph/graph-craft/src/document.rs b/node-graph/graph-craft/src/document.rs index d18fc921..61bfb4bf 100644 --- a/node-graph/graph-craft/src/document.rs +++ b/node-graph/graph-craft/src/document.rs @@ -1126,7 +1126,6 @@ impl NodeNetwork { let export: &mut NodeInput = export; let previous_export = std::mem::replace(export, NodeInput::network(concrete!(()), 0)); - println!("export {:?}", previous_export); let (tagged_value, exposed) = match previous_export { NodeInput::Value { tagged_value, exposed } => (tagged_value, exposed), NodeInput::Reflection(reflect) => match reflect { diff --git a/node-graph/gstd/Cargo.toml b/node-graph/gstd/Cargo.toml index c8ebf274..c10e3a0a 100644 --- a/node-graph/gstd/Cargo.toml +++ b/node-graph/gstd/Cargo.toml @@ -37,6 +37,7 @@ graphene-core = { path = "../gcore", default-features = false, features = [ fastnoise-lite = { workspace = true } log = { workspace = true } bezier-rs = { workspace = true, features = ["serde"] } +path-bool = { workspace = true, features = ["parsing"] } glam = { workspace = true, features = ["serde"] } node-macro = { workspace = true } rustc-hash = { workspace = true } diff --git a/node-graph/gstd/src/vector.rs b/node-graph/gstd/src/vector.rs index 774ac07a..4623b8c6 100644 --- a/node-graph/gstd/src/vector.rs +++ b/node-graph/gstd/src/vector.rs @@ -1,4 +1,4 @@ -use crate::Node; +use crate::transform::Footprint; use bezier_rs::{ManipulatorGroup, Subpath}; use graphene_core::transform::Transform; @@ -7,15 +7,17 @@ pub use graphene_core::vector::*; use graphene_core::{Color, GraphicElement, GraphicGroup}; use glam::{DAffine2, DVec2}; -#[cfg(target_arch = "wasm32")] -use wasm_bindgen::prelude::*; +use path_bool::PathBooleanOperation; +use std::ops::{Div, Mul}; -pub struct BooleanOperationNode { - operation: BooleanOp, -} +#[node_macro::node(category(""))] +async fn boolean_operation( + #[implementations((), Footprint)] footprint: F, + #[implementations(((), GraphicGroup), (Footprint, GraphicGroup))] group_of_paths: impl Node, + operation: BooleanOperation, +) -> VectorData { + let group_of_paths = group_of_paths.eval(footprint).await; -#[node_macro::old_node_fn(BooleanOperationNode)] -fn boolean_operation(group_of_paths: GraphicGroup, operation: BooleanOperation) -> VectorData { fn vector_from_image(image_frame: T) -> VectorData { let corner1 = DVec2::ZERO; let corner2 = DVec2::new(1., 1.); @@ -59,12 +61,12 @@ fn boolean_operation(group_of_paths: GraphicGroup, operation: BooleanOperation) while let Some(lower_vector_data) = next_vector_data { let transform_of_lower_into_space_of_upper = result.transform.inverse() * lower_vector_data.transform; - let upper_path_string = to_svg_string(&result, DAffine2::IDENTITY); - let lower_path_string = to_svg_string(lower_vector_data, transform_of_lower_into_space_of_upper); + let upper_path_string = to_path(&result, DAffine2::IDENTITY); + let lower_path_string = to_path(lower_vector_data, transform_of_lower_into_space_of_upper); #[allow(unused_unsafe)] let boolean_operation_string = unsafe { boolean_subtract(upper_path_string, lower_path_string) }; - let boolean_operation_result = from_svg_string(&boolean_operation_string); + let boolean_operation_result = from_path(&boolean_operation_string); result.colinear_manipulators = boolean_operation_result.colinear_manipulators; result.point_domain = boolean_operation_result.point_domain; @@ -88,12 +90,12 @@ fn boolean_operation(group_of_paths: GraphicGroup, operation: BooleanOperation) while let Some(lower_vector_data) = second_vector_data { let transform_of_lower_into_space_of_upper = result.transform.inverse() * lower_vector_data.transform; - let upper_path_string = to_svg_string(&result, DAffine2::IDENTITY); - let lower_path_string = to_svg_string(lower_vector_data, transform_of_lower_into_space_of_upper); + let upper_path_string = to_path(&result, DAffine2::IDENTITY); + let lower_path_string = to_path(lower_vector_data, transform_of_lower_into_space_of_upper); #[allow(unused_unsafe)] let boolean_operation_string = unsafe { boolean_union(upper_path_string, lower_path_string) }; - let boolean_operation_result = from_svg_string(&boolean_operation_string); + let boolean_operation_result = from_path(&boolean_operation_string); result.colinear_manipulators = boolean_operation_result.colinear_manipulators; result.point_domain = boolean_operation_result.point_domain; @@ -114,12 +116,12 @@ fn boolean_operation(group_of_paths: GraphicGroup, operation: BooleanOperation) while let Some(lower_vector_data) = second_vector_data { let transform_of_lower_into_space_of_upper = result.transform.inverse() * lower_vector_data.transform; - let upper_path_string = to_svg_string(&result, DAffine2::IDENTITY); - let lower_path_string = to_svg_string(lower_vector_data, transform_of_lower_into_space_of_upper); + let upper_path_string = to_path(&result, DAffine2::IDENTITY); + let lower_path_string = to_path(lower_vector_data, transform_of_lower_into_space_of_upper); #[allow(unused_unsafe)] let boolean_operation_string = unsafe { boolean_intersect(upper_path_string, lower_path_string) }; - let boolean_operation_result = from_svg_string(&boolean_operation_string); + let boolean_operation_result = from_path(&boolean_operation_string); result.colinear_manipulators = boolean_operation_result.colinear_manipulators; result.point_domain = boolean_operation_result.point_domain; @@ -140,12 +142,12 @@ fn boolean_operation(group_of_paths: GraphicGroup, operation: BooleanOperation) let transform_of_lower_into_space_of_upper = all_other_vector_data.transform.inverse() * lower_vector_data.transform; - let upper_path_string = to_svg_string(&all_other_vector_data, DAffine2::IDENTITY); - let lower_path_string = to_svg_string(lower_vector_data, transform_of_lower_into_space_of_upper); + let upper_path_string = to_path(&all_other_vector_data, DAffine2::IDENTITY); + let lower_path_string = to_path(lower_vector_data, transform_of_lower_into_space_of_upper); #[allow(unused_unsafe)] let boolean_intersection_string = unsafe { boolean_intersect(upper_path_string, lower_path_string) }; - let mut boolean_intersection_result = from_svg_string(&boolean_intersection_string); + let mut boolean_intersection_result = from_path(&boolean_intersection_string); boolean_intersection_result.transform = all_other_vector_data.transform; boolean_intersection_result.style = all_other_vector_data.style.clone(); @@ -153,11 +155,11 @@ fn boolean_operation(group_of_paths: GraphicGroup, operation: BooleanOperation) let transform_of_lower_into_space_of_upper = boolean_intersection_result.transform.inverse() * any_intersection.transform; - let upper_path_string = to_svg_string(&boolean_intersection_result, DAffine2::IDENTITY); - let lower_path_string = to_svg_string(&any_intersection, transform_of_lower_into_space_of_upper); + let upper_path_string = to_path(&boolean_intersection_result, DAffine2::IDENTITY); + let lower_path_string = to_path(&any_intersection, transform_of_lower_into_space_of_upper); #[allow(unused_unsafe)] - let union_result = from_svg_string(&unsafe { boolean_union(upper_path_string, lower_path_string) }); + let union_result = from_path(&unsafe { boolean_union(upper_path_string, lower_path_string) }); any_intersection = union_result; any_intersection.transform = boolean_intersection_result.transform; @@ -185,24 +187,75 @@ fn boolean_operation(group_of_paths: GraphicGroup, operation: BooleanOperation) boolean_operation_result } -fn to_svg_string(vector: &VectorData, transform: DAffine2) -> String { - let mut path = String::new(); +fn to_path(vector: &VectorData, transform: DAffine2) -> Vec { + let mut path = Vec::new(); for subpath in vector.stroke_bezier_paths() { - let _ = subpath.subpath_to_svg(&mut path, transform); + to_path_segments(&mut path, &subpath, transform); } path } -fn from_svg_string(svg_string: &str) -> VectorData { - let svg = format!(r#""#, svg_string); - let Some(tree) = usvg::Tree::from_str(&svg, &Default::default()).ok() else { - return VectorData::empty(); - }; - let Some(usvg::Node::Path(path)) = tree.root().children().first() else { - return VectorData::empty(); - }; +fn to_path_segments(path: &mut Vec, subpath: &bezier_rs::Subpath, transform: DAffine2) { + use path_bool::PathSegment; + for bezier in subpath.iter() { + const EPS: f64 = 1e-8; + let transformed = bezier.apply_transformation(|pos| transform.transform_point2(pos).mul(EPS.recip()).round().div(EPS.recip())); + let start = transformed.start; + let end = transformed.end; + let segment = match transformed.handles { + bezier_rs::BezierHandles::Linear => PathSegment::Line(start, end), + bezier_rs::BezierHandles::Quadratic { handle } => PathSegment::Quadratic(start, handle, end), + bezier_rs::BezierHandles::Cubic { handle_start, handle_end } => PathSegment::Cubic(start, handle_start, handle_end, end), + }; + path.push(segment); + } +} - VectorData::from_subpaths(convert_usvg_path(path), false) +fn from_path(path_data: &[Path]) -> VectorData { + const EPSILON: f64 = 1e-5; + + fn is_close(a: DVec2, b: DVec2) -> bool { + (a - b).length_squared() < EPSILON * EPSILON + } + + let mut all_subpaths = Vec::new(); + + for path in path_data.iter().filter(|path| !path.is_empty()) { + let cubics: Vec<[DVec2; 4]> = path.iter().map(|segment| segment.to_cubic()).collect(); + let mut groups = Vec::new(); + let mut current_start = None; + + for (index, cubic) in cubics.iter().enumerate() { + let [start, handle1, handle2, end] = *cubic; + + if current_start.is_none() || !is_close(start, current_start.unwrap()) { + // Start a new subpath + if !groups.is_empty() { + all_subpaths.push(Subpath::new(std::mem::take(&mut groups), true)); + } + // Use the correct in-handle (None) and out-handle for the start point + groups.push(ManipulatorGroup::new(start, None, Some(handle1))); + } else { + // Update the out-handle of the previous point + if let Some(last) = groups.last_mut() { + last.out_handle = Some(handle1); + } + } + + // Add the end point with the correct in-handle and out-handle (None) + groups.push(ManipulatorGroup::new(end, Some(handle2), None)); + + current_start = Some(end); + + // Check if this is the last segment + if index == cubics.len() - 1 { + all_subpaths.push(Subpath::new(groups, true)); + groups = Vec::new(); // Reset groups for the next path + } + } + } + + VectorData::from_subpaths(all_subpaths, false) } pub fn convert_usvg_path(path: &usvg::Path) -> Vec> { @@ -249,25 +302,27 @@ pub fn convert_usvg_path(path: &usvg::Path) -> Vec> { subpaths } -#[cfg(target_arch = "wasm32")] -#[wasm_bindgen(module = "/../../frontend/src/utility-functions/computational-geometry.ts")] -extern "C" { - #[wasm_bindgen(js_name = booleanUnion)] - fn boolean_union(path1: String, path2: String) -> String; - #[wasm_bindgen(js_name = booleanSubtract)] - fn boolean_subtract(path1: String, path2: String) -> String; - #[wasm_bindgen(js_name = booleanIntersect)] - fn boolean_intersect(path1: String, path2: String) -> String; +type Path = Vec; +fn boolean_union(a: Path, b: Path) -> Vec { + path_bool(a, b, PathBooleanOperation::Union) } -#[cfg(not(target_arch = "wasm32"))] -fn boolean_union(_path1: String, _path2: String) -> String { - String::from("M0,0 L1,0 L1,1 L0,1 Z") + +fn path_bool(a: Path, b: Path, op: PathBooleanOperation) -> Vec { + use path_bool::FillRule; + match path_bool::path_boolean(&a, FillRule::NonZero, &b, FillRule::NonZero, op) { + Ok(results) => results, + Err(e) => { + let a_path = path_bool::path_to_path_data(&a, 0.001); + let b_path = path_bool::path_to_path_data(&b, 0.001); + log::error!("Boolean error {e:?} encountered while processing {a_path}\n {op:?}\n {b_path}"); + Vec::new() + } + } } -#[cfg(not(target_arch = "wasm32"))] -fn boolean_subtract(_path1: String, _path2: String) -> String { - String::from("M0,0 L1,0 L1,1 L0,1 Z") + +fn boolean_subtract(a: Path, b: Path) -> Vec { + path_bool(a, b, PathBooleanOperation::Difference) } -#[cfg(not(target_arch = "wasm32"))] -fn boolean_intersect(_path1: String, _path2: String) -> String { - String::from("M0,0 L1,0 L1,1 L0,1 Z") +fn boolean_intersect(a: Path, b: Path) -> Vec { + path_bool(a, b, PathBooleanOperation::Intersection) } diff --git a/node-graph/interpreted-executor/src/node_registry.rs b/node-graph/interpreted-executor/src/node_registry.rs index 0124ea21..bbfcd182 100644 --- a/node-graph/interpreted-executor/src/node_registry.rs +++ b/node-graph/interpreted-executor/src/node_registry.rs @@ -360,7 +360,6 @@ fn node_registry() -> HashMap, input: Footprint, fn_params: [Footprint => TextureFrame]), register_node!(graphene_core::structural::ConsNode<_, _>, input: Image, params: [&str]), register_node!(graphene_std::raster::ImageFrameNode<_, _>, input: Image, params: [DAffine2]), - register_node!(graphene_std::vector::BooleanOperationNode<_>, input: GraphicGroup, fn_params: [() => graphene_core::vector::misc::BooleanOperation]), ]; let mut map: HashMap> = HashMap::new(); for (id, entry) in graphene_core::registry::NODE_REGISTRY.lock().unwrap().iter() {