Added asterix project

git-svn-id: https://asterixdb.googlecode.com/svn/trunk/asterix@12 eaa15691-b419-025a-1212-ee371bd00084
diff --git a/asterix-app/src/test/resources/fuzzyjoin/amerix/10-load-csx-small.aql b/asterix-app/src/test/resources/fuzzyjoin/amerix/10-load-csx-small.aql
new file mode 100644
index 0000000..f7dcf0e
--- /dev/null
+++ b/asterix-app/src/test/resources/fuzzyjoin/amerix/10-load-csx-small.aql
@@ -0,0 +1,20 @@
+use dataverse fuzzy1;
+
+declare type CSXType as open {
+  id: int32, 
+  csxid: string,
+  title: string,
+  authors: string,
+  misc: string
+}
+
+declare nodegroup group1 on nc1, nc2;
+
+declare dataset CSXSmall(CSXType) 
+  partitioned by key id on group1;
+
+load dataset CSXSmall 
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/fuzzyjoin/pub-small/csx-small-id.txt"),("format"="delimited-text"),("delimiter"=":")) pre-sorted;
+
+
diff --git a/asterix-app/src/test/resources/fuzzyjoin/amerix/10-load-csx.aql b/asterix-app/src/test/resources/fuzzyjoin/amerix/10-load-csx.aql
new file mode 100644
index 0000000..b5787a1
--- /dev/null
+++ b/asterix-app/src/test/resources/fuzzyjoin/amerix/10-load-csx.aql
@@ -0,0 +1,20 @@
+use dataverse fuzzy1;
+
+declare type CSXType as open {
+  id: int32, 
+  csxid: string,
+  title: string,
+  authors: string,
+  misc: string
+}
+
+declare nodegroup group1 on nc1, nc2;
+
+declare dataset CSX(CSXType) 
+  partitioned by key id on group1;
+
+load dataset CSX 
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/fuzzyjoin/pub/csx-id.txt"),("format"="delimited-text"),("delimiter"=":")) pre-sorted;
+
+
diff --git a/asterix-app/src/test/resources/fuzzyjoin/amerix/10-load-dblp.aql b/asterix-app/src/test/resources/fuzzyjoin/amerix/10-load-dblp.aql
new file mode 100644
index 0000000..3ca85bb
--- /dev/null
+++ b/asterix-app/src/test/resources/fuzzyjoin/amerix/10-load-dblp.aql
@@ -0,0 +1,20 @@
+use dataverse fuzzy1;
+
+declare type DBLPType as open {
+  id: int32, 
+  dblpid: string,
+  title: string,
+  authors: string,
+  misc: string
+}
+
+declare nodegroup group1 on nc1; 
+
+declare dataset DBLP(DBLPType) 
+  partitioned by key id on group1;
+
+load dataset DBLP 
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/fuzzyjoin/dblp/dblp-id.txt"),("format"="delimited-text"),("delimiter"=":")) pre-sorted;
+
+
diff --git a/asterix-app/src/test/resources/fuzzyjoin/amerix/20-drop-dblp.aql b/asterix-app/src/test/resources/fuzzyjoin/amerix/20-drop-dblp.aql
new file mode 100644
index 0000000..868d534
--- /dev/null
+++ b/asterix-app/src/test/resources/fuzzyjoin/amerix/20-drop-dblp.aql
@@ -0,0 +1,17 @@
+use dataverse fuzzy1;
+
+declare type DBLPType as open {
+  id: int32, 
+  dblpid: string,
+  title: string,
+  authors: string,
+  misc: string
+}
+
+declare nodegroup group1 on nc1, nc2;
+
+declare dataset DBLP(DBLPType) 
+  partitioned by key id on group1;
+
+drop dataset DBLP;
+
diff --git a/asterix-app/src/test/resources/fuzzyjoin/amerix/30-filter-dblp.aql b/asterix-app/src/test/resources/fuzzyjoin/amerix/30-filter-dblp.aql
new file mode 100644
index 0000000..45bd1c8
--- /dev/null
+++ b/asterix-app/src/test/resources/fuzzyjoin/amerix/30-filter-dblp.aql
@@ -0,0 +1,20 @@
+use dataverse fuzzy1;
+
+declare type DBLPType as open {
+  id: int32, 
+  dblpid: string,
+  title: string,
+  authors: string,
+  misc: string
+}
+
+declare nodegroup group1 on nc1, nc2;
+
+declare dataset DBLP(DBLPType) 
+  partitioned by key id on group1;
+
+write output to nc1:"/tmp/amerix.adm";
+
+for $dblp in dataset('DBLP')
+where $dblp.id = 1
+return $dblp
diff --git a/asterix-app/src/test/resources/fuzzyjoin/amerix/40-self-join-dblp.aql b/asterix-app/src/test/resources/fuzzyjoin/amerix/40-self-join-dblp.aql
new file mode 100644
index 0000000..bc024c3
--- /dev/null
+++ b/asterix-app/src/test/resources/fuzzyjoin/amerix/40-self-join-dblp.aql
@@ -0,0 +1,86 @@
+use dataverse fuzzy1;
+
+declare type DBLPType as open {
+  id: int32, 
+  dblpid: string,
+  title: string,
+  authors: string,
+  misc: string
+}
+
+declare nodegroup group1 on nc1; 
+
+declare dataset DBLP(DBLPType) 
+  partitioned by key id on group1;
+
+write output to nc1:"/tmp/amerix.adm";
+
+//
+// -- - Stage 3 - --
+//
+for $ridpair in 
+    //
+    // -- - Stage 2 - --
+    //
+    for $paperR in dataset('DBLP')
+    let $tokensR :=
+        for $word in counthashed-word-tokens($paperR.title)
+        for $token at $i in
+            //
+            // -- - Stage 1 - --
+            //
+            for $paper in dataset('DBLP')
+            for $word in counthashed-word-tokens($paper.title)
+            group by $item := $word with $paper
+            order by count($paper)
+            return $item
+        where $word = $token
+        order by $i
+        return $i
+    for $prefix_tokenR in subset-collection(
+                                $tokensR, 
+                                0,
+                                prefix-len(
+                                    len($tokensR), 'Jaccard', .8))
+
+    for $paperS in dataset('DBLP')
+    let $tokensS :=
+        for $word in counthashed-word-tokens($paperS.title)
+        for $token at $i in
+            //
+            // -- - Stage 1 - --
+            //
+            for $paper in dataset('DBLP')
+            for $word in counthashed-word-tokens($paper.title)
+            group by $item := $word with $paper
+            order by count($paper)
+            return $item
+        where $word = $token
+        order by $i
+        return $i
+    for $prefix_tokenS in subset-collection(
+                                $tokensS, 
+                                0,
+                                prefix-len(
+                                    len($tokensS), 'Jaccard', .8))
+
+    where $prefix_tokenR = $prefix_tokenS
+
+    let $sim := similarity(
+                    len(counthashed-word-tokens($paperR.title)),
+                    $tokensR,
+                    len(counthashed-word-tokens($paperS.title)),
+                    $tokensS,
+                    $prefix_tokenR,
+                    'Jaccard',
+                    .8)
+    where $sim >= .8 and $paperR.id < $paperS.id
+    group by $idR := $paperR.id, $idS := $paperS.id with $sim
+    return {'idR': $idR, 'idS': $idS, 'sim': $sim[0]}
+
+for $paperR in dataset('DBLP')
+for $paperS in dataset('DBLP')
+where $ridpair.idR = $paperR.id and $ridpair.idS = $paperS.id
+return {'R': {'dblpid': $paperR.dblpid, 'title': $paperR.title}, 
+        'S': {'dblpid': $paperS.dblpid, 'title': $paperS.title}, 
+        'sim': $ridpair.sim}
diff --git a/asterix-app/src/test/resources/fuzzyjoin/amerix/50-self-join-dblp.aql b/asterix-app/src/test/resources/fuzzyjoin/amerix/50-self-join-dblp.aql
new file mode 100644
index 0000000..eb44be7
--- /dev/null
+++ b/asterix-app/src/test/resources/fuzzyjoin/amerix/50-self-join-dblp.aql
@@ -0,0 +1,22 @@
+use dataverse fuzzy1;
+
+declare type DBLPType as open {
+  id: int32, 
+  dblpid: string,
+  title: string,
+  authors: string,
+  misc: string
+}
+
+declare nodegroup group1 on nc1, nc2;
+
+declare dataset DBLP(DBLPType) 
+  partitioned by key id on group1;
+
+write output to nc1:"/tmp/amerix.adm";
+
+for   $paperR in dataset('DBLP')
+for   $paperS in dataset('DBLP')
+where $paperR.title ~= $paperS.title
+return { 'R': $paperR,
+         'S': $paperS }
diff --git a/asterix-app/src/test/resources/fuzzyjoin/amerix/line.py b/asterix-app/src/test/resources/fuzzyjoin/amerix/line.py
new file mode 100644
index 0000000..f845bb2
--- /dev/null
+++ b/asterix-app/src/test/resources/fuzzyjoin/amerix/line.py
@@ -0,0 +1,7 @@
+
+m = 0
+for line in open('/data/fuzzyjoin/pub/csx-id.txt'):
+    l = len(line)
+    if (l > m):
+        m = l
+print m
diff --git a/asterix-app/src/test/resources/fuzzyjoin/dblp/000-1-char-at.aql b/asterix-app/src/test/resources/fuzzyjoin/dblp/000-1-char-at.aql
new file mode 100644
index 0000000..43a595d
--- /dev/null
+++ b/asterix-app/src/test/resources/fuzzyjoin/dblp/000-1-char-at.aql
@@ -0,0 +1,43 @@
+use dataverse fuzzy1;
+
+declare type DBLPType as open {
+  id: int32, 
+  dblpid: string,
+  title: string,
+  authors: string,
+  misc: string
+}
+
+declare nodegroup group1 on nc1, nc2;
+
+declare dataset DBLP(DBLPType) 
+  partitioned by key id on group1;
+
+write output to nc1:"/tmp/dblp.adm";
+
+for $paperR in dataset('DBLP')
+where $paperR.id = 1
+for $authorR in word-tokens($paperR.authors)
+for $paperS in dataset('DBLP')
+for $authorS in word-tokens($paperS.authors)
+where $authorR = $authorS
+return {'R': {'dblpid': $paperR.dblpid, 'authors': $paperR.authors}, 
+        'S': {'dblpid': $paperS.dblpid, 'authors': $paperS.authors}}
+
+/*
+java.lang.RuntimeException: java.lang.IllegalArgumentException
+        at edu.uci.ics.hyracks.control.nc.runtime.OperatorRunnable.run(OperatorRunnable.java:70)
+        at edu.uci.ics.hyracks.control.nc.Stagelet$1.run(Stagelet.java:120)
+        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
+        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
+        at java.lang.Thread.run(Thread.java:619)
+Caused by: java.lang.IllegalArgumentException
+        at edu.uci.ics.hyracks.dataflow.common.data.util.StringUtils.charAt(StringUtils.java:62)
+        at edu.uci.ics.asterix.jobgen.data.tagged.AqlSchemalessPrinterFactory$1.print(AqlSchemalessPrinterFactory.java:103)
+        at edu.uci.ics.asterix.jobgen.data.tagged.AqlSchemalessPrinterFactory$1.print(AqlSchemalessPrinterFactory.java:112)
+        at edu.uci.ics.aqua.runtime.operators.std.PrinterRuntime.printTuple(PrinterRuntime.java:90)
+        at edu.uci.ics.aqua.runtime.operators.std.PrinterRuntime.nextFrame(PrinterRuntime.java:58)
+        at edu.uci.ics.aqua.runtime.operators.base.AquaMetaOperatorDescriptor$2.nextFrame(AquaMetaOperatorDescriptor.java:123)
+        at edu.uci.ics.hyracks.control.nc.runtime.OperatorRunnable.run(OperatorRunnable.java:62)
+        ... 4 more
+*/
diff --git a/asterix-app/src/test/resources/fuzzyjoin/dblp/010-load.aql b/asterix-app/src/test/resources/fuzzyjoin/dblp/010-load.aql
new file mode 100644
index 0000000..a857935
--- /dev/null
+++ b/asterix-app/src/test/resources/fuzzyjoin/dblp/010-load.aql
@@ -0,0 +1,19 @@
+use dataverse fuzzy1;
+
+declare type DBLPType as open {
+  id: int32, 
+  dblpid: string,
+  title: string,
+  authors: string,
+  misc: string
+}
+
+declare nodegroup group1 on nc1, nc2;
+
+declare dataset DBLP(DBLPType) 
+  partitioned by key id on group1;
+
+load dataset DBLP 
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1:///asterix/asterix-app/data/dblp-small/dblp-small-id.txt"),("format"="delimited-text"),("delimiter=":")) pre-sorted;
+
diff --git a/asterix-app/src/test/resources/fuzzyjoin/dblp/020-drop.aql b/asterix-app/src/test/resources/fuzzyjoin/dblp/020-drop.aql
new file mode 100644
index 0000000..65213dd
--- /dev/null
+++ b/asterix-app/src/test/resources/fuzzyjoin/dblp/020-drop.aql
@@ -0,0 +1,16 @@
+use dataverse fuzzy1;
+
+declare type DBLPType as open {
+  id: int32, 
+  dblpid: string,
+  title: string,
+  authors: string,
+  misc: string
+}
+
+declare nodegroup group1 on nc1, nc2;
+
+declare dataset DBLP(DBLPType) 
+  partitioned by key id on group1;
+
+drop dataset DBLP;
diff --git a/asterix-app/src/test/resources/fuzzyjoin/dblp/030-filter.aql b/asterix-app/src/test/resources/fuzzyjoin/dblp/030-filter.aql
new file mode 100644
index 0000000..b539aba
--- /dev/null
+++ b/asterix-app/src/test/resources/fuzzyjoin/dblp/030-filter.aql
@@ -0,0 +1,20 @@
+use dataverse fuzzy1;
+
+declare type DBLPType as open {
+  id: int32, 
+  dblpid: string,
+  title: string,
+  authors: string,
+  misc: string
+}
+
+declare nodegroup group1 on nc1, nc2;
+
+declare dataset DBLP(DBLPType) 
+  partitioned by key id on group1;
+
+write output to nc1:'/tmp/dblp.adm';
+
+for $paper in dataset('DBLP')
+where $paper.id = 1
+return { 'dblp': $paper }
diff --git a/asterix-app/src/test/resources/fuzzyjoin/dblp/040-self-join-aql.aql b/asterix-app/src/test/resources/fuzzyjoin/dblp/040-self-join-aql.aql
new file mode 100644
index 0000000..63e1a1e
--- /dev/null
+++ b/asterix-app/src/test/resources/fuzzyjoin/dblp/040-self-join-aql.aql
@@ -0,0 +1,86 @@
+use dataverse fuzzy1;
+
+declare type DBLPType as open {
+  id: int32, 
+  dblpid: string,
+  title: string,
+  authors: string,
+  misc: string
+}
+
+declare nodegroup group1 on nc1, nc2;
+
+declare dataset DBLP(DBLPType) 
+  partitioned by key id on group1;
+
+write output to nc1:'/tmp/dblp.adm';
+
+//
+// -- - Stage 3 - --
+//
+for $ridpair in 
+    //
+    // -- - Stage 2 - --
+    //
+    for $paperR in dataset('DBLP')
+    let $tokensR :=
+        for $word in counthashed-word-tokens($paperR.title)
+        for $token at $i in
+            //
+            // -- - Stage 1 - --
+            //
+            for $paper in dataset('DBLP')
+            for $word in counthashed-word-tokens($paper.title)
+            group by $item := $word with $paper
+            order by count($paper)
+            return $item
+        where $word = $token
+        order by $i
+        return $i
+    for $prefix_tokenR in subset-collection(
+                                $tokensR, 
+                                0,
+                                prefix-len(
+                                    len($tokensR), 'Jaccard', .5))
+
+    for $paperS in dataset('DBLP')
+    let $tokensS :=
+        for $word in counthashed-word-tokens($paperS.title)
+        for $token at $i in
+            //
+            // -- - Stage 1 - --
+            //
+            for $paper in dataset('DBLP')
+            for $word in counthashed-word-tokens($paper.title)
+            group by $item := $word with $paper
+            order by count($paper)
+            return $item
+        where $word = $token
+        order by $i
+        return $i
+    for $prefix_tokenS in subset-collection(
+                                $tokensS, 
+                                0,
+                                prefix-len(
+                                    len($tokensS), 'Jaccard', .5))
+
+    where $prefix_tokenR = $prefix_tokenS
+
+    let $sim := similarity(
+                    len(counthashed-word-tokens($paperR.title)),
+                    $tokensR,
+                    len(counthashed-word-tokens($paperS.title)),
+                    $tokensS,
+                    $prefix_tokenR,
+                    'Jaccard',
+                    .5)
+    where $sim >= .5 and $paperR.id < $paperS.id
+    group by $idR := $paperR.id, $idS := $paperS.id with $sim
+    return {'idR': $idR, 'idS': $idS, 'sim': $sim[0]}
+
+for $paperR in dataset('DBLP')
+for $paperS in dataset('DBLP')
+where $ridpair.idR = $paperR.id and $ridpair.idS = $paperS.id
+return { 'R': { 'dblpid': $paperR.dblpid, 'title': $paperR.title },
+         'S': { 'dblpid': $paperS.dblpid, 'title': $paperS.title },
+         'sim': $ridpair.sim }
diff --git a/asterix-app/src/test/resources/fuzzyjoin/dblp/050-self-join-op.aql b/asterix-app/src/test/resources/fuzzyjoin/dblp/050-self-join-op.aql
new file mode 100644
index 0000000..f2467f2
--- /dev/null
+++ b/asterix-app/src/test/resources/fuzzyjoin/dblp/050-self-join-op.aql
@@ -0,0 +1,24 @@
+use dataverse fuzzy1;
+
+declare type DBLPType as open {
+  id: int32, 
+  dblpid: string,
+  title: string,
+  authors: string,
+  misc: string
+}
+
+declare nodegroup group1 on nc1, nc2;
+
+declare dataset DBLP(DBLPType) 
+  partitioned by key id on group1;
+
+write output to nc1:'/tmp/dblp.adm';
+
+set simthreshold '.5';
+
+for $paperR in dataset('DBLP')
+for $paperS in dataset('DBLP')
+where $paperR.title ~= $paperS.title and $paperR.id < $paperS.id
+return { 'R': { 'dblpid': $paperR.dblpid, 'title': $paperR.title },
+         'S': { 'dblpid': $paperS.dblpid, 'title': $paperS.title }}
diff --git a/asterix-app/src/test/resources/fuzzyjoin/pub/.goutputstream-YQMB2V b/asterix-app/src/test/resources/fuzzyjoin/pub/.goutputstream-YQMB2V
new file mode 100644
index 0000000..d67d58a
--- /dev/null
+++ b/asterix-app/src/test/resources/fuzzyjoin/pub/.goutputstream-YQMB2V
@@ -0,0 +1,20 @@
+use dataverse fuzzy1;
+
+declare type DBLPType as open {
+  id: int32, 
+  dblpid: string,
+  title: string,
+  authors: string,
+  misc: string
+}
+
+declare nodegroup group1 on nc1, nc2;
+
+declare dataset DBLP(DBLPType) 
+  partitioned by key id on group1;
+
+write output to nc1:'/tmp/pub.adm';
+
+for $paper in dataset('DBLP')
+// where $paper.id = 1
+return { 'dblp': $paper }
diff --git a/asterix-app/src/test/resources/fuzzyjoin/pub/010-load-dblp.aql b/asterix-app/src/test/resources/fuzzyjoin/pub/010-load-dblp.aql
new file mode 100644
index 0000000..49d07ec
--- /dev/null
+++ b/asterix-app/src/test/resources/fuzzyjoin/pub/010-load-dblp.aql
@@ -0,0 +1,20 @@
+use dataverse fuzzy1;
+
+declare type DBLPType as open {
+  id: int32, 
+  dblpid: string,
+  title: string,
+  authors: string,
+  misc: string
+}
+
+declare nodegroup group1 on nc1, nc2;
+
+declare dataset DBLP(DBLPType) 
+  partitioned by key id on group1;
+
+// load dataset DBLP from nc1:'/asterix/asterix-app/data/pub-small/dblp-small-id.txt'
+load dataset DBLP 
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1:///fuzzyjoin/data/dblp/dblp-id.txt"),("format"="delimited-text"),("delimiter"=":")) pre-sorted;
+
diff --git a/asterix-app/src/test/resources/fuzzyjoin/pub/020-drop-dblp.aql b/asterix-app/src/test/resources/fuzzyjoin/pub/020-drop-dblp.aql
new file mode 100644
index 0000000..65213dd
--- /dev/null
+++ b/asterix-app/src/test/resources/fuzzyjoin/pub/020-drop-dblp.aql
@@ -0,0 +1,16 @@
+use dataverse fuzzy1;
+
+declare type DBLPType as open {
+  id: int32, 
+  dblpid: string,
+  title: string,
+  authors: string,
+  misc: string
+}
+
+declare nodegroup group1 on nc1, nc2;
+
+declare dataset DBLP(DBLPType) 
+  partitioned by key id on group1;
+
+drop dataset DBLP;
diff --git a/asterix-app/src/test/resources/fuzzyjoin/pub/030-filter-dblp.aql b/asterix-app/src/test/resources/fuzzyjoin/pub/030-filter-dblp.aql
new file mode 100644
index 0000000..d67d58a
--- /dev/null
+++ b/asterix-app/src/test/resources/fuzzyjoin/pub/030-filter-dblp.aql
@@ -0,0 +1,20 @@
+use dataverse fuzzy1;
+
+declare type DBLPType as open {
+  id: int32, 
+  dblpid: string,
+  title: string,
+  authors: string,
+  misc: string
+}
+
+declare nodegroup group1 on nc1, nc2;
+
+declare dataset DBLP(DBLPType) 
+  partitioned by key id on group1;
+
+write output to nc1:'/tmp/pub.adm';
+
+for $paper in dataset('DBLP')
+// where $paper.id = 1
+return { 'dblp': $paper }
diff --git a/asterix-app/src/test/resources/fuzzyjoin/pub/040-load-csx.aql b/asterix-app/src/test/resources/fuzzyjoin/pub/040-load-csx.aql
new file mode 100644
index 0000000..06dfb4e
--- /dev/null
+++ b/asterix-app/src/test/resources/fuzzyjoin/pub/040-load-csx.aql
@@ -0,0 +1,20 @@
+use dataverse fuzzy1;
+
+declare type CSXType as open {
+  id: int32, 
+  csxid: string,
+  title: string,
+  authors: string,
+  misc: string
+}
+
+declare nodegroup group1 on nc1, nc2;
+
+declare dataset CSX(CSXType) 
+  partitioned by key id on group1;
+
+// load dataset CSX from nc1:'/asterix/asterix-app/data/pub-small/csx-small-id.txt'
+load dataset  CSX
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1:///asterix/asterix-app/data/pub-small/csx-small-id.txt"),("format"="delimited-text"),("delimiter"=":")) pre-sorted;
+
diff --git a/asterix-app/src/test/resources/fuzzyjoin/pub/050-drop-csx.aql b/asterix-app/src/test/resources/fuzzyjoin/pub/050-drop-csx.aql
new file mode 100644
index 0000000..c37c8b5
--- /dev/null
+++ b/asterix-app/src/test/resources/fuzzyjoin/pub/050-drop-csx.aql
@@ -0,0 +1,16 @@
+use dataverse fuzzy1;
+
+declare type CSXType as open {
+  id: int32, 
+  csxid: string,
+  title: string,
+  authors: string,
+  misc: string
+}
+
+declare nodegroup group1 on nc1, nc2;
+
+declare dataset CSX(CSXType) 
+  partitioned by key id on group1;
+
+drop dataset CSX;
diff --git a/asterix-app/src/test/resources/fuzzyjoin/pub/060-filter-csx.aql b/asterix-app/src/test/resources/fuzzyjoin/pub/060-filter-csx.aql
new file mode 100644
index 0000000..56b6dc9
--- /dev/null
+++ b/asterix-app/src/test/resources/fuzzyjoin/pub/060-filter-csx.aql
@@ -0,0 +1,22 @@
+use dataverse fuzzy1;
+
+use dataverse fuzzy1;
+
+declare type CSXType as open {
+  id: int32, 
+  csxid: string,
+  title: string,
+  authors: string,
+  misc: string
+}
+
+declare nodegroup group1 on nc1, nc2;
+
+declare dataset CSX(CSXType) 
+  partitioned by key id on group1;
+
+write output to nc1:'/tmp/pub.adm';
+
+for $paper in dataset('CSX')
+// where $paper.id = 1
+return { 'csx': $paper }
diff --git a/asterix-app/src/test/resources/fuzzyjoin/pub/070-join-aql.aql b/asterix-app/src/test/resources/fuzzyjoin/pub/070-join-aql.aql
new file mode 100644
index 0000000..ec88679
--- /dev/null
+++ b/asterix-app/src/test/resources/fuzzyjoin/pub/070-join-aql.aql
@@ -0,0 +1,97 @@
+use dataverse fuzzy1;
+
+declare type DBLPType as open {
+  id: int32, 
+  dblpid: string,
+  title: string,
+  authors: string,
+  misc: string
+}
+
+declare type CSXType as open {
+  id: int32, 
+  csxid: string,
+  title: string,
+  authors: string,
+  misc: string
+}
+
+declare nodegroup group1 on nc1, nc2;
+
+declare dataset DBLP(DBLPType) 
+  partitioned by key id on group1;
+
+declare dataset CSX(CSXType) 
+  partitioned by key id on group1;
+
+write output to nc1:'/tmp/pub.adm';
+
+//
+// -- - Stage 3 - --
+//
+for $ridpair in 
+    //
+    // -- - Stage 2 - --
+    //
+    for $paperR in dataset('DBLP')
+    let $lenR := len(counthashed-word-tokens($paperR.title))
+    let $tokensR :=
+        for $word in counthashed-word-tokens($paperR.title)
+        for $token at $i in
+            //
+            // -- - Stage 1 - --
+            //
+            for $paper in dataset('DBLP')
+            for $word in counthashed-word-tokens($paper.title)
+            group by $item := $word with $paper
+            order by count($paper)
+            return $item
+        where $word = $token
+        order by $i
+        return $i
+    for $prefix_tokenR in subset-collection(
+                                $tokensR, 
+                                0,
+                                prefix-len($lenR, 'Jaccard', .5))
+
+    for $paperS in dataset('CSX')
+    let $lenS := len(counthashed-word-tokens($paperS.title))
+    let $tokensS :=
+        for $word in counthashed-word-tokens($paperS.title)
+        for $token at $i in
+            //
+            // -- - Stage 1 - --
+            //
+            for $paper in dataset('DBLP')
+            for $word in counthashed-word-tokens($paper.title)
+            group by $item := $word with $paper
+            order by count($paper)
+            return $item
+        where $word = $token
+        order by $i
+        return $i
+    for $prefix_tokenS in subset-collection(
+                                $tokensS, 
+                                0,
+                                prefix-len($lenS, 'Jaccard', .5))
+
+    where $prefix_tokenR = $prefix_tokenS
+
+    let $sim := similarity(
+                    $lenR,
+                    $tokensR,
+                    $lenS,
+                    $tokensS,
+                    $prefix_tokenR,
+                    'Jaccard',
+                    .5)
+    where $sim >= .5
+    group by $idR := $paperR.id, $idS := $paperS.id with $sim
+    return {'idR': $idR, 'idS': $idS, 'sim': $sim[0]}
+
+for $paperR in dataset('DBLP')
+for $paperS in dataset('CSX')
+where $ridpair.idR = $paperR.id and $ridpair.idS = $paperS.id
+return { 'R': { 'dblpid': $paperR.dblpid, 'title': $paperR.title },
+         'S': { 'csxid': $paperS.csxid, 'title': $paperS.title },
+         'sim': $ridpair.sim }
diff --git a/asterix-app/src/test/resources/fuzzyjoin/pub/080-join-op.aql b/asterix-app/src/test/resources/fuzzyjoin/pub/080-join-op.aql
new file mode 100644
index 0000000..032031f
--- /dev/null
+++ b/asterix-app/src/test/resources/fuzzyjoin/pub/080-join-op.aql
@@ -0,0 +1,35 @@
+use dataverse fuzzy1;
+
+declare type DBLPType as open {
+  id: int32, 
+  dblpid: string,
+  title: string,
+  authors: string,
+  misc: string
+}
+
+declare type CSXType as open {
+  id: int32, 
+  csxid: string,
+  title: string,
+  authors: string,
+  misc: string
+}
+
+declare nodegroup group1 on nc1, nc2;
+
+declare dataset DBLP(DBLPType) 
+  partitioned by key id on group1;
+
+declare dataset CSX(CSXType) 
+  partitioned by key id on group1;
+
+write output to nc1:'/tmp/pub.adm';
+
+set simthreshold '.5';
+
+for $paperR in dataset('DBLP')
+for $paperS in dataset('CSX')
+where $paperR.title ~= $paperS.title
+return { 'R': { 'dblpid': $paperR.dblpid, 'title': $paperR.title },
+         'S': { 'csxid': $paperS.csxid, 'title': $paperS.title }}
diff --git a/asterix-app/src/test/resources/fuzzyjoin/pub/fuzzy-join-aql-plus.dot b/asterix-app/src/test/resources/fuzzyjoin/pub/fuzzy-join-aql-plus.dot
new file mode 100644
index 0000000..d8ce44e
--- /dev/null
+++ b/asterix-app/src/test/resources/fuzzyjoin/pub/fuzzy-join-aql-plus.dot
@@ -0,0 +1,84 @@
+digraph hyracks_job {
+size = "20,20";
+rankdir = "BT";
+node [shape = box, color = black, fillcolor = lightblue2, style = "rounded,filled"];
+"92f64732-b166-4765-bb0d-3d36a566005a" [label="AquaMeta\n(ets)"];
+"7b6c5cb6-cd7f-43cb-bf69-37eff4e3200b" [label="AquaMeta\n(assign,unnest)"];
+"9e589fcc-04fa-4834-ba1f-253470672434" [label="HashGroup"];
+"ff24200a-c665-4ca3-baa8-09fd2ca0ae04" [label="BTreeSearch"];
+"c6fc141b-034f-42db-bb33-a2059731e990" [label="InMemoryHashJoin"];
+"bb03494d-e0a9-4898-8b80-64c54da6a20c" [label="InMemorySort"];
+"4acb8f1a-23ab-474b-9571-8ab12f5aef41" [label="InMemoryHashJoin"];
+"19350ade-da75-4a1d-90e7-4f6753ef2732" [label="AquaMeta\n(assign,unnest)"];
+"421e3891-f7b0-4a50-a1d0-5c82099823f2" [label="AquaMeta\n(unnest)"];
+"21db32ee-7d3e-42f5-9541-2145ef2e55e2" [label="InMemoryHashJoin"];
+"99f0eeb6-d9f2-4af1-9b1b-6f0df7870db8" [label="InMemoryHashJoin"];
+"0066c7f5-f720-4098-8908-bebee74a409d" [label="BTreeSearch"];
+"b504c4ff-8226-43c2-b06f-a9ad59e54312" [label="HashGroup"];
+"a14d6687-2c52-41f9-95ed-ab9f4b451180" [label="AquaMeta\n(assign,stream-project)"];
+"f22b2397-d586-4894-8709-99da302fdc56" [label="AquaMeta\n(sink-write)"];
+"785d1650-a0b5-4f63-bfca-fe68d292c294" [label="PreclusteredGroup"];
+"66f6f703-1a20-40b2-a3a3-514412cabb03" [label="HashGroup"];
+"c66e50f0-f068-43fd-833e-32f9b6117f2f" [label="AquaMeta\n(ets)"];
+"1da790c0-ca3c-4833-8280-5c7c2d0ac23c" [label="AquaMeta\n(assign,running-aggregate,assign)"];
+"13342363-c3c6-469c-80b6-356397c95f53" [label="AquaMeta\n(ets)"];
+"769e1d5c-5b5b-4437-8764-a6e0bcf8d210" [label="HashGroup"];
+"da3da2a7-80c7-47a2-9d72-23b7c8f3d669" [label="AquaMeta\n(ets)"];
+"d966ca1f-a412-4b20-96cf-0b8b6c64df9c" [label="InMemoryHashJoin"];
+"baa3f1d6-1425-4180-a1de-2878f16e95d5" [label="AquaMeta\n(unnest)"];
+"6582beec-b6c0-48cc-ab7e-a5f3fc92bfa9" [label="AquaMeta\n(ets)"];
+"da4389d3-57a0-41fa-973b-cfdedca126d4" [label="PreclusteredGroup"];
+"e0d76180-55c0-41db-9d4e-b0b80eed3922" [label="BTreeSearch"];
+"36b24630-2bdf-47e2-ade4-21f95efde5a8" [label="AquaMeta\n(ets)"];
+"b1922618-827e-4276-a89e-5bd257cecd7d" [label="AquaMeta\n(assign,assign,unnest)"];
+"93596e19-b912-4071-94a9-512133274499" [label="InMemorySort"];
+"c49457b9-a4be-48d2-8e82-50820e0ca618" [label="BTreeSearch"];
+"7d6eb230-0efc-42a7-b279-98e0258073e6" [label="AquaMeta\n(assign,assign,unnest)"];
+"098774e6-f5a6-4fa0-b3cc-a195761bd957" [label="InMemorySort"];
+"ac276d4f-0bd6-468e-b314-da000f9141ea" [label="AquaMeta\n(stream-project)"];
+"066a993b-57b5-47ad-8a18-fef27b8e16f4" [label="AquaMeta\n(assign,stream-select)"];
+"31c39bd3-6724-42bc-b15f-9331d434598f" [label="BTreeSearch"];
+"0bdd825d-3c80-4769-95ec-3d8ed0fec67a" [label="HashGroup"];
+"9c797900-e6cf-44ad-b5e3-869e56fd27ba" [label="InMemorySort"];
+"ede16f1d-7795-4cbc-a605-ccfd25b7bb98" [label="BTreeSearch"];
+"9678a828-3e96-4391-be41-8da45721ca3d" [label="AquaMeta\n(assign,running-aggregate,assign)"];
+"92f64732-b166-4765-bb0d-3d36a566005a" -> "31c39bd3-6724-42bc-b15f-9331d434598f" [label="1:1"];
+"7b6c5cb6-cd7f-43cb-bf69-37eff4e3200b" -> "9e589fcc-04fa-4834-ba1f-253470672434" [label="1:1"];
+"9e589fcc-04fa-4834-ba1f-253470672434" -> "0bdd825d-3c80-4769-95ec-3d8ed0fec67a" [label="M:N Hash"];
+"ff24200a-c665-4ca3-baa8-09fd2ca0ae04" -> "99f0eeb6-d9f2-4af1-9b1b-6f0df7870db8" [label="M:N Hash"];
+"c6fc141b-034f-42db-bb33-a2059731e990" -> "066a993b-57b5-47ad-8a18-fef27b8e16f4" [label="1:1"];
+"bb03494d-e0a9-4898-8b80-64c54da6a20c" -> "785d1650-a0b5-4f63-bfca-fe68d292c294" [label="1:1"];
+"4acb8f1a-23ab-474b-9571-8ab12f5aef41" -> "a14d6687-2c52-41f9-95ed-ab9f4b451180" [label="1:1"];
+"19350ade-da75-4a1d-90e7-4f6753ef2732" -> "66f6f703-1a20-40b2-a3a3-514412cabb03" [label="1:1"];
+"421e3891-f7b0-4a50-a1d0-5c82099823f2" -> "c6fc141b-034f-42db-bb33-a2059731e990" [label="M:N Hash"];
+"21db32ee-7d3e-42f5-9541-2145ef2e55e2" -> "098774e6-f5a6-4fa0-b3cc-a195761bd957" [label="M:N Hash"];
+"99f0eeb6-d9f2-4af1-9b1b-6f0df7870db8" -> "ac276d4f-0bd6-468e-b314-da000f9141ea" [label="1:1"];
+"0066c7f5-f720-4098-8908-bebee74a409d" -> "4acb8f1a-23ab-474b-9571-8ab12f5aef41" [label="M:N Hash"];
+"b504c4ff-8226-43c2-b06f-a9ad59e54312" -> "9c797900-e6cf-44ad-b5e3-869e56fd27ba" [label="1:1"];
+"a14d6687-2c52-41f9-95ed-ab9f4b451180" -> "f22b2397-d586-4894-8709-99da302fdc56" [label="M:N Replicate"];
+"785d1650-a0b5-4f63-bfca-fe68d292c294" -> "421e3891-f7b0-4a50-a1d0-5c82099823f2" [label="1:1"];
+"66f6f703-1a20-40b2-a3a3-514412cabb03" -> "b504c4ff-8226-43c2-b06f-a9ad59e54312" [label="M:N Hash"];
+"c66e50f0-f068-43fd-833e-32f9b6117f2f" -> "e0d76180-55c0-41db-9d4e-b0b80eed3922" [label="1:1"];
+"1da790c0-ca3c-4833-8280-5c7c2d0ac23c" -> "d966ca1f-a412-4b20-96cf-0b8b6c64df9c" [label="M:N Hash"];
+"13342363-c3c6-469c-80b6-356397c95f53" -> "ff24200a-c665-4ca3-baa8-09fd2ca0ae04" [label="1:1"];
+"769e1d5c-5b5b-4437-8764-a6e0bcf8d210" -> "99f0eeb6-d9f2-4af1-9b1b-6f0df7870db8" [label="M:N Hash"];
+"da3da2a7-80c7-47a2-9d72-23b7c8f3d669" -> "c49457b9-a4be-48d2-8e82-50820e0ca618" [label="1:1"];
+"d966ca1f-a412-4b20-96cf-0b8b6c64df9c" -> "bb03494d-e0a9-4898-8b80-64c54da6a20c" [label="M:N Hash"];
+"baa3f1d6-1425-4180-a1de-2878f16e95d5" -> "c6fc141b-034f-42db-bb33-a2059731e990" [label="M:N Hash"];
+"6582beec-b6c0-48cc-ab7e-a5f3fc92bfa9" -> "ede16f1d-7795-4cbc-a605-ccfd25b7bb98" [label="1:1"];
+"da4389d3-57a0-41fa-973b-cfdedca126d4" -> "baa3f1d6-1425-4180-a1de-2878f16e95d5" [label="1:1"];
+"e0d76180-55c0-41db-9d4e-b0b80eed3922" -> "19350ade-da75-4a1d-90e7-4f6753ef2732" [label="1:1"];
+"36b24630-2bdf-47e2-ade4-21f95efde5a8" -> "0066c7f5-f720-4098-8908-bebee74a409d" [label="1:1"];
+"b1922618-827e-4276-a89e-5bd257cecd7d" -> "21db32ee-7d3e-42f5-9541-2145ef2e55e2" [label="M:N Hash"];
+"93596e19-b912-4071-94a9-512133274499" -> "9678a828-3e96-4391-be41-8da45721ca3d" [label="M:N Hash Merge"];
+"c49457b9-a4be-48d2-8e82-50820e0ca618" -> "7b6c5cb6-cd7f-43cb-bf69-37eff4e3200b" [label="1:1"];
+"7d6eb230-0efc-42a7-b279-98e0258073e6" -> "d966ca1f-a412-4b20-96cf-0b8b6c64df9c" [label="M:N Hash"];
+"098774e6-f5a6-4fa0-b3cc-a195761bd957" -> "da4389d3-57a0-41fa-973b-cfdedca126d4" [label="1:1"];
+"ac276d4f-0bd6-468e-b314-da000f9141ea" -> "4acb8f1a-23ab-474b-9571-8ab12f5aef41" [label="M:N Hash"];
+"066a993b-57b5-47ad-8a18-fef27b8e16f4" -> "769e1d5c-5b5b-4437-8764-a6e0bcf8d210" [label="M:N Hash"];
+"31c39bd3-6724-42bc-b15f-9331d434598f" -> "b1922618-827e-4276-a89e-5bd257cecd7d" [label="1:1"];
+"0bdd825d-3c80-4769-95ec-3d8ed0fec67a" -> "93596e19-b912-4071-94a9-512133274499" [label="1:1"];
+"9c797900-e6cf-44ad-b5e3-869e56fd27ba" -> "1da790c0-ca3c-4833-8280-5c7c2d0ac23c" [label="M:N Hash Merge"];
+"ede16f1d-7795-4cbc-a605-ccfd25b7bb98" -> "7d6eb230-0efc-42a7-b279-98e0258073e6" [label="1:1"];
+"9678a828-3e96-4391-be41-8da45721ca3d" -> "21db32ee-7d3e-42f5-9541-2145ef2e55e2" [label="M:N Hash"];
+}
diff --git a/asterix-app/src/test/resources/fuzzyjoin/pub/fuzzy-join-aql-plus.json b/asterix-app/src/test/resources/fuzzyjoin/pub/fuzzy-join-aql-plus.json
new file mode 100644
index 0000000..2b8ce44
--- /dev/null
+++ b/asterix-app/src/test/resources/fuzzyjoin/pub/fuzzy-join-aql-plus.json
@@ -0,0 +1,802 @@
+{
+ "connectors": [
+  {
+   "connector": {
+    "id": "551aa36c-8048-46b7-8eff-f4bbe1afce83",
+    "java-class": "edu.uci.ics.hyracks.dataflow.std.connectors.OneToOneConnectorDescriptor",
+    "type": "connector"
+   },
+   "in-operator-id": "ODID:e0d76180-55c0-41db-9d4e-b0b80eed3922",
+   "in-operator-port": 0,
+   "out-operator-id": "ODID:19350ade-da75-4a1d-90e7-4f6753ef2732",
+   "out-operator-port": 0,
+   "type": "connector-info"
+  },
+  {
+   "connector": {
+    "id": "3b0c6d28-b75e-4040-ae5c-0a20a0729d9c",
+    "java-class": "edu.uci.ics.hyracks.dataflow.std.connectors.OneToOneConnectorDescriptor",
+    "type": "connector"
+   },
+   "in-operator-id": "ODID:c49457b9-a4be-48d2-8e82-50820e0ca618",
+   "in-operator-port": 0,
+   "out-operator-id": "ODID:7b6c5cb6-cd7f-43cb-bf69-37eff4e3200b",
+   "out-operator-port": 0,
+   "type": "connector-info"
+  },
+  {
+   "connector": {
+    "id": "3c6dad81-1d96-41aa-976a-0cdcb9e2071e",
+    "java-class": "edu.uci.ics.hyracks.dataflow.std.connectors.MToNHashPartitioningConnectorDescriptor",
+    "type": "connector"
+   },
+   "in-operator-id": "ODID:ac276d4f-0bd6-468e-b314-da000f9141ea",
+   "in-operator-port": 0,
+   "out-operator-id": "ODID:4acb8f1a-23ab-474b-9571-8ab12f5aef41",
+   "out-operator-port": 0,
+   "type": "connector-info"
+  },
+  {
+   "connector": {
+    "id": "8ca6e18f-9e2f-4cf7-a15d-b49da1e18327",
+    "java-class": "edu.uci.ics.hyracks.dataflow.std.connectors.OneToOneConnectorDescriptor",
+    "type": "connector"
+   },
+   "in-operator-id": "ODID:da3da2a7-80c7-47a2-9d72-23b7c8f3d669",
+   "in-operator-port": 0,
+   "out-operator-id": "ODID:c49457b9-a4be-48d2-8e82-50820e0ca618",
+   "out-operator-port": 0,
+   "type": "connector-info"
+  },
+  {
+   "connector": {
+    "id": "1d3ac011-b83a-4690-b1fe-0dd906706823",
+    "java-class": "edu.uci.ics.hyracks.dataflow.std.connectors.MToNHashPartitioningConnectorDescriptor",
+    "type": "connector"
+   },
+   "in-operator-id": "ODID:b1922618-827e-4276-a89e-5bd257cecd7d",
+   "in-operator-port": 0,
+   "out-operator-id": "ODID:21db32ee-7d3e-42f5-9541-2145ef2e55e2",
+   "out-operator-port": 0,
+   "type": "connector-info"
+  },
+  {
+   "connector": {
+    "id": "376d0c4e-a260-4de2-af6f-46cfb7f35736",
+    "java-class": "edu.uci.ics.hyracks.dataflow.std.connectors.OneToOneConnectorDescriptor",
+    "type": "connector"
+   },
+   "in-operator-id": "ODID:7b6c5cb6-cd7f-43cb-bf69-37eff4e3200b",
+   "in-operator-port": 0,
+   "out-operator-id": "ODID:9e589fcc-04fa-4834-ba1f-253470672434",
+   "out-operator-port": 0,
+   "type": "connector-info"
+  },
+  {
+   "connector": {
+    "id": "a63f8c84-bb1f-4d18-9008-1f5a3d657e33",
+    "java-class": "edu.uci.ics.hyracks.dataflow.std.connectors.MToNHashPartitioningConnectorDescriptor",
+    "type": "connector"
+   },
+   "in-operator-id": "ODID:769e1d5c-5b5b-4437-8764-a6e0bcf8d210",
+   "in-operator-port": 0,
+   "out-operator-id": "ODID:99f0eeb6-d9f2-4af1-9b1b-6f0df7870db8",
+   "out-operator-port": 0,
+   "type": "connector-info"
+  },
+  {
+   "connector": {
+    "id": "f99bf8e6-f528-4e14-81a2-029185b19c07",
+    "java-class": "edu.uci.ics.hyracks.dataflow.std.connectors.OneToOneConnectorDescriptor",
+    "type": "connector"
+   },
+   "in-operator-id": "ODID:b504c4ff-8226-43c2-b06f-a9ad59e54312",
+   "in-operator-port": 0,
+   "out-operator-id": "ODID:9c797900-e6cf-44ad-b5e3-869e56fd27ba",
+   "out-operator-port": 0,
+   "type": "connector-info"
+  },
+  {
+   "connector": {
+    "id": "c20357ab-1ac9-427a-8401-680e0893310e",
+    "java-class": "edu.uci.ics.hyracks.dataflow.std.connectors.MToNHashPartitioningConnectorDescriptor",
+    "type": "connector"
+   },
+   "in-operator-id": "ODID:baa3f1d6-1425-4180-a1de-2878f16e95d5",
+   "in-operator-port": 0,
+   "out-operator-id": "ODID:c6fc141b-034f-42db-bb33-a2059731e990",
+   "out-operator-port": 1,
+   "type": "connector-info"
+  },
+  {
+   "connector": {
+    "id": "3314f84e-770c-40fe-b4fd-84e9d4a1b645",
+    "java-class": "edu.uci.ics.hyracks.dataflow.std.connectors.MToNHashPartitioningConnectorDescriptor",
+    "type": "connector"
+   },
+   "in-operator-id": "ODID:1da790c0-ca3c-4833-8280-5c7c2d0ac23c",
+   "in-operator-port": 0,
+   "out-operator-id": "ODID:d966ca1f-a412-4b20-96cf-0b8b6c64df9c",
+   "out-operator-port": 1,
+   "type": "connector-info"
+  },
+  {
+   "connector": {
+    "id": "9cc19566-7513-4025-ab45-d63de159601e",
+    "java-class": "edu.uci.ics.hyracks.dataflow.std.connectors.OneToOneConnectorDescriptor",
+    "type": "connector"
+   },
+   "in-operator-id": "ODID:19350ade-da75-4a1d-90e7-4f6753ef2732",
+   "in-operator-port": 0,
+   "out-operator-id": "ODID:66f6f703-1a20-40b2-a3a3-514412cabb03",
+   "out-operator-port": 0,
+   "type": "connector-info"
+  },
+  {
+   "connector": {
+    "id": "de442773-23d2-437b-aed1-5871bcd41acb",
+    "java-class": "edu.uci.ics.hyracks.dataflow.std.connectors.OneToOneConnectorDescriptor",
+    "type": "connector"
+   },
+   "in-operator-id": "ODID:da4389d3-57a0-41fa-973b-cfdedca126d4",
+   "in-operator-port": 0,
+   "out-operator-id": "ODID:baa3f1d6-1425-4180-a1de-2878f16e95d5",
+   "out-operator-port": 0,
+   "type": "connector-info"
+  },
+  {
+   "connector": {
+    "id": "befeab23-9011-43d6-bb2e-16b00b9733d3",
+    "java-class": "edu.uci.ics.hyracks.dataflow.std.connectors.MToNHashPartitioningConnectorDescriptor",
+    "type": "connector"
+   },
+   "in-operator-id": "ODID:421e3891-f7b0-4a50-a1d0-5c82099823f2",
+   "in-operator-port": 0,
+   "out-operator-id": "ODID:c6fc141b-034f-42db-bb33-a2059731e990",
+   "out-operator-port": 0,
+   "type": "connector-info"
+  },
+  {
+   "connector": {
+    "id": "d995afde-8485-4c9a-81f8-6d3fae1ae276",
+    "java-class": "edu.uci.ics.hyracks.dataflow.std.connectors.MToNHashPartitioningMergingConnectorDescriptor",
+    "type": "connector"
+   },
+   "in-operator-id": "ODID:93596e19-b912-4071-94a9-512133274499",
+   "in-operator-port": 0,
+   "out-operator-id": "ODID:9678a828-3e96-4391-be41-8da45721ca3d",
+   "out-operator-port": 0,
+   "type": "connector-info"
+  },
+  {
+   "connector": {
+    "id": "5d5d91af-30b0-4257-93a3-88ab3b8ea87e",
+    "java-class": "edu.uci.ics.hyracks.dataflow.std.connectors.OneToOneConnectorDescriptor",
+    "type": "connector"
+   },
+   "in-operator-id": "ODID:31c39bd3-6724-42bc-b15f-9331d434598f",
+   "in-operator-port": 0,
+   "out-operator-id": "ODID:b1922618-827e-4276-a89e-5bd257cecd7d",
+   "out-operator-port": 0,
+   "type": "connector-info"
+  },
+  {
+   "connector": {
+    "id": "6a9de34a-2de7-4943-affd-ae5442c68d02",
+    "java-class": "edu.uci.ics.hyracks.dataflow.std.connectors.MToNReplicatingConnectorDescriptor",
+    "type": "connector"
+   },
+   "in-operator-id": "ODID:a14d6687-2c52-41f9-95ed-ab9f4b451180",
+   "in-operator-port": 0,
+   "out-operator-id": "ODID:f22b2397-d586-4894-8709-99da302fdc56",
+   "out-operator-port": 0,
+   "type": "connector-info"
+  },
+  {
+   "connector": {
+    "id": "5e8289ff-2801-441e-9497-0e57a39bb4a3",
+    "java-class": "edu.uci.ics.hyracks.dataflow.std.connectors.MToNHashPartitioningConnectorDescriptor",
+    "type": "connector"
+   },
+   "in-operator-id": "ODID:7d6eb230-0efc-42a7-b279-98e0258073e6",
+   "in-operator-port": 0,
+   "out-operator-id": "ODID:d966ca1f-a412-4b20-96cf-0b8b6c64df9c",
+   "out-operator-port": 0,
+   "type": "connector-info"
+  },
+  {
+   "connector": {
+    "id": "214c15e9-c25f-4d99-a5ff-2cf59cb7f4df",
+    "java-class": "edu.uci.ics.hyracks.dataflow.std.connectors.OneToOneConnectorDescriptor",
+    "type": "connector"
+   },
+   "in-operator-id": "ODID:36b24630-2bdf-47e2-ade4-21f95efde5a8",
+   "in-operator-port": 0,
+   "out-operator-id": "ODID:0066c7f5-f720-4098-8908-bebee74a409d",
+   "out-operator-port": 0,
+   "type": "connector-info"
+  },
+  {
+   "connector": {
+    "id": "d75a162f-f2c2-4cb3-b603-9010e628e3c9",
+    "java-class": "edu.uci.ics.hyracks.dataflow.std.connectors.MToNHashPartitioningConnectorDescriptor",
+    "type": "connector"
+   },
+   "in-operator-id": "ODID:66f6f703-1a20-40b2-a3a3-514412cabb03",
+   "in-operator-port": 0,
+   "out-operator-id": "ODID:b504c4ff-8226-43c2-b06f-a9ad59e54312",
+   "out-operator-port": 0,
+   "type": "connector-info"
+  },
+  {
+   "connector": {
+    "id": "69eab14a-0758-400b-928f-b59b7f3a9aad",
+    "java-class": "edu.uci.ics.hyracks.dataflow.std.connectors.MToNHashPartitioningConnectorDescriptor",
+    "type": "connector"
+   },
+   "in-operator-id": "ODID:ff24200a-c665-4ca3-baa8-09fd2ca0ae04",
+   "in-operator-port": 0,
+   "out-operator-id": "ODID:99f0eeb6-d9f2-4af1-9b1b-6f0df7870db8",
+   "out-operator-port": 1,
+   "type": "connector-info"
+  },
+  {
+   "connector": {
+    "id": "44e2def1-3cf3-4a5f-8ad8-c5d02427d9c8",
+    "java-class": "edu.uci.ics.hyracks.dataflow.std.connectors.MToNHashPartitioningMergingConnectorDescriptor",
+    "type": "connector"
+   },
+   "in-operator-id": "ODID:9c797900-e6cf-44ad-b5e3-869e56fd27ba",
+   "in-operator-port": 0,
+   "out-operator-id": "ODID:1da790c0-ca3c-4833-8280-5c7c2d0ac23c",
+   "out-operator-port": 0,
+   "type": "connector-info"
+  },
+  {
+   "connector": {
+    "id": "41c2e83d-8363-463d-b5fe-88eab1a5ed6a",
+    "java-class": "edu.uci.ics.hyracks.dataflow.std.connectors.OneToOneConnectorDescriptor",
+    "type": "connector"
+   },
+   "in-operator-id": "ODID:c66e50f0-f068-43fd-833e-32f9b6117f2f",
+   "in-operator-port": 0,
+   "out-operator-id": "ODID:e0d76180-55c0-41db-9d4e-b0b80eed3922",
+   "out-operator-port": 0,
+   "type": "connector-info"
+  },
+  {
+   "connector": {
+    "id": "f8972eb8-065e-4f7e-acc2-48643c56661a",
+    "java-class": "edu.uci.ics.hyracks.dataflow.std.connectors.MToNHashPartitioningConnectorDescriptor",
+    "type": "connector"
+   },
+   "in-operator-id": "ODID:9678a828-3e96-4391-be41-8da45721ca3d",
+   "in-operator-port": 0,
+   "out-operator-id": "ODID:21db32ee-7d3e-42f5-9541-2145ef2e55e2",
+   "out-operator-port": 1,
+   "type": "connector-info"
+  },
+  {
+   "connector": {
+    "id": "34d4f80f-a18d-4554-8b54-01f262b4dd6f",
+    "java-class": "edu.uci.ics.hyracks.dataflow.std.connectors.OneToOneConnectorDescriptor",
+    "type": "connector"
+   },
+   "in-operator-id": "ODID:92f64732-b166-4765-bb0d-3d36a566005a",
+   "in-operator-port": 0,
+   "out-operator-id": "ODID:31c39bd3-6724-42bc-b15f-9331d434598f",
+   "out-operator-port": 0,
+   "type": "connector-info"
+  },
+  {
+   "connector": {
+    "id": "590b6750-19b8-4171-9875-616e30ccaf16",
+    "java-class": "edu.uci.ics.hyracks.dataflow.std.connectors.OneToOneConnectorDescriptor",
+    "type": "connector"
+   },
+   "in-operator-id": "ODID:785d1650-a0b5-4f63-bfca-fe68d292c294",
+   "in-operator-port": 0,
+   "out-operator-id": "ODID:421e3891-f7b0-4a50-a1d0-5c82099823f2",
+   "out-operator-port": 0,
+   "type": "connector-info"
+  },
+  {
+   "connector": {
+    "id": "96c2ddc2-9be2-4279-894f-dcce41f2bf65",
+    "java-class": "edu.uci.ics.hyracks.dataflow.std.connectors.OneToOneConnectorDescriptor",
+    "type": "connector"
+   },
+   "in-operator-id": "ODID:0bdd825d-3c80-4769-95ec-3d8ed0fec67a",
+   "in-operator-port": 0,
+   "out-operator-id": "ODID:93596e19-b912-4071-94a9-512133274499",
+   "out-operator-port": 0,
+   "type": "connector-info"
+  },
+  {
+   "connector": {
+    "id": "59227da7-cbba-4414-a3e5-b9d20796d743",
+    "java-class": "edu.uci.ics.hyracks.dataflow.std.connectors.MToNHashPartitioningConnectorDescriptor",
+    "type": "connector"
+   },
+   "in-operator-id": "ODID:066a993b-57b5-47ad-8a18-fef27b8e16f4",
+   "in-operator-port": 0,
+   "out-operator-id": "ODID:769e1d5c-5b5b-4437-8764-a6e0bcf8d210",
+   "out-operator-port": 0,
+   "type": "connector-info"
+  },
+  {
+   "connector": {
+    "id": "f0105e8e-7916-4abf-aa1a-cd3ab5cdbaea",
+    "java-class": "edu.uci.ics.hyracks.dataflow.std.connectors.OneToOneConnectorDescriptor",
+    "type": "connector"
+   },
+   "in-operator-id": "ODID:bb03494d-e0a9-4898-8b80-64c54da6a20c",
+   "in-operator-port": 0,
+   "out-operator-id": "ODID:785d1650-a0b5-4f63-bfca-fe68d292c294",
+   "out-operator-port": 0,
+   "type": "connector-info"
+  },
+  {
+   "connector": {
+    "id": "ce0d0b9e-d59a-4097-98f5-44e8af699016",
+    "java-class": "edu.uci.ics.hyracks.dataflow.std.connectors.OneToOneConnectorDescriptor",
+    "type": "connector"
+   },
+   "in-operator-id": "ODID:6582beec-b6c0-48cc-ab7e-a5f3fc92bfa9",
+   "in-operator-port": 0,
+   "out-operator-id": "ODID:ede16f1d-7795-4cbc-a605-ccfd25b7bb98",
+   "out-operator-port": 0,
+   "type": "connector-info"
+  },
+  {
+   "connector": {
+    "id": "10daf2fc-aa60-4604-a150-9e4d4f42106a",
+    "java-class": "edu.uci.ics.hyracks.dataflow.std.connectors.MToNHashPartitioningConnectorDescriptor",
+    "type": "connector"
+   },
+   "in-operator-id": "ODID:9e589fcc-04fa-4834-ba1f-253470672434",
+   "in-operator-port": 0,
+   "out-operator-id": "ODID:0bdd825d-3c80-4769-95ec-3d8ed0fec67a",
+   "out-operator-port": 0,
+   "type": "connector-info"
+  },
+  {
+   "connector": {
+    "id": "be9e9778-a426-4701-b28e-4f9b1f766f11",
+    "java-class": "edu.uci.ics.hyracks.dataflow.std.connectors.MToNHashPartitioningConnectorDescriptor",
+    "type": "connector"
+   },
+   "in-operator-id": "ODID:21db32ee-7d3e-42f5-9541-2145ef2e55e2",
+   "in-operator-port": 0,
+   "out-operator-id": "ODID:098774e6-f5a6-4fa0-b3cc-a195761bd957",
+   "out-operator-port": 0,
+   "type": "connector-info"
+  },
+  {
+   "connector": {
+    "id": "cbf6135d-43f8-49b5-82ab-eeeffa5ab984",
+    "java-class": "edu.uci.ics.hyracks.dataflow.std.connectors.MToNHashPartitioningConnectorDescriptor",
+    "type": "connector"
+   },
+   "in-operator-id": "ODID:0066c7f5-f720-4098-8908-bebee74a409d",
+   "in-operator-port": 0,
+   "out-operator-id": "ODID:4acb8f1a-23ab-474b-9571-8ab12f5aef41",
+   "out-operator-port": 1,
+   "type": "connector-info"
+  },
+  {
+   "connector": {
+    "id": "56c2608f-5435-4307-be85-96e6e63b792a",
+    "java-class": "edu.uci.ics.hyracks.dataflow.std.connectors.OneToOneConnectorDescriptor",
+    "type": "connector"
+   },
+   "in-operator-id": "ODID:13342363-c3c6-469c-80b6-356397c95f53",
+   "in-operator-port": 0,
+   "out-operator-id": "ODID:ff24200a-c665-4ca3-baa8-09fd2ca0ae04",
+   "out-operator-port": 0,
+   "type": "connector-info"
+  },
+  {
+   "connector": {
+    "id": "2459e6c7-1c76-4d21-968f-d882f512d53b",
+    "java-class": "edu.uci.ics.hyracks.dataflow.std.connectors.OneToOneConnectorDescriptor",
+    "type": "connector"
+   },
+   "in-operator-id": "ODID:098774e6-f5a6-4fa0-b3cc-a195761bd957",
+   "in-operator-port": 0,
+   "out-operator-id": "ODID:da4389d3-57a0-41fa-973b-cfdedca126d4",
+   "out-operator-port": 0,
+   "type": "connector-info"
+  },
+  {
+   "connector": {
+    "id": "a46e659d-0687-4f77-8948-3e09f72d99c7",
+    "java-class": "edu.uci.ics.hyracks.dataflow.std.connectors.OneToOneConnectorDescriptor",
+    "type": "connector"
+   },
+   "in-operator-id": "ODID:4acb8f1a-23ab-474b-9571-8ab12f5aef41",
+   "in-operator-port": 0,
+   "out-operator-id": "ODID:a14d6687-2c52-41f9-95ed-ab9f4b451180",
+   "out-operator-port": 0,
+   "type": "connector-info"
+  },
+  {
+   "connector": {
+    "id": "7ce5dc21-e816-4e36-a8ee-29295a6ba454",
+    "java-class": "edu.uci.ics.hyracks.dataflow.std.connectors.OneToOneConnectorDescriptor",
+    "type": "connector"
+   },
+   "in-operator-id": "ODID:ede16f1d-7795-4cbc-a605-ccfd25b7bb98",
+   "in-operator-port": 0,
+   "out-operator-id": "ODID:7d6eb230-0efc-42a7-b279-98e0258073e6",
+   "out-operator-port": 0,
+   "type": "connector-info"
+  },
+  {
+   "connector": {
+    "id": "6e12e7e0-2fc6-444d-a1f2-16cea0d51eeb",
+    "java-class": "edu.uci.ics.hyracks.dataflow.std.connectors.OneToOneConnectorDescriptor",
+    "type": "connector"
+   },
+   "in-operator-id": "ODID:99f0eeb6-d9f2-4af1-9b1b-6f0df7870db8",
+   "in-operator-port": 0,
+   "out-operator-id": "ODID:ac276d4f-0bd6-468e-b314-da000f9141ea",
+   "out-operator-port": 0,
+   "type": "connector-info"
+  },
+  {
+   "connector": {
+    "id": "b19ab64b-c38d-490e-85be-d58547582144",
+    "java-class": "edu.uci.ics.hyracks.dataflow.std.connectors.OneToOneConnectorDescriptor",
+    "type": "connector"
+   },
+   "in-operator-id": "ODID:c6fc141b-034f-42db-bb33-a2059731e990",
+   "in-operator-port": 0,
+   "out-operator-id": "ODID:066a993b-57b5-47ad-8a18-fef27b8e16f4",
+   "out-operator-port": 0,
+   "type": "connector-info"
+  },
+  {
+   "connector": {
+    "id": "b2d466cc-5250-4b8a-963e-bbd36f07380d",
+    "java-class": "edu.uci.ics.hyracks.dataflow.std.connectors.MToNHashPartitioningConnectorDescriptor",
+    "type": "connector"
+   },
+   "in-operator-id": "ODID:d966ca1f-a412-4b20-96cf-0b8b6c64df9c",
+   "in-operator-port": 0,
+   "out-operator-id": "ODID:bb03494d-e0a9-4898-8b80-64c54da6a20c",
+   "out-operator-port": 0,
+   "type": "connector-info"
+  }
+ ],
+ "operators": [
+  {
+   "id": "92f64732-b166-4765-bb0d-3d36a566005a",
+   "in-arity": 0,
+   "java-class": "edu.uci.ics.aqua.runtime.operators.base.AquaMetaOperatorDescriptor",
+   "micro-operators": ["ets"],
+   "out-arity": 1,
+   "type": "operator"
+  },
+  {
+   "id": "7b6c5cb6-cd7f-43cb-bf69-37eff4e3200b",
+   "in-arity": 1,
+   "java-class": "edu.uci.ics.aqua.runtime.operators.base.AquaMetaOperatorDescriptor",
+   "micro-operators": [
+    "assign [2] := [edu.uci.ics.asterix.runtime.evaluators.tagged.FieldAccessByNameEvalFactory@6a6779e6]",
+    "unnest 3 <- edu.uci.ics.asterix.runtime.unnestingfunctions.std.ScanCollectionDescriptor$1@2f74219d"
+   ],
+   "out-arity": 1,
+   "type": "operator"
+  },
+  {
+   "id": "9e589fcc-04fa-4834-ba1f-253470672434",
+   "in-arity": 1,
+   "java-class": "edu.uci.ics.hyracks.dataflow.std.group.HashGroupOperatorDescriptor",
+   "out-arity": 1,
+   "type": "operator"
+  },
+  {
+   "id": "ff24200a-c665-4ca3-baa8-09fd2ca0ae04",
+   "in-arity": 1,
+   "java-class": "edu.uci.ics.hyracks.storage.am.btree.dataflow.BTreeSearchOperatorDescriptor",
+   "out-arity": 1,
+   "type": "operator"
+  },
+  {
+   "id": "c6fc141b-034f-42db-bb33-a2059731e990",
+   "in-arity": 2,
+   "java-class": "edu.uci.ics.hyracks.dataflow.std.join.InMemoryHashJoinOperatorDescriptor",
+   "out-arity": 1,
+   "type": "operator"
+  },
+  {
+   "id": "bb03494d-e0a9-4898-8b80-64c54da6a20c",
+   "in-arity": 1,
+   "java-class": "edu.uci.ics.hyracks.dataflow.std.sort.InMemorySortOperatorDescriptor",
+   "out-arity": 1,
+   "type": "operator"
+  },
+  {
+   "id": "4acb8f1a-23ab-474b-9571-8ab12f5aef41",
+   "in-arity": 2,
+   "java-class": "edu.uci.ics.hyracks.dataflow.std.join.InMemoryHashJoinOperatorDescriptor",
+   "out-arity": 1,
+   "type": "operator"
+  },
+  {
+   "id": "19350ade-da75-4a1d-90e7-4f6753ef2732",
+   "in-arity": 1,
+   "java-class": "edu.uci.ics.aqua.runtime.operators.base.AquaMetaOperatorDescriptor",
+   "micro-operators": [
+    "assign [2] := [edu.uci.ics.asterix.runtime.evaluators.tagged.FieldAccessByNameEvalFactory@714ae2c1]",
+    "unnest 3 <- edu.uci.ics.asterix.runtime.unnestingfunctions.std.ScanCollectionDescriptor$1@6b6d2702"
+   ],
+   "out-arity": 1,
+   "type": "operator"
+  },
+  {
+   "id": "421e3891-f7b0-4a50-a1d0-5c82099823f2",
+   "in-arity": 1,
+   "java-class": "edu.uci.ics.aqua.runtime.operators.base.AquaMetaOperatorDescriptor",
+   "micro-operators": ["unnest 5 <- edu.uci.ics.asterix.runtime.unnestingfunctions.std.SubsetCollectionDescriptor$1@4b1c2b67"],
+   "out-arity": 1,
+   "type": "operator"
+  },
+  {
+   "id": "21db32ee-7d3e-42f5-9541-2145ef2e55e2",
+   "in-arity": 2,
+   "java-class": "edu.uci.ics.hyracks.dataflow.std.join.InMemoryHashJoinOperatorDescriptor",
+   "out-arity": 1,
+   "type": "operator"
+  },
+  {
+   "id": "99f0eeb6-d9f2-4af1-9b1b-6f0df7870db8",
+   "in-arity": 2,
+   "java-class": "edu.uci.ics.hyracks.dataflow.std.join.InMemoryHashJoinOperatorDescriptor",
+   "out-arity": 1,
+   "type": "operator"
+  },
+  {
+   "id": "0066c7f5-f720-4098-8908-bebee74a409d",
+   "in-arity": 1,
+   "java-class": "edu.uci.ics.hyracks.storage.am.btree.dataflow.BTreeSearchOperatorDescriptor",
+   "out-arity": 1,
+   "type": "operator"
+  },
+  {
+   "id": "b504c4ff-8226-43c2-b06f-a9ad59e54312",
+   "in-arity": 1,
+   "java-class": "edu.uci.ics.hyracks.dataflow.std.group.HashGroupOperatorDescriptor",
+   "out-arity": 1,
+   "type": "operator"
+  },
+  {
+   "id": "a14d6687-2c52-41f9-95ed-ab9f4b451180",
+   "in-arity": 1,
+   "java-class": "edu.uci.ics.aqua.runtime.operators.base.AquaMetaOperatorDescriptor",
+   "micro-operators": [
+    "assign [4] := [edu.uci.ics.asterix.runtime.evaluators.tagged.functions.AbstractRecordConstructorDescriptor$1@26659db7]",
+    "stream-project [4]"
+   ],
+   "out-arity": 1,
+   "type": "operator"
+  },
+  {
+   "id": "f22b2397-d586-4894-8709-99da302fdc56",
+   "in-arity": 1,
+   "java-class": "edu.uci.ics.aqua.runtime.operators.base.AquaMetaOperatorDescriptor",
+   "micro-operators": ["sink-write [0] outputFile"],
+   "out-arity": 0,
+   "type": "operator"
+  },
+  {
+   "id": "785d1650-a0b5-4f63-bfca-fe68d292c294",
+   "in-arity": 1,
+   "java-class": "edu.uci.ics.hyracks.dataflow.std.group.PreclusteredGroupOperatorDescriptor",
+   "out-arity": 1,
+   "type": "operator"
+  },
+  {
+   "id": "66f6f703-1a20-40b2-a3a3-514412cabb03",
+   "in-arity": 1,
+   "java-class": "edu.uci.ics.hyracks.dataflow.std.group.HashGroupOperatorDescriptor",
+   "out-arity": 1,
+   "type": "operator"
+  },
+  {
+   "id": "c66e50f0-f068-43fd-833e-32f9b6117f2f",
+   "in-arity": 0,
+   "java-class": "edu.uci.ics.aqua.runtime.operators.base.AquaMetaOperatorDescriptor",
+   "micro-operators": ["ets"],
+   "out-arity": 1,
+   "type": "operator"
+  },
+  {
+   "id": "1da790c0-ca3c-4833-8280-5c7c2d0ac23c",
+   "in-arity": 1,
+   "java-class": "edu.uci.ics.aqua.runtime.operators.base.AquaMetaOperatorDescriptor",
+   "micro-operators": [
+    "assign [2] := [ColumnAccess(0)]",
+    "running-aggregate [3] := [edu.uci.ics.asterix.runtime.runningaggregates.std.TidRunningAggregateDescriptor$1@59556d12]",
+    "assign [4] := [ConstantEvalFactory true]"
+   ],
+   "out-arity": 1,
+   "type": "operator"
+  },
+  {
+   "id": "13342363-c3c6-469c-80b6-356397c95f53",
+   "in-arity": 0,
+   "java-class": "edu.uci.ics.aqua.runtime.operators.base.AquaMetaOperatorDescriptor",
+   "micro-operators": ["ets"],
+   "out-arity": 1,
+   "type": "operator"
+  },
+  {
+   "id": "769e1d5c-5b5b-4437-8764-a6e0bcf8d210",
+   "in-arity": 1,
+   "java-class": "edu.uci.ics.hyracks.dataflow.std.group.HashGroupOperatorDescriptor",
+   "out-arity": 1,
+   "type": "operator"
+  },
+  {
+   "id": "da3da2a7-80c7-47a2-9d72-23b7c8f3d669",
+   "in-arity": 0,
+   "java-class": "edu.uci.ics.aqua.runtime.operators.base.AquaMetaOperatorDescriptor",
+   "micro-operators": ["ets"],
+   "out-arity": 1,
+   "type": "operator"
+  },
+  {
+   "id": "d966ca1f-a412-4b20-96cf-0b8b6c64df9c",
+   "in-arity": 2,
+   "java-class": "edu.uci.ics.hyracks.dataflow.std.join.InMemoryHashJoinOperatorDescriptor",
+   "out-arity": 1,
+   "type": "operator"
+  },
+  {
+   "id": "baa3f1d6-1425-4180-a1de-2878f16e95d5",
+   "in-arity": 1,
+   "java-class": "edu.uci.ics.aqua.runtime.operators.base.AquaMetaOperatorDescriptor",
+   "micro-operators": ["unnest 5 <- edu.uci.ics.asterix.runtime.unnestingfunctions.std.SubsetCollectionDescriptor$1@776be68f"],
+   "out-arity": 1,
+   "type": "operator"
+  },
+  {
+   "id": "6582beec-b6c0-48cc-ab7e-a5f3fc92bfa9",
+   "in-arity": 0,
+   "java-class": "edu.uci.ics.aqua.runtime.operators.base.AquaMetaOperatorDescriptor",
+   "micro-operators": ["ets"],
+   "out-arity": 1,
+   "type": "operator"
+  },
+  {
+   "id": "da4389d3-57a0-41fa-973b-cfdedca126d4",
+   "in-arity": 1,
+   "java-class": "edu.uci.ics.hyracks.dataflow.std.group.PreclusteredGroupOperatorDescriptor",
+   "out-arity": 1,
+   "type": "operator"
+  },
+  {
+   "id": "e0d76180-55c0-41db-9d4e-b0b80eed3922",
+   "in-arity": 1,
+   "java-class": "edu.uci.ics.hyracks.storage.am.btree.dataflow.BTreeSearchOperatorDescriptor",
+   "out-arity": 1,
+   "type": "operator"
+  },
+  {
+   "id": "36b24630-2bdf-47e2-ade4-21f95efde5a8",
+   "in-arity": 0,
+   "java-class": "edu.uci.ics.aqua.runtime.operators.base.AquaMetaOperatorDescriptor",
+   "micro-operators": ["ets"],
+   "out-arity": 1,
+   "type": "operator"
+  },
+  {
+   "id": "b1922618-827e-4276-a89e-5bd257cecd7d",
+   "in-arity": 1,
+   "java-class": "edu.uci.ics.aqua.runtime.operators.base.AquaMetaOperatorDescriptor",
+   "micro-operators": [
+    "assign [2] := [edu.uci.ics.asterix.runtime.evaluators.tagged.FieldAccessByNameEvalFactory@4cedf389]",
+    "assign [3] := [edu.uci.ics.asterix.runtime.evaluators.tagged.functions.LenDescriptor$1@1a0fced4]",
+    "unnest 4 <- edu.uci.ics.asterix.runtime.unnestingfunctions.std.ScanCollectionDescriptor$1@3d3cdaa"
+   ],
+   "out-arity": 1,
+   "type": "operator"
+  },
+  {
+   "id": "93596e19-b912-4071-94a9-512133274499",
+   "in-arity": 1,
+   "java-class": "edu.uci.ics.hyracks.dataflow.std.sort.InMemorySortOperatorDescriptor",
+   "out-arity": 1,
+   "type": "operator"
+  },
+  {
+   "id": "c49457b9-a4be-48d2-8e82-50820e0ca618",
+   "in-arity": 1,
+   "java-class": "edu.uci.ics.hyracks.storage.am.btree.dataflow.BTreeSearchOperatorDescriptor",
+   "out-arity": 1,
+   "type": "operator"
+  },
+  {
+   "id": "7d6eb230-0efc-42a7-b279-98e0258073e6",
+   "in-arity": 1,
+   "java-class": "edu.uci.ics.aqua.runtime.operators.base.AquaMetaOperatorDescriptor",
+   "micro-operators": [
+    "assign [2] := [edu.uci.ics.asterix.runtime.evaluators.tagged.FieldAccessByNameEvalFactory@466355dc]",
+    "assign [3] := [edu.uci.ics.asterix.runtime.evaluators.tagged.functions.LenDescriptor$1@239a029e]",
+    "unnest 4 <- edu.uci.ics.asterix.runtime.unnestingfunctions.std.ScanCollectionDescriptor$1@5421e554"
+   ],
+   "out-arity": 1,
+   "type": "operator"
+  },
+  {
+   "id": "098774e6-f5a6-4fa0-b3cc-a195761bd957",
+   "in-arity": 1,
+   "java-class": "edu.uci.ics.hyracks.dataflow.std.sort.InMemorySortOperatorDescriptor",
+   "out-arity": 1,
+   "type": "operator"
+  },
+  {
+   "id": "ac276d4f-0bd6-468e-b314-da000f9141ea",
+   "in-arity": 1,
+   "java-class": "edu.uci.ics.aqua.runtime.operators.base.AquaMetaOperatorDescriptor",
+   "micro-operators": ["stream-project [3, 1]"],
+   "out-arity": 1,
+   "type": "operator"
+  },
+  {
+   "id": "066a993b-57b5-47ad-8a18-fef27b8e16f4",
+   "in-arity": 1,
+   "java-class": "edu.uci.ics.aqua.runtime.operators.base.AquaMetaOperatorDescriptor",
+   "micro-operators": [
+    "assign [12] := [edu.uci.ics.asterix.runtime.evaluators.tagged.functions.SimilarityDescriptor$1@7d5718f2]",
+    "stream-select edu.uci.ics.asterix.runtime.evaluators.comparisons.ComparisonEvalFactory@6126f827"
+   ],
+   "out-arity": 1,
+   "type": "operator"
+  },
+  {
+   "id": "31c39bd3-6724-42bc-b15f-9331d434598f",
+   "in-arity": 1,
+   "java-class": "edu.uci.ics.hyracks.storage.am.btree.dataflow.BTreeSearchOperatorDescriptor",
+   "out-arity": 1,
+   "type": "operator"
+  },
+  {
+   "id": "0bdd825d-3c80-4769-95ec-3d8ed0fec67a",
+   "in-arity": 1,
+   "java-class": "edu.uci.ics.hyracks.dataflow.std.group.HashGroupOperatorDescriptor",
+   "out-arity": 1,
+   "type": "operator"
+  },
+  {
+   "id": "9c797900-e6cf-44ad-b5e3-869e56fd27ba",
+   "in-arity": 1,
+   "java-class": "edu.uci.ics.hyracks.dataflow.std.sort.InMemorySortOperatorDescriptor",
+   "out-arity": 1,
+   "type": "operator"
+  },
+  {
+   "id": "ede16f1d-7795-4cbc-a605-ccfd25b7bb98",
+   "in-arity": 1,
+   "java-class": "edu.uci.ics.hyracks.storage.am.btree.dataflow.BTreeSearchOperatorDescriptor",
+   "out-arity": 1,
+   "type": "operator"
+  },
+  {
+   "id": "9678a828-3e96-4391-be41-8da45721ca3d",
+   "in-arity": 1,
+   "java-class": "edu.uci.ics.aqua.runtime.operators.base.AquaMetaOperatorDescriptor",
+   "micro-operators": [
+    "assign [2] := [ColumnAccess(0)]",
+    "running-aggregate [3] := [edu.uci.ics.asterix.runtime.runningaggregates.std.TidRunningAggregateDescriptor$1@456dfa45]",
+    "assign [4] := [ConstantEvalFactory true]"
+   ],
+   "out-arity": 1,
+   "type": "operator"
+  }
+ ],
+ "type": "job"
+}
+
diff --git a/asterix-app/src/test/resources/fuzzyjoin/pub/fuzzy-join-aql-plus.png b/asterix-app/src/test/resources/fuzzyjoin/pub/fuzzy-join-aql-plus.png
new file mode 100644
index 0000000..32a3e1e
--- /dev/null
+++ b/asterix-app/src/test/resources/fuzzyjoin/pub/fuzzy-join-aql-plus.png
Binary files differ
diff --git a/asterix-app/src/test/resources/fuzzyjoin/pub/fuzzy-join-aql-plus.ps b/asterix-app/src/test/resources/fuzzyjoin/pub/fuzzy-join-aql-plus.ps
new file mode 100644
index 0000000..a86f6a1
--- /dev/null
+++ b/asterix-app/src/test/resources/fuzzyjoin/pub/fuzzy-join-aql-plus.ps
@@ -0,0 +1,5792 @@
+%!PS-Adobe-3.0
+%%Creator: graphviz version 2.26.3 (20100126.1600)
+%%Title: hyracks_job
+%%Pages: (atend)
+%%BoundingBox: (atend)
+%%EndComments
+save
+%%BeginProlog
+/DotDict 200 dict def
+DotDict begin
+
+/setupLatin1 {
+mark
+/EncodingVector 256 array def
+ EncodingVector 0
+
+ISOLatin1Encoding 0 255 getinterval putinterval
+EncodingVector 45 /hyphen put
+
+% Set up ISO Latin 1 character encoding
+/starnetISO {
+        dup dup findfont dup length dict begin
+        { 1 index /FID ne { def }{ pop pop } ifelse
+        } forall
+        /Encoding EncodingVector def
+        currentdict end definefont
+} def
+/Times-Roman starnetISO def
+/Times-Italic starnetISO def
+/Times-Bold starnetISO def
+/Times-BoldItalic starnetISO def
+/Helvetica starnetISO def
+/Helvetica-Oblique starnetISO def
+/Helvetica-Bold starnetISO def
+/Helvetica-BoldOblique starnetISO def
+/Courier starnetISO def
+/Courier-Oblique starnetISO def
+/Courier-Bold starnetISO def
+/Courier-BoldOblique starnetISO def
+cleartomark
+} bind def
+
+%%BeginResource: procset graphviz 0 0
+/coord-font-family /Times-Roman def
+/default-font-family /Times-Roman def
+/coordfont coord-font-family findfont 8 scalefont def
+
+/InvScaleFactor 1.0 def
+/set_scale {
+       dup 1 exch div /InvScaleFactor exch def
+       scale
+} bind def
+
+% styles
+/solid { [] 0 setdash } bind def
+/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def
+/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def
+/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def
+/bold { 2 setlinewidth } bind def
+/filled { } bind def
+/unfilled { } bind def
+/rounded { } bind def
+/diagonals { } bind def
+
+% hooks for setting color 
+/nodecolor { sethsbcolor } bind def
+/edgecolor { sethsbcolor } bind def
+/graphcolor { sethsbcolor } bind def
+/nopcolor {pop pop pop} bind def
+
+/beginpage {	% i j npages
+	/npages exch def
+	/j exch def
+	/i exch def
+	/str 10 string def
+	npages 1 gt {
+		gsave
+			coordfont setfont
+			0 0 moveto
+			(\() show i str cvs show (,) show j str cvs show (\)) show
+		grestore
+	} if
+} bind def
+
+/set_font {
+	findfont exch
+	scalefont setfont
+} def
+
+% draw text fitted to its expected width
+/alignedtext {			% width text
+	/text exch def
+	/width exch def
+	gsave
+		width 0 gt {
+			[] 0 setdash
+			text stringwidth pop width exch sub text length div 0 text ashow
+		} if
+	grestore
+} def
+
+/boxprim {				% xcorner ycorner xsize ysize
+		4 2 roll
+		moveto
+		2 copy
+		exch 0 rlineto
+		0 exch rlineto
+		pop neg 0 rlineto
+		closepath
+} bind def
+
+/ellipse_path {
+	/ry exch def
+	/rx exch def
+	/y exch def
+	/x exch def
+	matrix currentmatrix
+	newpath
+	x y translate
+	rx ry scale
+	0 0 1 0 360 arc
+	setmatrix
+} bind def
+
+/endpage { showpage } bind def
+/showpage { } def
+
+/layercolorseq
+	[	% layer color sequence - darkest to lightest
+		[0 0 0]
+		[.2 .8 .8]
+		[.4 .8 .8]
+		[.6 .8 .8]
+		[.8 .8 .8]
+	]
+def
+
+/layerlen layercolorseq length def
+
+/setlayer {/maxlayer exch def /curlayer exch def
+	layercolorseq curlayer 1 sub layerlen mod get
+	aload pop sethsbcolor
+	/nodecolor {nopcolor} def
+	/edgecolor {nopcolor} def
+	/graphcolor {nopcolor} def
+} bind def
+
+/onlayer { curlayer ne {invis} if } def
+
+/onlayers {
+	/myupper exch def
+	/mylower exch def
+	curlayer mylower lt
+	curlayer myupper gt
+	or
+	{invis} if
+} def
+
+/curlayer 0 def
+
+%%EndResource
+%%EndProlog
+%%BeginSetup
+14 default-font-family set_font
+1 setmiterlimit
+% /arrowlength 10 def
+% /arrowwidth 5 def
+
+% make sure pdfmark is harmless for PS-interpreters other than Distiller
+/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse
+% make '<<' and '>>' safe on PS Level 1 devices
+/languagelevel where {pop languagelevel}{1} ifelse
+2 lt {
+    userdict (<<) cvn ([) cvn load put
+    userdict (>>) cvn ([) cvn load put
+} if
+
+%%EndSetup
+setupLatin1
+%%Page: 1 1
+%%PageBoundingBox: 36 36 781 1476
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 745 1440 boxprim clip newpath
+0.825688 0.825688 set_scale 0 rotate 47.6 48.6 translate
+% 92f64732-b166-4765-bb0d-3d36a566005a
+gsave
+0.54118 0.25098 0.93333 nodecolor
+newpath 116 420 moveto
+54 420 lineto
+42 408 lineto
+42 388 lineto
+54 376 lineto
+116 376 lineto
+128 388 lineto
+128 408 lineto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 116 420 moveto
+54 420 lineto
+42 408 lineto
+42 388 lineto
+54 376 lineto
+116 376 lineto
+128 388 lineto
+128 408 lineto
+closepath stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 54 420 moveto
+48 420 42 414 42 408 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 54 420 moveto
+48 420 42 414 42 408 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 42 388 moveto
+42 382 48 376 54 376 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 42 388 moveto
+42 382 48 376 54 376 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 116 376 moveto
+122 376 128 382 128 388 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 116 376 moveto
+122 376 128 382 128 388 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 128 408 moveto
+128 414 122 420 116 420 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 128 408 moveto
+128 414 122 420 116 420 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 116 420 moveto
+54 420 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 54 420 moveto
+48 420 42 414 42 408 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 42 408 moveto
+42 388 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 42 388 moveto
+42 382 48 376 54 376 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 54 376 moveto
+116 376 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 116 376 moveto
+122 376 128 382 128 388 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 128 388 moveto
+128 408 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 128 408 moveto
+128 414 122 420 116 420 curveto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+50 403.4 moveto 70 (AquaMeta) alignedtext
+0 0 0 nodecolor
+14 /Times-Roman set_font
+69 385.4 moveto 32 (\(ets\)) alignedtext
+grestore
+% 31c39bd3-6724-42bc-b15f-9331d434598f
+gsave
+0.54118 0.25098 0.93333 nodecolor
+newpath 124 510 moveto
+46 510 lineto
+34 498 lineto
+34 486 lineto
+46 474 lineto
+124 474 lineto
+136 486 lineto
+136 498 lineto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 124 510 moveto
+46 510 lineto
+34 498 lineto
+34 486 lineto
+46 474 lineto
+124 474 lineto
+136 486 lineto
+136 498 lineto
+closepath stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 46 510 moveto
+40 510 34 504 34 498 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 46 510 moveto
+40 510 34 504 34 498 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 34 486 moveto
+34 480 40 474 46 474 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 34 486 moveto
+34 480 40 474 46 474 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 124 474 moveto
+130 474 136 480 136 486 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 124 474 moveto
+130 474 136 480 136 486 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 136 498 moveto
+136 504 130 510 124 510 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 136 498 moveto
+136 504 130 510 124 510 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 124 510 moveto
+46 510 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 46 510 moveto
+40 510 34 504 34 498 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 34 498 moveto
+34 486 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 34 486 moveto
+34 480 40 474 46 474 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 46 474 moveto
+124 474 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 124 474 moveto
+130 474 136 480 136 486 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 136 486 moveto
+136 498 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 136 498 moveto
+136 504 130 510 124 510 curveto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+41.5 488.4 moveto 87 (BTreeSearch) alignedtext
+grestore
+% 92f64732-b166-4765-bb0d-3d36a566005a->31c39bd3-6724-42bc-b15f-9331d434598f
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 85 420.28 moveto
+85 433.34 85 449.97 85 463.93 curveto
+stroke
+0 0 0 edgecolor
+newpath 81.5 463.97 moveto
+85 473.97 lineto
+88.5 463.97 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 81.5 463.97 moveto
+85 473.97 lineto
+88.5 463.97 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+85 443.4 moveto 23 (1:1) alignedtext
+grestore
+% 7b6c5cb6-cd7f-43cb-bf69-37eff4e3200b
+gsave
+0.54118 0.25098 0.93333 nodecolor
+newpath 362 232 moveto
+264 232 lineto
+252 220 lineto
+252 200 lineto
+264 188 lineto
+362 188 lineto
+374 200 lineto
+374 220 lineto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 362 232 moveto
+264 232 lineto
+252 220 lineto
+252 200 lineto
+264 188 lineto
+362 188 lineto
+374 200 lineto
+374 220 lineto
+closepath stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 264 232 moveto
+258 232 252 226 252 220 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 264 232 moveto
+258 232 252 226 252 220 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 252 200 moveto
+252 194 258 188 264 188 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 252 200 moveto
+252 194 258 188 264 188 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 362 188 moveto
+368 188 374 194 374 200 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 362 188 moveto
+368 188 374 194 374 200 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 374 220 moveto
+374 226 368 232 362 232 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 374 220 moveto
+374 226 368 232 362 232 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 362 232 moveto
+264 232 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 264 232 moveto
+258 232 252 226 252 220 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 252 220 moveto
+252 200 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 252 200 moveto
+252 194 258 188 264 188 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 264 188 moveto
+362 188 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 362 188 moveto
+368 188 374 194 374 200 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 374 200 moveto
+374 220 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 374 220 moveto
+374 226 368 232 362 232 curveto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+278 215.4 moveto 70 (AquaMeta) alignedtext
+0 0 0 nodecolor
+14 /Times-Roman set_font
+260 197.4 moveto 106 (\(assign,unnest\)) alignedtext
+grestore
+% 9e589fcc-04fa-4834-ba1f-253470672434
+gsave
+0.54118 0.25098 0.93333 nodecolor
+newpath 348 322 moveto
+278 322 lineto
+266 310 lineto
+266 298 lineto
+278 286 lineto
+348 286 lineto
+360 298 lineto
+360 310 lineto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 348 322 moveto
+278 322 lineto
+266 310 lineto
+266 298 lineto
+278 286 lineto
+348 286 lineto
+360 298 lineto
+360 310 lineto
+closepath stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 278 322 moveto
+272 322 266 316 266 310 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 278 322 moveto
+272 322 266 316 266 310 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 266 298 moveto
+266 292 272 286 278 286 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 266 298 moveto
+266 292 272 286 278 286 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 348 286 moveto
+354 286 360 292 360 298 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 348 286 moveto
+354 286 360 292 360 298 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 360 310 moveto
+360 316 354 322 348 322 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 360 310 moveto
+360 316 354 322 348 322 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 348 322 moveto
+278 322 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 278 322 moveto
+272 322 266 316 266 310 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 266 310 moveto
+266 298 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 266 298 moveto
+266 292 272 286 278 286 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 278 286 moveto
+348 286 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 348 286 moveto
+354 286 360 292 360 298 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 360 298 moveto
+360 310 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 360 310 moveto
+360 316 354 322 348 322 curveto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+274 300.4 moveto 78 (HashGroup) alignedtext
+grestore
+% 7b6c5cb6-cd7f-43cb-bf69-37eff4e3200b->9e589fcc-04fa-4834-ba1f-253470672434
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 313 232.28 moveto
+313 245.34 313 261.97 313 275.93 curveto
+stroke
+0 0 0 edgecolor
+newpath 309.5 275.97 moveto
+313 285.97 lineto
+316.5 275.97 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 309.5 275.97 moveto
+313 285.97 lineto
+316.5 275.97 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+313 255.4 moveto 23 (1:1) alignedtext
+grestore
+% 0bdd825d-3c80-4769-95ec-3d8ed0fec67a
+gsave
+0.54118 0.25098 0.93333 nodecolor
+newpath 348 416 moveto
+278 416 lineto
+266 404 lineto
+266 392 lineto
+278 380 lineto
+348 380 lineto
+360 392 lineto
+360 404 lineto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 348 416 moveto
+278 416 lineto
+266 404 lineto
+266 392 lineto
+278 380 lineto
+348 380 lineto
+360 392 lineto
+360 404 lineto
+closepath stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 278 416 moveto
+272 416 266 410 266 404 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 278 416 moveto
+272 416 266 410 266 404 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 266 392 moveto
+266 386 272 380 278 380 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 266 392 moveto
+266 386 272 380 278 380 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 348 380 moveto
+354 380 360 386 360 392 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 348 380 moveto
+354 380 360 386 360 392 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 360 404 moveto
+360 410 354 416 348 416 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 360 404 moveto
+360 410 354 416 348 416 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 348 416 moveto
+278 416 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 278 416 moveto
+272 416 266 410 266 404 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 266 404 moveto
+266 392 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 266 392 moveto
+266 386 272 380 278 380 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 278 380 moveto
+348 380 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 348 380 moveto
+354 380 360 386 360 392 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 360 392 moveto
+360 404 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 360 404 moveto
+360 410 354 416 348 416 curveto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+274 394.4 moveto 78 (HashGroup) alignedtext
+grestore
+% 9e589fcc-04fa-4834-ba1f-253470672434->0bdd825d-3c80-4769-95ec-3d8ed0fec67a
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 313 322.12 moveto
+313 335.65 313 354.38 313 369.85 curveto
+stroke
+0 0 0 edgecolor
+newpath 309.5 369.93 moveto
+313 379.93 lineto
+316.5 369.93 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 309.5 369.93 moveto
+313 379.93 lineto
+316.5 369.93 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+313 345.4 moveto 67 (M:N Hash) alignedtext
+grestore
+% ff24200a-c665-4ca3-baa8-09fd2ca0ae04
+gsave
+0.54118 0.25098 0.93333 nodecolor
+newpath 619 1254 moveto
+541 1254 lineto
+529 1242 lineto
+529 1230 lineto
+541 1218 lineto
+619 1218 lineto
+631 1230 lineto
+631 1242 lineto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 619 1254 moveto
+541 1254 lineto
+529 1242 lineto
+529 1230 lineto
+541 1218 lineto
+619 1218 lineto
+631 1230 lineto
+631 1242 lineto
+closepath stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 541 1254 moveto
+535 1254 529 1248 529 1242 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 541 1254 moveto
+535 1254 529 1248 529 1242 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 529 1230 moveto
+529 1224 535 1218 541 1218 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 529 1230 moveto
+529 1224 535 1218 541 1218 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 619 1218 moveto
+625 1218 631 1224 631 1230 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 619 1218 moveto
+625 1218 631 1224 631 1230 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 631 1242 moveto
+631 1248 625 1254 619 1254 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 631 1242 moveto
+631 1248 625 1254 619 1254 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 619 1254 moveto
+541 1254 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 541 1254 moveto
+535 1254 529 1248 529 1242 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 529 1242 moveto
+529 1230 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 529 1230 moveto
+529 1224 535 1218 541 1218 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 541 1218 moveto
+619 1218 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 619 1218 moveto
+625 1218 631 1224 631 1230 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 631 1230 moveto
+631 1242 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 631 1242 moveto
+631 1248 625 1254 619 1254 curveto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+536.5 1232.4 moveto 87 (BTreeSearch) alignedtext
+grestore
+% 99f0eeb6-d9f2-4af1-9b1b-6f0df7870db8
+gsave
+0.54118 0.25098 0.93333 nodecolor
+newpath 584 1348 moveto
+462 1348 lineto
+450 1336 lineto
+450 1324 lineto
+462 1312 lineto
+584 1312 lineto
+596 1324 lineto
+596 1336 lineto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 584 1348 moveto
+462 1348 lineto
+450 1336 lineto
+450 1324 lineto
+462 1312 lineto
+584 1312 lineto
+596 1324 lineto
+596 1336 lineto
+closepath stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 462 1348 moveto
+456 1348 450 1342 450 1336 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 462 1348 moveto
+456 1348 450 1342 450 1336 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 450 1324 moveto
+450 1318 456 1312 462 1312 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 450 1324 moveto
+450 1318 456 1312 462 1312 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 584 1312 moveto
+590 1312 596 1318 596 1324 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 584 1312 moveto
+590 1312 596 1318 596 1324 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 596 1336 moveto
+596 1342 590 1348 584 1348 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 596 1336 moveto
+596 1342 590 1348 584 1348 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 584 1348 moveto
+462 1348 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 462 1348 moveto
+456 1348 450 1342 450 1336 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 450 1336 moveto
+450 1324 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 450 1324 moveto
+450 1318 456 1312 462 1312 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 462 1312 moveto
+584 1312 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 584 1312 moveto
+590 1312 596 1318 596 1324 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 596 1324 moveto
+596 1336 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 596 1336 moveto
+596 1342 590 1348 584 1348 curveto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+458 1326.4 moveto 130 (InMemoryHashJoin) alignedtext
+grestore
+% ff24200a-c665-4ca3-baa8-09fd2ca0ae04->99f0eeb6-d9f2-4af1-9b1b-6f0df7870db8
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 569.01 1254.12 moveto
+560.57 1268.04 548.79 1287.47 539.26 1303.18 curveto
+stroke
+0 0 0 edgecolor
+newpath 536.15 1301.57 moveto
+533.96 1311.93 lineto
+542.13 1305.2 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 536.15 1301.57 moveto
+533.96 1311.93 lineto
+542.13 1305.2 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+556 1277.4 moveto 67 (M:N Hash) alignedtext
+grestore
+% c6fc141b-034f-42db-bb33-a2059731e990
+gsave
+0.54118 0.25098 0.93333 nodecolor
+newpath 501 1066 moveto
+379 1066 lineto
+367 1054 lineto
+367 1042 lineto
+379 1030 lineto
+501 1030 lineto
+513 1042 lineto
+513 1054 lineto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 501 1066 moveto
+379 1066 lineto
+367 1054 lineto
+367 1042 lineto
+379 1030 lineto
+501 1030 lineto
+513 1042 lineto
+513 1054 lineto
+closepath stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 379 1066 moveto
+373 1066 367 1060 367 1054 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 379 1066 moveto
+373 1066 367 1060 367 1054 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 367 1042 moveto
+367 1036 373 1030 379 1030 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 367 1042 moveto
+367 1036 373 1030 379 1030 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 501 1030 moveto
+507 1030 513 1036 513 1042 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 501 1030 moveto
+507 1030 513 1036 513 1042 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 513 1054 moveto
+513 1060 507 1066 501 1066 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 513 1054 moveto
+513 1060 507 1066 501 1066 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 501 1066 moveto
+379 1066 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 379 1066 moveto
+373 1066 367 1060 367 1054 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 367 1054 moveto
+367 1042 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 367 1042 moveto
+367 1036 373 1030 379 1030 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 379 1030 moveto
+501 1030 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 501 1030 moveto
+507 1030 513 1036 513 1042 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 513 1042 moveto
+513 1054 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 513 1054 moveto
+513 1060 507 1066 501 1066 curveto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+375 1044.4 moveto 130 (InMemoryHashJoin) alignedtext
+grestore
+% 066a993b-57b5-47ad-8a18-fef27b8e16f4
+gsave
+0.54118 0.25098 0.93333 nodecolor
+newpath 511 1164 moveto
+369 1164 lineto
+357 1152 lineto
+357 1132 lineto
+369 1120 lineto
+511 1120 lineto
+523 1132 lineto
+523 1152 lineto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 511 1164 moveto
+369 1164 lineto
+357 1152 lineto
+357 1132 lineto
+369 1120 lineto
+511 1120 lineto
+523 1132 lineto
+523 1152 lineto
+closepath stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 369 1164 moveto
+363 1164 357 1158 357 1152 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 369 1164 moveto
+363 1164 357 1158 357 1152 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 357 1132 moveto
+357 1126 363 1120 369 1120 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 357 1132 moveto
+357 1126 363 1120 369 1120 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 511 1120 moveto
+517 1120 523 1126 523 1132 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 511 1120 moveto
+517 1120 523 1126 523 1132 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 523 1152 moveto
+523 1158 517 1164 511 1164 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 523 1152 moveto
+523 1158 517 1164 511 1164 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 511 1164 moveto
+369 1164 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 369 1164 moveto
+363 1164 357 1158 357 1152 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 357 1152 moveto
+357 1132 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 357 1132 moveto
+357 1126 363 1120 369 1120 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 369 1120 moveto
+511 1120 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 511 1120 moveto
+517 1120 523 1126 523 1132 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 523 1132 moveto
+523 1152 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 523 1152 moveto
+523 1158 517 1164 511 1164 curveto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+405 1147.4 moveto 70 (AquaMeta) alignedtext
+0 0 0 nodecolor
+14 /Times-Roman set_font
+364.5 1129.4 moveto 151 (\(assign,stream-select\)) alignedtext
+grestore
+% c6fc141b-034f-42db-bb33-a2059731e990->066a993b-57b5-47ad-8a18-fef27b8e16f4
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 440 1066.12 moveto
+440 1078.49 440 1095.2 440 1109.8 curveto
+stroke
+0 0 0 edgecolor
+newpath 436.5 1109.96 moveto
+440 1119.96 lineto
+443.5 1109.96 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 436.5 1109.96 moveto
+440 1119.96 lineto
+443.5 1109.96 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+440 1089.4 moveto 23 (1:1) alignedtext
+grestore
+% bb03494d-e0a9-4898-8b80-64c54da6a20c
+gsave
+0.54118 0.25098 0.93333 nodecolor
+newpath 561 788 moveto
+471 788 lineto
+459 776 lineto
+459 764 lineto
+471 752 lineto
+561 752 lineto
+573 764 lineto
+573 776 lineto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 561 788 moveto
+471 788 lineto
+459 776 lineto
+459 764 lineto
+471 752 lineto
+561 752 lineto
+573 764 lineto
+573 776 lineto
+closepath stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 471 788 moveto
+465 788 459 782 459 776 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 471 788 moveto
+465 788 459 782 459 776 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 459 764 moveto
+459 758 465 752 471 752 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 459 764 moveto
+459 758 465 752 471 752 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 561 752 moveto
+567 752 573 758 573 764 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 561 752 moveto
+567 752 573 758 573 764 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 573 776 moveto
+573 782 567 788 561 788 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 573 776 moveto
+573 782 567 788 561 788 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 561 788 moveto
+471 788 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 471 788 moveto
+465 788 459 782 459 776 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 459 776 moveto
+459 764 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 459 764 moveto
+459 758 465 752 471 752 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 471 752 moveto
+561 752 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 561 752 moveto
+567 752 573 758 573 764 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 573 764 moveto
+573 776 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 573 776 moveto
+573 782 567 788 561 788 curveto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+466.5 766.4 moveto 99 (InMemorySort) alignedtext
+grestore
+% 785d1650-a0b5-4f63-bfca-fe68d292c294
+gsave
+0.54118 0.25098 0.93333 nodecolor
+newpath 572 878 moveto
+450 878 lineto
+438 866 lineto
+438 854 lineto
+450 842 lineto
+572 842 lineto
+584 854 lineto
+584 866 lineto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 572 878 moveto
+450 878 lineto
+438 866 lineto
+438 854 lineto
+450 842 lineto
+572 842 lineto
+584 854 lineto
+584 866 lineto
+closepath stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 450 878 moveto
+444 878 438 872 438 866 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 450 878 moveto
+444 878 438 872 438 866 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 438 854 moveto
+438 848 444 842 450 842 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 438 854 moveto
+438 848 444 842 450 842 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 572 842 moveto
+578 842 584 848 584 854 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 572 842 moveto
+578 842 584 848 584 854 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 584 866 moveto
+584 872 578 878 572 878 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 584 866 moveto
+584 872 578 878 572 878 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 572 878 moveto
+450 878 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 450 878 moveto
+444 878 438 872 438 866 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 438 866 moveto
+438 854 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 438 854 moveto
+438 848 444 842 450 842 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 450 842 moveto
+572 842 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 572 842 moveto
+578 842 584 848 584 854 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 584 854 moveto
+584 866 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 584 866 moveto
+584 872 578 878 572 878 curveto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+446 856.4 moveto 130 (PreclusteredGroup) alignedtext
+grestore
+% bb03494d-e0a9-4898-8b80-64c54da6a20c->785d1650-a0b5-4f63-bfca-fe68d292c294
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 514.99 788.21 moveto
+514.3 800.66 513.37 817.39 512.58 831.58 curveto
+stroke
+0 0 0 edgecolor
+newpath 509.07 831.64 moveto
+512.01 841.81 lineto
+516.06 832.02 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 509.07 831.64 moveto
+512.01 841.81 lineto
+516.06 832.02 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+513 811.4 moveto 23 (1:1) alignedtext
+grestore
+% 4acb8f1a-23ab-474b-9571-8ab12f5aef41
+gsave
+0.54118 0.25098 0.93333 nodecolor
+newpath 656 1540 moveto
+534 1540 lineto
+522 1528 lineto
+522 1516 lineto
+534 1504 lineto
+656 1504 lineto
+668 1516 lineto
+668 1528 lineto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 656 1540 moveto
+534 1540 lineto
+522 1528 lineto
+522 1516 lineto
+534 1504 lineto
+656 1504 lineto
+668 1516 lineto
+668 1528 lineto
+closepath stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 534 1540 moveto
+528 1540 522 1534 522 1528 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 534 1540 moveto
+528 1540 522 1534 522 1528 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 522 1516 moveto
+522 1510 528 1504 534 1504 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 522 1516 moveto
+522 1510 528 1504 534 1504 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 656 1504 moveto
+662 1504 668 1510 668 1516 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 656 1504 moveto
+662 1504 668 1510 668 1516 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 668 1528 moveto
+668 1534 662 1540 656 1540 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 668 1528 moveto
+668 1534 662 1540 656 1540 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 656 1540 moveto
+534 1540 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 534 1540 moveto
+528 1540 522 1534 522 1528 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 522 1528 moveto
+522 1516 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 522 1516 moveto
+522 1510 528 1504 534 1504 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 534 1504 moveto
+656 1504 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 656 1504 moveto
+662 1504 668 1510 668 1516 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 668 1516 moveto
+668 1528 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 668 1528 moveto
+668 1534 662 1540 656 1540 curveto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+530 1518.4 moveto 130 (InMemoryHashJoin) alignedtext
+grestore
+% a14d6687-2c52-41f9-95ed-ab9f4b451180
+gsave
+0.54118 0.25098 0.93333 nodecolor
+newpath 670 1638 moveto
+520 1638 lineto
+508 1626 lineto
+508 1606 lineto
+520 1594 lineto
+670 1594 lineto
+682 1606 lineto
+682 1626 lineto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 670 1638 moveto
+520 1638 lineto
+508 1626 lineto
+508 1606 lineto
+520 1594 lineto
+670 1594 lineto
+682 1606 lineto
+682 1626 lineto
+closepath stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 520 1638 moveto
+514 1638 508 1632 508 1626 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 520 1638 moveto
+514 1638 508 1632 508 1626 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 508 1606 moveto
+508 1600 514 1594 520 1594 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 508 1606 moveto
+508 1600 514 1594 520 1594 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 670 1594 moveto
+676 1594 682 1600 682 1606 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 670 1594 moveto
+676 1594 682 1600 682 1606 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 682 1626 moveto
+682 1632 676 1638 670 1638 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 682 1626 moveto
+682 1632 676 1638 670 1638 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 670 1638 moveto
+520 1638 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 520 1638 moveto
+514 1638 508 1632 508 1626 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 508 1626 moveto
+508 1606 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 508 1606 moveto
+508 1600 514 1594 520 1594 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 520 1594 moveto
+670 1594 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 670 1594 moveto
+676 1594 682 1600 682 1606 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 682 1606 moveto
+682 1626 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 682 1626 moveto
+682 1632 676 1638 670 1638 curveto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+560 1621.4 moveto 70 (AquaMeta) alignedtext
+0 0 0 nodecolor
+14 /Times-Roman set_font
+515.5 1603.4 moveto 159 (\(assign,stream-project\)) alignedtext
+grestore
+% 4acb8f1a-23ab-474b-9571-8ab12f5aef41->a14d6687-2c52-41f9-95ed-ab9f4b451180
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 595 1540.12 moveto
+595 1552.49 595 1569.2 595 1583.8 curveto
+stroke
+0 0 0 edgecolor
+newpath 591.5 1583.96 moveto
+595 1593.96 lineto
+598.5 1583.96 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 591.5 1583.96 moveto
+595 1593.96 lineto
+598.5 1583.96 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+595 1563.4 moveto 23 (1:1) alignedtext
+grestore
+% 19350ade-da75-4a1d-90e7-4f6753ef2732
+gsave
+0.54118 0.25098 0.93333 nodecolor
+newpath 630 232 moveto
+532 232 lineto
+520 220 lineto
+520 200 lineto
+532 188 lineto
+630 188 lineto
+642 200 lineto
+642 220 lineto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 630 232 moveto
+532 232 lineto
+520 220 lineto
+520 200 lineto
+532 188 lineto
+630 188 lineto
+642 200 lineto
+642 220 lineto
+closepath stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 532 232 moveto
+526 232 520 226 520 220 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 532 232 moveto
+526 232 520 226 520 220 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 520 200 moveto
+520 194 526 188 532 188 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 520 200 moveto
+520 194 526 188 532 188 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 630 188 moveto
+636 188 642 194 642 200 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 630 188 moveto
+636 188 642 194 642 200 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 642 220 moveto
+642 226 636 232 630 232 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 642 220 moveto
+642 226 636 232 630 232 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 630 232 moveto
+532 232 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 532 232 moveto
+526 232 520 226 520 220 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 520 220 moveto
+520 200 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 520 200 moveto
+520 194 526 188 532 188 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 532 188 moveto
+630 188 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 630 188 moveto
+636 188 642 194 642 200 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 642 200 moveto
+642 220 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 642 220 moveto
+642 226 636 232 630 232 curveto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+546 215.4 moveto 70 (AquaMeta) alignedtext
+0 0 0 nodecolor
+14 /Times-Roman set_font
+528 197.4 moveto 106 (\(assign,unnest\)) alignedtext
+grestore
+% 66f6f703-1a20-40b2-a3a3-514412cabb03
+gsave
+0.54118 0.25098 0.93333 nodecolor
+newpath 616 322 moveto
+546 322 lineto
+534 310 lineto
+534 298 lineto
+546 286 lineto
+616 286 lineto
+628 298 lineto
+628 310 lineto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 616 322 moveto
+546 322 lineto
+534 310 lineto
+534 298 lineto
+546 286 lineto
+616 286 lineto
+628 298 lineto
+628 310 lineto
+closepath stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 546 322 moveto
+540 322 534 316 534 310 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 546 322 moveto
+540 322 534 316 534 310 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 534 298 moveto
+534 292 540 286 546 286 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 534 298 moveto
+534 292 540 286 546 286 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 616 286 moveto
+622 286 628 292 628 298 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 616 286 moveto
+622 286 628 292 628 298 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 628 310 moveto
+628 316 622 322 616 322 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 628 310 moveto
+628 316 622 322 616 322 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 616 322 moveto
+546 322 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 546 322 moveto
+540 322 534 316 534 310 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 534 310 moveto
+534 298 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 534 298 moveto
+534 292 540 286 546 286 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 546 286 moveto
+616 286 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 616 286 moveto
+622 286 628 292 628 298 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 628 298 moveto
+628 310 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 628 310 moveto
+628 316 622 322 616 322 curveto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+542 300.4 moveto 78 (HashGroup) alignedtext
+grestore
+% 19350ade-da75-4a1d-90e7-4f6753ef2732->66f6f703-1a20-40b2-a3a3-514412cabb03
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 581 232.28 moveto
+581 245.34 581 261.97 581 275.93 curveto
+stroke
+0 0 0 edgecolor
+newpath 577.5 275.97 moveto
+581 285.97 lineto
+584.5 275.97 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 577.5 275.97 moveto
+581 285.97 lineto
+584.5 275.97 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+581 255.4 moveto 23 (1:1) alignedtext
+grestore
+% 421e3891-f7b0-4a50-a1d0-5c82099823f2
+gsave
+0.54118 0.25098 0.93333 nodecolor
+newpath 523 976 moveto
+461 976 lineto
+449 964 lineto
+449 944 lineto
+461 932 lineto
+523 932 lineto
+535 944 lineto
+535 964 lineto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 523 976 moveto
+461 976 lineto
+449 964 lineto
+449 944 lineto
+461 932 lineto
+523 932 lineto
+535 944 lineto
+535 964 lineto
+closepath stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 461 976 moveto
+455 976 449 970 449 964 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 461 976 moveto
+455 976 449 970 449 964 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 449 944 moveto
+449 938 455 932 461 932 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 449 944 moveto
+449 938 455 932 461 932 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 523 932 moveto
+529 932 535 938 535 944 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 523 932 moveto
+529 932 535 938 535 944 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 535 964 moveto
+535 970 529 976 523 976 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 535 964 moveto
+535 970 529 976 523 976 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 523 976 moveto
+461 976 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 461 976 moveto
+455 976 449 970 449 964 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 449 964 moveto
+449 944 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 449 944 moveto
+449 938 455 932 461 932 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 461 932 moveto
+523 932 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 523 932 moveto
+529 932 535 938 535 944 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 535 944 moveto
+535 964 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 535 964 moveto
+535 970 529 976 523 976 curveto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+457 959.4 moveto 70 (AquaMeta) alignedtext
+0 0 0 nodecolor
+14 /Times-Roman set_font
+462.5 941.4 moveto 59 (\(unnest\)) alignedtext
+grestore
+% 421e3891-f7b0-4a50-a1d0-5c82099823f2->c6fc141b-034f-42db-bb33-a2059731e990
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 482.2 976.13 moveto
+477.11 987.1 470.6 1000.45 464 1012 curveto
+462.23 1015.09 460.3 1018.28 458.31 1021.41 curveto
+stroke
+0 0 0 edgecolor
+newpath 455.25 1019.71 moveto
+452.71 1029.99 lineto
+461.11 1023.54 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 455.25 1019.71 moveto
+452.71 1029.99 lineto
+461.11 1023.54 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+473 999.4 moveto 67 (M:N Hash) alignedtext
+grestore
+% 21db32ee-7d3e-42f5-9541-2145ef2e55e2
+gsave
+0.54118 0.25098 0.93333 nodecolor
+newpath 374 698 moveto
+252 698 lineto
+240 686 lineto
+240 674 lineto
+252 662 lineto
+374 662 lineto
+386 674 lineto
+386 686 lineto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 374 698 moveto
+252 698 lineto
+240 686 lineto
+240 674 lineto
+252 662 lineto
+374 662 lineto
+386 674 lineto
+386 686 lineto
+closepath stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 252 698 moveto
+246 698 240 692 240 686 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 252 698 moveto
+246 698 240 692 240 686 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 240 674 moveto
+240 668 246 662 252 662 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 240 674 moveto
+240 668 246 662 252 662 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 374 662 moveto
+380 662 386 668 386 674 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 374 662 moveto
+380 662 386 668 386 674 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 386 686 moveto
+386 692 380 698 374 698 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 386 686 moveto
+386 692 380 698 374 698 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 374 698 moveto
+252 698 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 252 698 moveto
+246 698 240 692 240 686 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 240 686 moveto
+240 674 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 240 674 moveto
+240 668 246 662 252 662 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 252 662 moveto
+374 662 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 374 662 moveto
+380 662 386 668 386 674 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 386 674 moveto
+386 686 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 386 686 moveto
+386 692 380 698 374 698 curveto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+248 676.4 moveto 130 (InMemoryHashJoin) alignedtext
+grestore
+% 098774e6-f5a6-4fa0-b3cc-a195761bd957
+gsave
+0.54118 0.25098 0.93333 nodecolor
+newpath 385 788 moveto
+295 788 lineto
+283 776 lineto
+283 764 lineto
+295 752 lineto
+385 752 lineto
+397 764 lineto
+397 776 lineto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 385 788 moveto
+295 788 lineto
+283 776 lineto
+283 764 lineto
+295 752 lineto
+385 752 lineto
+397 764 lineto
+397 776 lineto
+closepath stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 295 788 moveto
+289 788 283 782 283 776 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 295 788 moveto
+289 788 283 782 283 776 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 283 764 moveto
+283 758 289 752 295 752 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 283 764 moveto
+283 758 289 752 295 752 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 385 752 moveto
+391 752 397 758 397 764 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 385 752 moveto
+391 752 397 758 397 764 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 397 776 moveto
+397 782 391 788 385 788 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 397 776 moveto
+397 782 391 788 385 788 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 385 788 moveto
+295 788 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 295 788 moveto
+289 788 283 782 283 776 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 283 776 moveto
+283 764 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 283 764 moveto
+283 758 289 752 295 752 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 295 752 moveto
+385 752 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 385 752 moveto
+391 752 397 758 397 764 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 397 764 moveto
+397 776 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 397 776 moveto
+397 782 391 788 385 788 curveto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+290.5 766.4 moveto 99 (InMemorySort) alignedtext
+grestore
+% 21db32ee-7d3e-42f5-9541-2145ef2e55e2->098774e6-f5a6-4fa0-b3cc-a195761bd957
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 318.46 698.21 moveto
+322.23 710.78 327.32 727.72 331.6 742 curveto
+stroke
+0 0 0 edgecolor
+newpath 328.32 743.24 moveto
+334.54 751.81 lineto
+335.02 741.23 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 328.32 743.24 moveto
+334.54 751.81 lineto
+335.02 741.23 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+328 721.4 moveto 67 (M:N Hash) alignedtext
+grestore
+% ac276d4f-0bd6-468e-b314-da000f9141ea
+gsave
+0.54118 0.25098 0.93333 nodecolor
+newpath 576 1450 moveto
+472 1450 lineto
+460 1438 lineto
+460 1418 lineto
+472 1406 lineto
+576 1406 lineto
+588 1418 lineto
+588 1438 lineto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 576 1450 moveto
+472 1450 lineto
+460 1438 lineto
+460 1418 lineto
+472 1406 lineto
+576 1406 lineto
+588 1418 lineto
+588 1438 lineto
+closepath stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 472 1450 moveto
+466 1450 460 1444 460 1438 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 472 1450 moveto
+466 1450 460 1444 460 1438 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 460 1418 moveto
+460 1412 466 1406 472 1406 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 460 1418 moveto
+460 1412 466 1406 472 1406 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 576 1406 moveto
+582 1406 588 1412 588 1418 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 576 1406 moveto
+582 1406 588 1412 588 1418 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 588 1438 moveto
+588 1444 582 1450 576 1450 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 588 1438 moveto
+588 1444 582 1450 576 1450 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 576 1450 moveto
+472 1450 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 472 1450 moveto
+466 1450 460 1444 460 1438 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 460 1438 moveto
+460 1418 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 460 1418 moveto
+460 1412 466 1406 472 1406 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 472 1406 moveto
+576 1406 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 576 1406 moveto
+582 1406 588 1412 588 1418 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 588 1418 moveto
+588 1438 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 588 1438 moveto
+588 1444 582 1450 576 1450 curveto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+489 1433.4 moveto 70 (AquaMeta) alignedtext
+0 0 0 nodecolor
+14 /Times-Roman set_font
+468 1415.4 moveto 112 (\(stream-project\)) alignedtext
+grestore
+% 99f0eeb6-d9f2-4af1-9b1b-6f0df7870db8->ac276d4f-0bd6-468e-b314-da000f9141ea
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 523.19 1348.43 moveto
+523.32 1361.68 523.51 1379.88 523.67 1395.54 curveto
+stroke
+0 0 0 edgecolor
+newpath 520.17 1395.91 moveto
+523.77 1405.88 lineto
+527.17 1395.84 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 520.17 1395.91 moveto
+523.77 1405.88 lineto
+527.17 1395.84 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+523 1375.4 moveto 23 (1:1) alignedtext
+grestore
+% 0066c7f5-f720-4098-8908-bebee74a409d
+gsave
+0.54118 0.25098 0.93333 nodecolor
+newpath 696 1446 moveto
+618 1446 lineto
+606 1434 lineto
+606 1422 lineto
+618 1410 lineto
+696 1410 lineto
+708 1422 lineto
+708 1434 lineto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 696 1446 moveto
+618 1446 lineto
+606 1434 lineto
+606 1422 lineto
+618 1410 lineto
+696 1410 lineto
+708 1422 lineto
+708 1434 lineto
+closepath stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 618 1446 moveto
+612 1446 606 1440 606 1434 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 618 1446 moveto
+612 1446 606 1440 606 1434 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 606 1422 moveto
+606 1416 612 1410 618 1410 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 606 1422 moveto
+606 1416 612 1410 618 1410 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 696 1410 moveto
+702 1410 708 1416 708 1422 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 696 1410 moveto
+702 1410 708 1416 708 1422 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 708 1434 moveto
+708 1440 702 1446 696 1446 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 708 1434 moveto
+708 1440 702 1446 696 1446 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 696 1446 moveto
+618 1446 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 618 1446 moveto
+612 1446 606 1440 606 1434 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 606 1434 moveto
+606 1422 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 606 1422 moveto
+606 1416 612 1410 618 1410 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 618 1410 moveto
+696 1410 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 696 1410 moveto
+702 1410 708 1416 708 1422 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 708 1422 moveto
+708 1434 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 708 1434 moveto
+708 1440 702 1446 696 1446 curveto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+613.5 1424.4 moveto 87 (BTreeSearch) alignedtext
+grestore
+% 0066c7f5-f720-4098-8908-bebee74a409d->4acb8f1a-23ab-474b-9571-8ab12f5aef41
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 645.05 1446.12 moveto
+635.87 1460.04 623.05 1479.47 612.69 1495.18 curveto
+stroke
+0 0 0 edgecolor
+newpath 609.5 1493.66 moveto
+606.92 1503.93 lineto
+615.35 1497.51 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 609.5 1493.66 moveto
+606.92 1503.93 lineto
+615.35 1497.51 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+629 1473.4 moveto 67 (M:N Hash) alignedtext
+grestore
+% b504c4ff-8226-43c2-b06f-a9ad59e54312
+gsave
+0.54118 0.25098 0.93333 nodecolor
+newpath 616 416 moveto
+546 416 lineto
+534 404 lineto
+534 392 lineto
+546 380 lineto
+616 380 lineto
+628 392 lineto
+628 404 lineto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 616 416 moveto
+546 416 lineto
+534 404 lineto
+534 392 lineto
+546 380 lineto
+616 380 lineto
+628 392 lineto
+628 404 lineto
+closepath stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 546 416 moveto
+540 416 534 410 534 404 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 546 416 moveto
+540 416 534 410 534 404 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 534 392 moveto
+534 386 540 380 546 380 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 534 392 moveto
+534 386 540 380 546 380 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 616 380 moveto
+622 380 628 386 628 392 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 616 380 moveto
+622 380 628 386 628 392 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 628 404 moveto
+628 410 622 416 616 416 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 628 404 moveto
+628 410 622 416 616 416 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 616 416 moveto
+546 416 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 546 416 moveto
+540 416 534 410 534 404 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 534 404 moveto
+534 392 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 534 392 moveto
+534 386 540 380 546 380 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 546 380 moveto
+616 380 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 616 380 moveto
+622 380 628 386 628 392 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 628 392 moveto
+628 404 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 628 404 moveto
+628 410 622 416 616 416 curveto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+542 394.4 moveto 78 (HashGroup) alignedtext
+grestore
+% 9c797900-e6cf-44ad-b5e3-869e56fd27ba
+gsave
+0.54118 0.25098 0.93333 nodecolor
+newpath 626 510 moveto
+536 510 lineto
+524 498 lineto
+524 486 lineto
+536 474 lineto
+626 474 lineto
+638 486 lineto
+638 498 lineto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 626 510 moveto
+536 510 lineto
+524 498 lineto
+524 486 lineto
+536 474 lineto
+626 474 lineto
+638 486 lineto
+638 498 lineto
+closepath stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 536 510 moveto
+530 510 524 504 524 498 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 536 510 moveto
+530 510 524 504 524 498 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 524 486 moveto
+524 480 530 474 536 474 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 524 486 moveto
+524 480 530 474 536 474 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 626 474 moveto
+632 474 638 480 638 486 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 626 474 moveto
+632 474 638 480 638 486 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 638 498 moveto
+638 504 632 510 626 510 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 638 498 moveto
+638 504 632 510 626 510 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 626 510 moveto
+536 510 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 536 510 moveto
+530 510 524 504 524 498 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 524 498 moveto
+524 486 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 524 486 moveto
+524 480 530 474 536 474 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 536 474 moveto
+626 474 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 626 474 moveto
+632 474 638 480 638 486 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 638 486 moveto
+638 498 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 638 498 moveto
+638 504 632 510 626 510 curveto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+531.5 488.4 moveto 99 (InMemorySort) alignedtext
+grestore
+% b504c4ff-8226-43c2-b06f-a9ad59e54312->9c797900-e6cf-44ad-b5e3-869e56fd27ba
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 581 416.12 moveto
+581 429.65 581 448.38 581 463.85 curveto
+stroke
+0 0 0 edgecolor
+newpath 577.5 463.93 moveto
+581 473.93 lineto
+584.5 463.93 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 577.5 463.93 moveto
+581 473.93 lineto
+584.5 463.93 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+581 443.4 moveto 23 (1:1) alignedtext
+grestore
+% f22b2397-d586-4894-8709-99da302fdc56
+gsave
+0.54118 0.25098 0.93333 nodecolor
+newpath 631 1736 moveto
+559 1736 lineto
+547 1724 lineto
+547 1704 lineto
+559 1692 lineto
+631 1692 lineto
+643 1704 lineto
+643 1724 lineto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 631 1736 moveto
+559 1736 lineto
+547 1724 lineto
+547 1704 lineto
+559 1692 lineto
+631 1692 lineto
+643 1704 lineto
+643 1724 lineto
+closepath stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 559 1736 moveto
+553 1736 547 1730 547 1724 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 559 1736 moveto
+553 1736 547 1730 547 1724 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 547 1704 moveto
+547 1698 553 1692 559 1692 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 547 1704 moveto
+547 1698 553 1692 559 1692 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 631 1692 moveto
+637 1692 643 1698 643 1704 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 631 1692 moveto
+637 1692 643 1698 643 1704 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 643 1724 moveto
+643 1730 637 1736 631 1736 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 643 1724 moveto
+643 1730 637 1736 631 1736 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 631 1736 moveto
+559 1736 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 559 1736 moveto
+553 1736 547 1730 547 1724 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 547 1724 moveto
+547 1704 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 547 1704 moveto
+547 1698 553 1692 559 1692 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 559 1692 moveto
+631 1692 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 631 1692 moveto
+637 1692 643 1698 643 1704 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 643 1704 moveto
+643 1724 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 643 1724 moveto
+643 1730 637 1736 631 1736 curveto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+560 1719.4 moveto 70 (AquaMeta) alignedtext
+0 0 0 nodecolor
+14 /Times-Roman set_font
+554.5 1701.4 moveto 81 (\(sink-write\)) alignedtext
+grestore
+% a14d6687-2c52-41f9-95ed-ab9f4b451180->f22b2397-d586-4894-8709-99da302fdc56
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 595 1638.24 moveto
+595 1651.02 595 1667.3 595 1681.5 curveto
+stroke
+0 0 0 edgecolor
+newpath 591.5 1681.85 moveto
+595 1691.85 lineto
+598.5 1681.85 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 591.5 1681.85 moveto
+595 1691.85 lineto
+598.5 1681.85 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+595 1661.4 moveto 94 (M:N Replicate) alignedtext
+grestore
+% 785d1650-a0b5-4f63-bfca-fe68d292c294->421e3891-f7b0-4a50-a1d0-5c82099823f2
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 507.34 878.12 moveto
+504.84 890.49 501.46 907.2 498.51 921.8 curveto
+stroke
+0 0 0 edgecolor
+newpath 495.01 921.47 moveto
+496.45 931.96 lineto
+501.87 922.85 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 495.01 921.47 moveto
+496.45 931.96 lineto
+501.87 922.85 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+503 901.4 moveto 23 (1:1) alignedtext
+grestore
+% 66f6f703-1a20-40b2-a3a3-514412cabb03->b504c4ff-8226-43c2-b06f-a9ad59e54312
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 581 322.12 moveto
+581 335.65 581 354.38 581 369.85 curveto
+stroke
+0 0 0 edgecolor
+newpath 577.5 369.93 moveto
+581 379.93 lineto
+584.5 369.93 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 577.5 369.93 moveto
+581 379.93 lineto
+584.5 369.93 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+581 345.4 moveto 67 (M:N Hash) alignedtext
+grestore
+% c66e50f0-f068-43fd-833e-32f9b6117f2f
+gsave
+0.54118 0.25098 0.93333 nodecolor
+newpath 612 44 moveto
+550 44 lineto
+538 32 lineto
+538 12 lineto
+550 0 lineto
+612 0 lineto
+624 12 lineto
+624 32 lineto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 612 44 moveto
+550 44 lineto
+538 32 lineto
+538 12 lineto
+550 0 lineto
+612 0 lineto
+624 12 lineto
+624 32 lineto
+closepath stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 550 44 moveto
+544 44 538 38 538 32 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 550 44 moveto
+544 44 538 38 538 32 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 538 12 moveto
+538 6 544 0 550 0 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 538 12 moveto
+538 6 544 0 550 0 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 612 0 moveto
+618 0 624 6 624 12 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 612 0 moveto
+618 0 624 6 624 12 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 624 32 moveto
+624 38 618 44 612 44 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 624 32 moveto
+624 38 618 44 612 44 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 612 44 moveto
+550 44 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 550 44 moveto
+544 44 538 38 538 32 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 538 32 moveto
+538 12 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 538 12 moveto
+538 6 544 0 550 0 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 550 0 moveto
+612 0 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 612 0 moveto
+618 0 624 6 624 12 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 624 12 moveto
+624 32 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 624 32 moveto
+624 38 618 44 612 44 curveto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+546 27.4 moveto 70 (AquaMeta) alignedtext
+0 0 0 nodecolor
+14 /Times-Roman set_font
+565 9.4 moveto 32 (\(ets\)) alignedtext
+grestore
+% e0d76180-55c0-41db-9d4e-b0b80eed3922
+gsave
+0.54118 0.25098 0.93333 nodecolor
+newpath 620 134 moveto
+542 134 lineto
+530 122 lineto
+530 110 lineto
+542 98 lineto
+620 98 lineto
+632 110 lineto
+632 122 lineto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 620 134 moveto
+542 134 lineto
+530 122 lineto
+530 110 lineto
+542 98 lineto
+620 98 lineto
+632 110 lineto
+632 122 lineto
+closepath stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 542 134 moveto
+536 134 530 128 530 122 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 542 134 moveto
+536 134 530 128 530 122 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 530 110 moveto
+530 104 536 98 542 98 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 530 110 moveto
+530 104 536 98 542 98 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 620 98 moveto
+626 98 632 104 632 110 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 620 98 moveto
+626 98 632 104 632 110 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 632 122 moveto
+632 128 626 134 620 134 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 632 122 moveto
+632 128 626 134 620 134 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 620 134 moveto
+542 134 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 542 134 moveto
+536 134 530 128 530 122 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 530 122 moveto
+530 110 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 530 110 moveto
+530 104 536 98 542 98 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 542 98 moveto
+620 98 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 620 98 moveto
+626 98 632 104 632 110 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 632 110 moveto
+632 122 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 632 122 moveto
+632 128 626 134 620 134 curveto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+537.5 112.4 moveto 87 (BTreeSearch) alignedtext
+grestore
+% c66e50f0-f068-43fd-833e-32f9b6117f2f->e0d76180-55c0-41db-9d4e-b0b80eed3922
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 581 44.28 moveto
+581 57.34 581 73.97 581 87.93 curveto
+stroke
+0 0 0 edgecolor
+newpath 577.5 87.97 moveto
+581 97.97 lineto
+584.5 87.97 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 577.5 87.97 moveto
+581 97.97 lineto
+584.5 87.97 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+581 67.4 moveto 23 (1:1) alignedtext
+grestore
+% 1da790c0-ca3c-4833-8280-5c7c2d0ac23c
+gsave
+0.54118 0.25098 0.93333 nodecolor
+newpath 694 608 moveto
+468 608 lineto
+456 596 lineto
+456 576 lineto
+468 564 lineto
+694 564 lineto
+706 576 lineto
+706 596 lineto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 694 608 moveto
+468 608 lineto
+456 596 lineto
+456 576 lineto
+468 564 lineto
+694 564 lineto
+706 576 lineto
+706 596 lineto
+closepath stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 468 608 moveto
+462 608 456 602 456 596 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 468 608 moveto
+462 608 456 602 456 596 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 456 576 moveto
+456 570 462 564 468 564 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 456 576 moveto
+456 570 462 564 468 564 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 694 564 moveto
+700 564 706 570 706 576 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 694 564 moveto
+700 564 706 570 706 576 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 706 596 moveto
+706 602 700 608 694 608 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 706 596 moveto
+706 602 700 608 694 608 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 694 608 moveto
+468 608 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 468 608 moveto
+462 608 456 602 456 596 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 456 596 moveto
+456 576 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 456 576 moveto
+456 570 462 564 468 564 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 468 564 moveto
+694 564 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 694 564 moveto
+700 564 706 570 706 576 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 706 576 moveto
+706 596 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 706 596 moveto
+706 602 700 608 694 608 curveto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+546 591.4 moveto 70 (AquaMeta) alignedtext
+0 0 0 nodecolor
+14 /Times-Roman set_font
+463.5 573.4 moveto 235 (\(assign,running-aggregate,assign\)) alignedtext
+grestore
+% d966ca1f-a412-4b20-96cf-0b8b6c64df9c
+gsave
+0.54118 0.25098 0.93333 nodecolor
+newpath 642 698 moveto
+520 698 lineto
+508 686 lineto
+508 674 lineto
+520 662 lineto
+642 662 lineto
+654 674 lineto
+654 686 lineto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 642 698 moveto
+520 698 lineto
+508 686 lineto
+508 674 lineto
+520 662 lineto
+642 662 lineto
+654 674 lineto
+654 686 lineto
+closepath stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 520 698 moveto
+514 698 508 692 508 686 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 520 698 moveto
+514 698 508 692 508 686 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 508 674 moveto
+508 668 514 662 520 662 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 508 674 moveto
+508 668 514 662 520 662 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 642 662 moveto
+648 662 654 668 654 674 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 642 662 moveto
+648 662 654 668 654 674 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 654 686 moveto
+654 692 648 698 642 698 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 654 686 moveto
+654 692 648 698 642 698 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 642 698 moveto
+520 698 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 520 698 moveto
+514 698 508 692 508 686 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 508 686 moveto
+508 674 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 508 674 moveto
+508 668 514 662 520 662 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 520 662 moveto
+642 662 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 642 662 moveto
+648 662 654 668 654 674 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 654 674 moveto
+654 686 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 654 686 moveto
+654 692 648 698 642 698 curveto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+516 676.4 moveto 130 (InMemoryHashJoin) alignedtext
+grestore
+% 1da790c0-ca3c-4833-8280-5c7c2d0ac23c->d966ca1f-a412-4b20-96cf-0b8b6c64df9c
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 581 608.28 moveto
+581 621.34 581 637.97 581 651.93 curveto
+stroke
+0 0 0 edgecolor
+newpath 577.5 651.97 moveto
+581 661.97 lineto
+584.5 651.97 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 577.5 651.97 moveto
+581 661.97 lineto
+584.5 651.97 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+581 631.4 moveto 67 (M:N Hash) alignedtext
+grestore
+% 13342363-c3c6-469c-80b6-356397c95f53
+gsave
+0.54118 0.25098 0.93333 nodecolor
+newpath 615 1164 moveto
+553 1164 lineto
+541 1152 lineto
+541 1132 lineto
+553 1120 lineto
+615 1120 lineto
+627 1132 lineto
+627 1152 lineto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 615 1164 moveto
+553 1164 lineto
+541 1152 lineto
+541 1132 lineto
+553 1120 lineto
+615 1120 lineto
+627 1132 lineto
+627 1152 lineto
+closepath stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 553 1164 moveto
+547 1164 541 1158 541 1152 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 553 1164 moveto
+547 1164 541 1158 541 1152 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 541 1132 moveto
+541 1126 547 1120 553 1120 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 541 1132 moveto
+541 1126 547 1120 553 1120 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 615 1120 moveto
+621 1120 627 1126 627 1132 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 615 1120 moveto
+621 1120 627 1126 627 1132 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 627 1152 moveto
+627 1158 621 1164 615 1164 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 627 1152 moveto
+627 1158 621 1164 615 1164 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 615 1164 moveto
+553 1164 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 553 1164 moveto
+547 1164 541 1158 541 1152 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 541 1152 moveto
+541 1132 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 541 1132 moveto
+541 1126 547 1120 553 1120 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 553 1120 moveto
+615 1120 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 615 1120 moveto
+621 1120 627 1126 627 1132 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 627 1132 moveto
+627 1152 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 627 1152 moveto
+627 1158 621 1164 615 1164 curveto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+549 1147.4 moveto 70 (AquaMeta) alignedtext
+0 0 0 nodecolor
+14 /Times-Roman set_font
+568 1129.4 moveto 32 (\(ets\)) alignedtext
+grestore
+% 13342363-c3c6-469c-80b6-356397c95f53->ff24200a-c665-4ca3-baa8-09fd2ca0ae04
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 583.05 1164.28 moveto
+582.5 1177.34 581.79 1193.97 581.19 1207.93 curveto
+stroke
+0 0 0 edgecolor
+newpath 577.7 1207.84 moveto
+580.77 1217.97 lineto
+584.69 1208.13 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 577.7 1207.84 moveto
+580.77 1217.97 lineto
+584.69 1208.13 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+582 1187.4 moveto 23 (1:1) alignedtext
+grestore
+% 769e1d5c-5b5b-4437-8764-a6e0bcf8d210
+gsave
+0.54118 0.25098 0.93333 nodecolor
+newpath 496 1254 moveto
+426 1254 lineto
+414 1242 lineto
+414 1230 lineto
+426 1218 lineto
+496 1218 lineto
+508 1230 lineto
+508 1242 lineto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 496 1254 moveto
+426 1254 lineto
+414 1242 lineto
+414 1230 lineto
+426 1218 lineto
+496 1218 lineto
+508 1230 lineto
+508 1242 lineto
+closepath stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 426 1254 moveto
+420 1254 414 1248 414 1242 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 426 1254 moveto
+420 1254 414 1248 414 1242 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 414 1230 moveto
+414 1224 420 1218 426 1218 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 414 1230 moveto
+414 1224 420 1218 426 1218 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 496 1218 moveto
+502 1218 508 1224 508 1230 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 496 1218 moveto
+502 1218 508 1224 508 1230 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 508 1242 moveto
+508 1248 502 1254 496 1254 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 508 1242 moveto
+508 1248 502 1254 496 1254 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 496 1254 moveto
+426 1254 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 426 1254 moveto
+420 1254 414 1248 414 1242 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 414 1242 moveto
+414 1230 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 414 1230 moveto
+414 1224 420 1218 426 1218 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 426 1218 moveto
+496 1218 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 496 1218 moveto
+502 1218 508 1224 508 1230 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 508 1230 moveto
+508 1242 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 508 1242 moveto
+508 1248 502 1254 496 1254 curveto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+422 1232.4 moveto 78 (HashGroup) alignedtext
+grestore
+% 769e1d5c-5b5b-4437-8764-a6e0bcf8d210->99f0eeb6-d9f2-4af1-9b1b-6f0df7870db8
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 463.71 1254.09 moveto
+465.98 1265.13 470.02 1279.14 477 1290 curveto
+480.46 1295.37 484.84 1300.44 489.52 1305.04 curveto
+stroke
+0 0 0 edgecolor
+newpath 487.28 1307.73 moveto
+497.04 1311.87 lineto
+491.99 1302.55 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 487.28 1307.73 moveto
+497.04 1311.87 lineto
+491.99 1302.55 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+477 1277.4 moveto 67 (M:N Hash) alignedtext
+grestore
+% da3da2a7-80c7-47a2-9d72-23b7c8f3d669
+gsave
+0.54118 0.25098 0.93333 nodecolor
+newpath 344 44 moveto
+282 44 lineto
+270 32 lineto
+270 12 lineto
+282 0 lineto
+344 0 lineto
+356 12 lineto
+356 32 lineto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 344 44 moveto
+282 44 lineto
+270 32 lineto
+270 12 lineto
+282 0 lineto
+344 0 lineto
+356 12 lineto
+356 32 lineto
+closepath stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 282 44 moveto
+276 44 270 38 270 32 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 282 44 moveto
+276 44 270 38 270 32 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 270 12 moveto
+270 6 276 0 282 0 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 270 12 moveto
+270 6 276 0 282 0 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 344 0 moveto
+350 0 356 6 356 12 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 344 0 moveto
+350 0 356 6 356 12 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 356 32 moveto
+356 38 350 44 344 44 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 356 32 moveto
+356 38 350 44 344 44 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 344 44 moveto
+282 44 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 282 44 moveto
+276 44 270 38 270 32 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 270 32 moveto
+270 12 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 270 12 moveto
+270 6 276 0 282 0 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 282 0 moveto
+344 0 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 344 0 moveto
+350 0 356 6 356 12 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 356 12 moveto
+356 32 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 356 32 moveto
+356 38 350 44 344 44 curveto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+278 27.4 moveto 70 (AquaMeta) alignedtext
+0 0 0 nodecolor
+14 /Times-Roman set_font
+297 9.4 moveto 32 (\(ets\)) alignedtext
+grestore
+% c49457b9-a4be-48d2-8e82-50820e0ca618
+gsave
+0.54118 0.25098 0.93333 nodecolor
+newpath 352 134 moveto
+274 134 lineto
+262 122 lineto
+262 110 lineto
+274 98 lineto
+352 98 lineto
+364 110 lineto
+364 122 lineto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 352 134 moveto
+274 134 lineto
+262 122 lineto
+262 110 lineto
+274 98 lineto
+352 98 lineto
+364 110 lineto
+364 122 lineto
+closepath stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 274 134 moveto
+268 134 262 128 262 122 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 274 134 moveto
+268 134 262 128 262 122 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 262 110 moveto
+262 104 268 98 274 98 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 262 110 moveto
+262 104 268 98 274 98 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 352 98 moveto
+358 98 364 104 364 110 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 352 98 moveto
+358 98 364 104 364 110 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 364 122 moveto
+364 128 358 134 352 134 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 364 122 moveto
+364 128 358 134 352 134 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 352 134 moveto
+274 134 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 274 134 moveto
+268 134 262 128 262 122 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 262 122 moveto
+262 110 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 262 110 moveto
+262 104 268 98 274 98 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 274 98 moveto
+352 98 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 352 98 moveto
+358 98 364 104 364 110 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 364 110 moveto
+364 122 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 364 122 moveto
+364 128 358 134 352 134 curveto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+269.5 112.4 moveto 87 (BTreeSearch) alignedtext
+grestore
+% da3da2a7-80c7-47a2-9d72-23b7c8f3d669->c49457b9-a4be-48d2-8e82-50820e0ca618
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 313 44.28 moveto
+313 57.34 313 73.97 313 87.93 curveto
+stroke
+0 0 0 edgecolor
+newpath 309.5 87.97 moveto
+313 97.97 lineto
+316.5 87.97 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 309.5 87.97 moveto
+313 97.97 lineto
+316.5 87.97 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+313 67.4 moveto 23 (1:1) alignedtext
+grestore
+% d966ca1f-a412-4b20-96cf-0b8b6c64df9c->bb03494d-e0a9-4898-8b80-64c54da6a20c
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 567.85 698.21 moveto
+558.42 711.27 545.58 729.05 535.03 743.65 curveto
+stroke
+0 0 0 edgecolor
+newpath 532.15 741.66 moveto
+529.13 751.81 lineto
+537.83 745.76 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 532.15 741.66 moveto
+529.13 751.81 lineto
+537.83 745.76 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+554 721.4 moveto 67 (M:N Hash) alignedtext
+grestore
+% baa3f1d6-1425-4180-a1de-2878f16e95d5
+gsave
+0.54118 0.25098 0.93333 nodecolor
+newpath 415 976 moveto
+353 976 lineto
+341 964 lineto
+341 944 lineto
+353 932 lineto
+415 932 lineto
+427 944 lineto
+427 964 lineto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 415 976 moveto
+353 976 lineto
+341 964 lineto
+341 944 lineto
+353 932 lineto
+415 932 lineto
+427 944 lineto
+427 964 lineto
+closepath stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 353 976 moveto
+347 976 341 970 341 964 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 353 976 moveto
+347 976 341 970 341 964 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 341 944 moveto
+341 938 347 932 353 932 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 341 944 moveto
+341 938 347 932 353 932 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 415 932 moveto
+421 932 427 938 427 944 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 415 932 moveto
+421 932 427 938 427 944 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 427 964 moveto
+427 970 421 976 415 976 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 427 964 moveto
+427 970 421 976 415 976 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 415 976 moveto
+353 976 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 353 976 moveto
+347 976 341 970 341 964 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 341 964 moveto
+341 944 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 341 944 moveto
+341 938 347 932 353 932 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 353 932 moveto
+415 932 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 415 932 moveto
+421 932 427 938 427 944 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 427 944 moveto
+427 964 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 427 964 moveto
+427 970 421 976 415 976 curveto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+349 959.4 moveto 70 (AquaMeta) alignedtext
+0 0 0 nodecolor
+14 /Times-Roman set_font
+354.5 941.4 moveto 59 (\(unnest\)) alignedtext
+grestore
+% baa3f1d6-1425-4180-a1de-2878f16e95d5->c6fc141b-034f-42db-bb33-a2059731e990
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 383.6 976.25 moveto
+384.31 987.64 386.66 1001.31 393 1012 curveto
+395.37 1015.99 398.36 1019.68 401.68 1023.07 curveto
+stroke
+0 0 0 edgecolor
+newpath 399.59 1025.9 moveto
+409.36 1029.99 lineto
+404.27 1020.7 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 399.59 1025.9 moveto
+409.36 1029.99 lineto
+404.27 1020.7 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+393 999.4 moveto 67 (M:N Hash) alignedtext
+grestore
+% 6582beec-b6c0-48cc-ab7e-a5f3fc92bfa9
+gsave
+0.54118 0.25098 0.93333 nodecolor
+newpath 840 420 moveto
+778 420 lineto
+766 408 lineto
+766 388 lineto
+778 376 lineto
+840 376 lineto
+852 388 lineto
+852 408 lineto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 840 420 moveto
+778 420 lineto
+766 408 lineto
+766 388 lineto
+778 376 lineto
+840 376 lineto
+852 388 lineto
+852 408 lineto
+closepath stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 778 420 moveto
+772 420 766 414 766 408 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 778 420 moveto
+772 420 766 414 766 408 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 766 388 moveto
+766 382 772 376 778 376 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 766 388 moveto
+766 382 772 376 778 376 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 840 376 moveto
+846 376 852 382 852 388 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 840 376 moveto
+846 376 852 382 852 388 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 852 408 moveto
+852 414 846 420 840 420 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 852 408 moveto
+852 414 846 420 840 420 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 840 420 moveto
+778 420 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 778 420 moveto
+772 420 766 414 766 408 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 766 408 moveto
+766 388 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 766 388 moveto
+766 382 772 376 778 376 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 778 376 moveto
+840 376 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 840 376 moveto
+846 376 852 382 852 388 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 852 388 moveto
+852 408 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 852 408 moveto
+852 414 846 420 840 420 curveto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+774 403.4 moveto 70 (AquaMeta) alignedtext
+0 0 0 nodecolor
+14 /Times-Roman set_font
+793 385.4 moveto 32 (\(ets\)) alignedtext
+grestore
+% ede16f1d-7795-4cbc-a605-ccfd25b7bb98
+gsave
+0.54118 0.25098 0.93333 nodecolor
+newpath 848 510 moveto
+770 510 lineto
+758 498 lineto
+758 486 lineto
+770 474 lineto
+848 474 lineto
+860 486 lineto
+860 498 lineto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 848 510 moveto
+770 510 lineto
+758 498 lineto
+758 486 lineto
+770 474 lineto
+848 474 lineto
+860 486 lineto
+860 498 lineto
+closepath stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 770 510 moveto
+764 510 758 504 758 498 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 770 510 moveto
+764 510 758 504 758 498 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 758 486 moveto
+758 480 764 474 770 474 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 758 486 moveto
+758 480 764 474 770 474 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 848 474 moveto
+854 474 860 480 860 486 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 848 474 moveto
+854 474 860 480 860 486 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 860 498 moveto
+860 504 854 510 848 510 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 860 498 moveto
+860 504 854 510 848 510 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 848 510 moveto
+770 510 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 770 510 moveto
+764 510 758 504 758 498 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 758 498 moveto
+758 486 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 758 486 moveto
+758 480 764 474 770 474 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 770 474 moveto
+848 474 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 848 474 moveto
+854 474 860 480 860 486 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 860 486 moveto
+860 498 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 860 498 moveto
+860 504 854 510 848 510 curveto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+765.5 488.4 moveto 87 (BTreeSearch) alignedtext
+grestore
+% 6582beec-b6c0-48cc-ab7e-a5f3fc92bfa9->ede16f1d-7795-4cbc-a605-ccfd25b7bb98
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 809 420.28 moveto
+809 433.34 809 449.97 809 463.93 curveto
+stroke
+0 0 0 edgecolor
+newpath 805.5 463.97 moveto
+809 473.97 lineto
+812.5 463.97 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 805.5 463.97 moveto
+809 473.97 lineto
+812.5 463.97 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+809 443.4 moveto 23 (1:1) alignedtext
+grestore
+% da4389d3-57a0-41fa-973b-cfdedca126d4
+gsave
+0.54118 0.25098 0.93333 nodecolor
+newpath 408 878 moveto
+286 878 lineto
+274 866 lineto
+274 854 lineto
+286 842 lineto
+408 842 lineto
+420 854 lineto
+420 866 lineto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 408 878 moveto
+286 878 lineto
+274 866 lineto
+274 854 lineto
+286 842 lineto
+408 842 lineto
+420 854 lineto
+420 866 lineto
+closepath stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 286 878 moveto
+280 878 274 872 274 866 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 286 878 moveto
+280 878 274 872 274 866 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 274 854 moveto
+274 848 280 842 286 842 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 274 854 moveto
+274 848 280 842 286 842 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 408 842 moveto
+414 842 420 848 420 854 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 408 842 moveto
+414 842 420 848 420 854 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 420 866 moveto
+420 872 414 878 408 878 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 420 866 moveto
+420 872 414 878 408 878 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 408 878 moveto
+286 878 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 286 878 moveto
+280 878 274 872 274 866 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 274 866 moveto
+274 854 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 274 854 moveto
+274 848 280 842 286 842 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 286 842 moveto
+408 842 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 408 842 moveto
+414 842 420 848 420 854 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 420 854 moveto
+420 866 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 420 866 moveto
+420 872 414 878 408 878 curveto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+282 856.4 moveto 130 (PreclusteredGroup) alignedtext
+grestore
+% da4389d3-57a0-41fa-973b-cfdedca126d4->baa3f1d6-1425-4180-a1de-2878f16e95d5
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 354.13 878.12 moveto
+359.1 890.73 365.84 907.86 371.66 922.65 curveto
+stroke
+0 0 0 edgecolor
+newpath 368.41 923.94 moveto
+375.33 931.96 lineto
+374.92 921.37 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 368.41 923.94 moveto
+375.33 931.96 lineto
+374.92 921.37 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+367 901.4 moveto 23 (1:1) alignedtext
+grestore
+% e0d76180-55c0-41db-9d4e-b0b80eed3922->19350ade-da75-4a1d-90e7-4f6753ef2732
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 581 134.12 moveto
+581 146.49 581 163.2 581 177.8 curveto
+stroke
+0 0 0 edgecolor
+newpath 577.5 177.96 moveto
+581 187.96 lineto
+584.5 177.96 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 577.5 177.96 moveto
+581 187.96 lineto
+584.5 177.96 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+581 157.4 moveto 23 (1:1) alignedtext
+grestore
+% 36b24630-2bdf-47e2-ade4-21f95efde5a8
+gsave
+0.54118 0.25098 0.93333 nodecolor
+newpath 688 1352 moveto
+626 1352 lineto
+614 1340 lineto
+614 1320 lineto
+626 1308 lineto
+688 1308 lineto
+700 1320 lineto
+700 1340 lineto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 688 1352 moveto
+626 1352 lineto
+614 1340 lineto
+614 1320 lineto
+626 1308 lineto
+688 1308 lineto
+700 1320 lineto
+700 1340 lineto
+closepath stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 626 1352 moveto
+620 1352 614 1346 614 1340 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 626 1352 moveto
+620 1352 614 1346 614 1340 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 614 1320 moveto
+614 1314 620 1308 626 1308 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 614 1320 moveto
+614 1314 620 1308 626 1308 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 688 1308 moveto
+694 1308 700 1314 700 1320 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 688 1308 moveto
+694 1308 700 1314 700 1320 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 700 1340 moveto
+700 1346 694 1352 688 1352 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 700 1340 moveto
+700 1346 694 1352 688 1352 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 688 1352 moveto
+626 1352 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 626 1352 moveto
+620 1352 614 1346 614 1340 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 614 1340 moveto
+614 1320 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 614 1320 moveto
+614 1314 620 1308 626 1308 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 626 1308 moveto
+688 1308 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 688 1308 moveto
+694 1308 700 1314 700 1320 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 700 1320 moveto
+700 1340 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 700 1340 moveto
+700 1346 694 1352 688 1352 curveto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+622 1335.4 moveto 70 (AquaMeta) alignedtext
+0 0 0 nodecolor
+14 /Times-Roman set_font
+641 1317.4 moveto 32 (\(ets\)) alignedtext
+grestore
+% 36b24630-2bdf-47e2-ade4-21f95efde5a8->0066c7f5-f720-4098-8908-bebee74a409d
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 657 1352.24 moveto
+657 1366.23 657 1384.43 657 1399.49 curveto
+stroke
+0 0 0 edgecolor
+newpath 653.5 1399.79 moveto
+657 1409.79 lineto
+660.5 1399.79 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 653.5 1399.79 moveto
+657 1409.79 lineto
+660.5 1399.79 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+657 1375.4 moveto 23 (1:1) alignedtext
+grestore
+% b1922618-827e-4276-a89e-5bd257cecd7d
+gsave
+0.54118 0.25098 0.93333 nodecolor
+newpath 158 608 moveto
+12 608 lineto
+0 596 lineto
+0 576 lineto
+12 564 lineto
+158 564 lineto
+170 576 lineto
+170 596 lineto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 158 608 moveto
+12 608 lineto
+0 596 lineto
+0 576 lineto
+12 564 lineto
+158 564 lineto
+170 576 lineto
+170 596 lineto
+closepath stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 12 608 moveto
+6 608 0 602 0 596 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 12 608 moveto
+6 608 0 602 0 596 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 0 576 moveto
+0 570 6 564 12 564 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 0 576 moveto
+0 570 6 564 12 564 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 158 564 moveto
+164 564 170 570 170 576 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 158 564 moveto
+164 564 170 570 170 576 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 170 596 moveto
+170 602 164 608 158 608 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 170 596 moveto
+170 602 164 608 158 608 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 158 608 moveto
+12 608 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 12 608 moveto
+6 608 0 602 0 596 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 596 moveto
+0 576 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 576 moveto
+0 570 6 564 12 564 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 12 564 moveto
+158 564 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 158 564 moveto
+164 564 170 570 170 576 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 170 576 moveto
+170 596 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 170 596 moveto
+170 602 164 608 158 608 curveto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+50 591.4 moveto 70 (AquaMeta) alignedtext
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8 573.4 moveto 154 (\(assign,assign,unnest\)) alignedtext
+grestore
+% b1922618-827e-4276-a89e-5bd257cecd7d->21db32ee-7d3e-42f5-9541-2145ef2e55e2
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 138.46 608.04 moveto
+174.94 623.08 223.09 642.93 259.57 657.97 curveto
+stroke
+0 0 0 edgecolor
+newpath 258.48 661.31 moveto
+269.06 661.88 lineto
+261.15 654.84 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 258.48 661.31 moveto
+269.06 661.88 lineto
+261.15 654.84 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+219 631.4 moveto 67 (M:N Hash) alignedtext
+grestore
+% 93596e19-b912-4071-94a9-512133274499
+gsave
+0.54118 0.25098 0.93333 nodecolor
+newpath 358 510 moveto
+268 510 lineto
+256 498 lineto
+256 486 lineto
+268 474 lineto
+358 474 lineto
+370 486 lineto
+370 498 lineto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 358 510 moveto
+268 510 lineto
+256 498 lineto
+256 486 lineto
+268 474 lineto
+358 474 lineto
+370 486 lineto
+370 498 lineto
+closepath stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 268 510 moveto
+262 510 256 504 256 498 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 268 510 moveto
+262 510 256 504 256 498 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 256 486 moveto
+256 480 262 474 268 474 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 256 486 moveto
+256 480 262 474 268 474 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 358 474 moveto
+364 474 370 480 370 486 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 358 474 moveto
+364 474 370 480 370 486 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 370 498 moveto
+370 504 364 510 358 510 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 370 498 moveto
+370 504 364 510 358 510 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 358 510 moveto
+268 510 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 268 510 moveto
+262 510 256 504 256 498 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 256 498 moveto
+256 486 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 256 486 moveto
+256 480 262 474 268 474 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 268 474 moveto
+358 474 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 358 474 moveto
+364 474 370 480 370 486 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 370 486 moveto
+370 498 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 370 498 moveto
+370 504 364 510 358 510 curveto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+263.5 488.4 moveto 99 (InMemorySort) alignedtext
+grestore
+% 9678a828-3e96-4391-be41-8da45721ca3d
+gsave
+0.54118 0.25098 0.93333 nodecolor
+newpath 426 608 moveto
+200 608 lineto
+188 596 lineto
+188 576 lineto
+200 564 lineto
+426 564 lineto
+438 576 lineto
+438 596 lineto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 426 608 moveto
+200 608 lineto
+188 596 lineto
+188 576 lineto
+200 564 lineto
+426 564 lineto
+438 576 lineto
+438 596 lineto
+closepath stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 200 608 moveto
+194 608 188 602 188 596 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 200 608 moveto
+194 608 188 602 188 596 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 188 576 moveto
+188 570 194 564 200 564 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 188 576 moveto
+188 570 194 564 200 564 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 426 564 moveto
+432 564 438 570 438 576 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 426 564 moveto
+432 564 438 570 438 576 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 438 596 moveto
+438 602 432 608 426 608 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 438 596 moveto
+438 602 432 608 426 608 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 426 608 moveto
+200 608 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 200 608 moveto
+194 608 188 602 188 596 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 188 596 moveto
+188 576 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 188 576 moveto
+188 570 194 564 200 564 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 200 564 moveto
+426 564 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 426 564 moveto
+432 564 438 570 438 576 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 438 576 moveto
+438 596 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 438 596 moveto
+438 602 432 608 426 608 curveto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+278 591.4 moveto 70 (AquaMeta) alignedtext
+0 0 0 nodecolor
+14 /Times-Roman set_font
+195.5 573.4 moveto 235 (\(assign,running-aggregate,assign\)) alignedtext
+grestore
+% 93596e19-b912-4071-94a9-512133274499->9678a828-3e96-4391-be41-8da45721ca3d
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 313 510.12 moveto
+313 522.49 313 539.2 313 553.8 curveto
+stroke
+0 0 0 edgecolor
+newpath 309.5 553.96 moveto
+313 563.96 lineto
+316.5 553.96 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 309.5 553.96 moveto
+313 563.96 lineto
+316.5 553.96 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+313 533.4 moveto 114 (M:N Hash Merge) alignedtext
+grestore
+% c49457b9-a4be-48d2-8e82-50820e0ca618->7b6c5cb6-cd7f-43cb-bf69-37eff4e3200b
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 313 134.12 moveto
+313 146.49 313 163.2 313 177.8 curveto
+stroke
+0 0 0 edgecolor
+newpath 309.5 177.96 moveto
+313 187.96 lineto
+316.5 177.96 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 309.5 177.96 moveto
+313 187.96 lineto
+316.5 177.96 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+313 157.4 moveto 23 (1:1) alignedtext
+grestore
+% 7d6eb230-0efc-42a7-b279-98e0258073e6
+gsave
+0.54118 0.25098 0.93333 nodecolor
+newpath 882 608 moveto
+736 608 lineto
+724 596 lineto
+724 576 lineto
+736 564 lineto
+882 564 lineto
+894 576 lineto
+894 596 lineto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 882 608 moveto
+736 608 lineto
+724 596 lineto
+724 576 lineto
+736 564 lineto
+882 564 lineto
+894 576 lineto
+894 596 lineto
+closepath stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 736 608 moveto
+730 608 724 602 724 596 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 736 608 moveto
+730 608 724 602 724 596 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 724 576 moveto
+724 570 730 564 736 564 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 724 576 moveto
+724 570 730 564 736 564 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 882 564 moveto
+888 564 894 570 894 576 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 882 564 moveto
+888 564 894 570 894 576 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 894 596 moveto
+894 602 888 608 882 608 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 894 596 moveto
+894 602 888 608 882 608 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 882 608 moveto
+736 608 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 736 608 moveto
+730 608 724 602 724 596 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 724 596 moveto
+724 576 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 724 576 moveto
+724 570 730 564 736 564 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 736 564 moveto
+882 564 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 882 564 moveto
+888 564 894 570 894 576 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 894 576 moveto
+894 596 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 894 596 moveto
+894 602 888 608 882 608 curveto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+774 591.4 moveto 70 (AquaMeta) alignedtext
+0 0 0 nodecolor
+14 /Times-Roman set_font
+732 573.4 moveto 154 (\(assign,assign,unnest\)) alignedtext
+grestore
+% 7d6eb230-0efc-42a7-b279-98e0258073e6->d966ca1f-a412-4b20-96cf-0b8b6c64df9c
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 755.54 608.04 moveto
+719.06 623.08 670.91 642.93 634.43 657.97 curveto
+stroke
+0 0 0 edgecolor
+newpath 632.85 654.84 moveto
+624.94 661.88 lineto
+635.52 661.31 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 632.85 654.84 moveto
+624.94 661.88 lineto
+635.52 661.31 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+708 631.4 moveto 67 (M:N Hash) alignedtext
+grestore
+% 098774e6-f5a6-4fa0-b3cc-a195761bd957->da4389d3-57a0-41fa-973b-cfdedca126d4
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 341.42 788.21 moveto
+342.38 800.66 343.69 817.39 344.79 831.58 curveto
+stroke
+0 0 0 edgecolor
+newpath 341.32 832.12 moveto
+345.59 841.81 lineto
+348.3 831.57 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 341.32 832.12 moveto
+345.59 841.81 lineto
+348.3 831.57 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+344 811.4 moveto 23 (1:1) alignedtext
+grestore
+% ac276d4f-0bd6-468e-b314-da000f9141ea->4acb8f1a-23ab-474b-9571-8ab12f5aef41
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 530.56 1450.05 moveto
+534.67 1461.51 540.76 1475.32 549 1486 curveto
+552.01 1489.91 555.55 1493.63 559.29 1497.1 curveto
+stroke
+0 0 0 edgecolor
+newpath 557.3 1500 moveto
+567.17 1503.84 lineto
+561.85 1494.68 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 557.3 1500 moveto
+567.17 1503.84 lineto
+561.85 1494.68 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+549 1473.4 moveto 67 (M:N Hash) alignedtext
+grestore
+% 066a993b-57b5-47ad-8a18-fef27b8e16f4->769e1d5c-5b5b-4437-8764-a6e0bcf8d210
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 444.98 1164.28 moveto
+447.9 1177.34 451.61 1193.97 454.73 1207.93 curveto
+stroke
+0 0 0 edgecolor
+newpath 451.38 1208.98 moveto
+456.97 1217.97 lineto
+458.21 1207.45 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 451.38 1208.98 moveto
+456.97 1217.97 lineto
+458.21 1207.45 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+452 1187.4 moveto 67 (M:N Hash) alignedtext
+grestore
+% 31c39bd3-6724-42bc-b15f-9331d434598f->b1922618-827e-4276-a89e-5bd257cecd7d
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 85 510.12 moveto
+85 522.49 85 539.2 85 553.8 curveto
+stroke
+0 0 0 edgecolor
+newpath 81.5 553.96 moveto
+85 563.96 lineto
+88.5 553.96 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 81.5 553.96 moveto
+85 563.96 lineto
+88.5 553.96 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+85 533.4 moveto 23 (1:1) alignedtext
+grestore
+% 0bdd825d-3c80-4769-95ec-3d8ed0fec67a->93596e19-b912-4071-94a9-512133274499
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 313 416.12 moveto
+313 429.65 313 448.38 313 463.85 curveto
+stroke
+0 0 0 edgecolor
+newpath 309.5 463.93 moveto
+313 473.93 lineto
+316.5 463.93 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 309.5 463.93 moveto
+313 473.93 lineto
+316.5 463.93 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+313 443.4 moveto 23 (1:1) alignedtext
+grestore
+% 9c797900-e6cf-44ad-b5e3-869e56fd27ba->1da790c0-ca3c-4833-8280-5c7c2d0ac23c
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 581 510.12 moveto
+581 522.49 581 539.2 581 553.8 curveto
+stroke
+0 0 0 edgecolor
+newpath 577.5 553.96 moveto
+581 563.96 lineto
+584.5 553.96 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 577.5 553.96 moveto
+581 563.96 lineto
+584.5 553.96 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+581 533.4 moveto 114 (M:N Hash Merge) alignedtext
+grestore
+% ede16f1d-7795-4cbc-a605-ccfd25b7bb98->7d6eb230-0efc-42a7-b279-98e0258073e6
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 809 510.12 moveto
+809 522.49 809 539.2 809 553.8 curveto
+stroke
+0 0 0 edgecolor
+newpath 805.5 553.96 moveto
+809 563.96 lineto
+812.5 553.96 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 805.5 553.96 moveto
+809 563.96 lineto
+812.5 553.96 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+809 533.4 moveto 23 (1:1) alignedtext
+grestore
+% 9678a828-3e96-4391-be41-8da45721ca3d->21db32ee-7d3e-42f5-9541-2145ef2e55e2
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 313 608.28 moveto
+313 621.34 313 637.97 313 651.93 curveto
+stroke
+0 0 0 edgecolor
+newpath 309.5 651.97 moveto
+313 661.97 lineto
+316.5 651.97 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 309.5 651.97 moveto
+313 661.97 lineto
+316.5 651.97 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+313 631.4 moveto 67 (M:N Hash) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 781 1476
+end
+restore
+%%EOF
diff --git a/asterix-app/src/test/resources/fuzzyjoin/pub/fuzzy-join-aql.dot b/asterix-app/src/test/resources/fuzzyjoin/pub/fuzzy-join-aql.dot
new file mode 100644
index 0000000..88a7d88
--- /dev/null
+++ b/asterix-app/src/test/resources/fuzzyjoin/pub/fuzzy-join-aql.dot
@@ -0,0 +1,84 @@
+digraph hyracks_job {
+size = "20,20";
+rankdir = "BT";
+node [shape = box, color = black, fillcolor = lightblue2, style = "rounded,filled"];
+"939559d4-4753-42ca-a96b-5a4d867521e4" [label="AquaMeta\n(ets)"];
+"97f7b483-5810-4f62-a3f2-8dc108f211bf" [label="InMemorySort"];
+"bd489957-baec-4872-9b64-6ce7ecc36ed1" [label="AquaMeta\n(stream-project)"];
+"2c7f5446-ca70-424e-b72b-dcbfba13c5fc" [label="AquaMeta\n(assign,unnest)"];
+"8e7bd09e-3fe2-4022-b493-64320be10f22" [label="AquaMeta\n(ets)"];
+"61e21faf-53be-44c7-a39b-d621a19b3dc6" [label="AquaMeta\n(ets)"];
+"c29fedec-a107-4d03-822b-5f08d44fbfc2" [label="AquaMeta\n(assign,assign,unnest)"];
+"dde20475-0341-40cd-8d87-47019d4af7e7" [label="AquaMeta\n(sink-write)"];
+"83b6ee56-1fba-4df7-bd13-89de2edfc4dc" [label="InMemoryHashJoin"];
+"019d92ce-5cb6-4ed4-a55b-5088b1298356" [label="InMemoryHashJoin"];
+"6cc231d4-a25c-4301-98f9-3a9dd548a635" [label="BTreeSearch"];
+"470b4218-4ff6-4699-b05d-d5624f70c346" [label="AquaMeta\n(ets)"];
+"fe17ac32-aa06-4273-bfeb-6ad12004146d" [label="HashGroup"];
+"ce6dab26-9823-4e74-9834-914ab6798874" [label="PreclusteredGroup"];
+"cf5387c0-3490-4c50-b47e-ac20c5e961a7" [label="InMemoryHashJoin"];
+"86cf6620-ce7a-447d-82ac-32d71720d008" [label="PreclusteredGroup"];
+"84042597-2ad3-41fd-95be-7c7a8c9ba6e7" [label="BTreeSearch"];
+"f0024d8c-b182-4c84-9642-562b7f873cb1" [label="InMemorySort"];
+"3796886b-044c-4bfd-b682-9c3a2df05f31" [label="AquaMeta\n(ets)"];
+"649b70fe-e549-4f38-b248-1868bf691b87" [label="InMemorySort"];
+"a80baf03-e23a-4e51-828a-b9ec8620767b" [label="HashGroup"];
+"34bea0d2-8c02-46af-a281-d359e73e8459" [label="AquaMeta\n(assign,stream-project)"];
+"800cab7e-8228-4c85-b19a-39cb844893b7" [label="InMemorySort"];
+"094cb8b2-df6d-4f73-a8f5-00a6ce14d59b" [label="InMemoryHashJoin"];
+"17c0bf1d-edab-423b-a932-23d1c3111b0e" [label="AquaMeta\n(ets)"];
+"11496054-b3b3-4730-b43a-7130c474ef1f" [label="AquaMeta\n(assign,stream-select)"];
+"fe400283-741d-4b35-bc79-9e430715f3fb" [label="AquaMeta\n(assign,running-aggregate,assign)"];
+"73e52bad-0cff-4d55-b95b-176b16f7f464" [label="HashGroup"];
+"f323df6e-1caa-4cb2-9c2c-903df08ee288" [label="BTreeSearch"];
+"899fc36b-024c-402f-a155-a218dc3358ee" [label="AquaMeta\n(assign,running-aggregate,assign)"];
+"b07bbb40-a41c-4d00-994b-f5fa5d3eca34" [label="InMemoryHashJoin"];
+"ad75356e-262b-468d-ad27-5ead6cfa49b3" [label="HashGroup"];
+"40fc40ba-d7e5-44a2-a9a6-88642a2e2f79" [label="BTreeSearch"];
+"6a50b453-2460-4ee8-8fc4-9855ecb54862" [label="AquaMeta\n(assign,assign,unnest)"];
+"5f398745-a0da-4a93-8654-add2e550003c" [label="BTreeSearch"];
+"55442d10-e749-4178-99e7-c29d40c980d1" [label="HashGroup"];
+"162900ff-b4a6-4d0c-b9c2-6595f9d11e4e" [label="AquaMeta\n(assign,unnest)"];
+"67d4cc31-c6fb-48d3-8ca3-af44628f68ca" [label="AquaMeta\n(assign,unnest)"];
+"7e45e056-61c7-47a0-a5d0-5e145b48b64b" [label="BTreeSearch"];
+"4c0306ed-84f7-4dd8-987c-a800d925505a" [label="AquaMeta\n(assign,unnest)"];
+"939559d4-4753-42ca-a96b-5a4d867521e4" -> "84042597-2ad3-41fd-95be-7c7a8c9ba6e7" [label="1:1"];
+"97f7b483-5810-4f62-a3f2-8dc108f211bf" -> "fe400283-741d-4b35-bc79-9e430715f3fb" [label="M:N Hash Merge"];
+"bd489957-baec-4872-9b64-6ce7ecc36ed1" -> "cf5387c0-3490-4c50-b47e-ac20c5e961a7" [label="M:N Hash"];
+"2c7f5446-ca70-424e-b72b-dcbfba13c5fc" -> "094cb8b2-df6d-4f73-a8f5-00a6ce14d59b" [label="M:N Hash"];
+"8e7bd09e-3fe2-4022-b493-64320be10f22" -> "6cc231d4-a25c-4301-98f9-3a9dd548a635" [label="1:1"];
+"61e21faf-53be-44c7-a39b-d621a19b3dc6" -> "f323df6e-1caa-4cb2-9c2c-903df08ee288" [label="1:1"];
+"c29fedec-a107-4d03-822b-5f08d44fbfc2" -> "b07bbb40-a41c-4d00-994b-f5fa5d3eca34" [label="M:N Hash"];
+"83b6ee56-1fba-4df7-bd13-89de2edfc4dc" -> "f0024d8c-b182-4c84-9642-562b7f873cb1" [label="M:N Hash"];
+"019d92ce-5cb6-4ed4-a55b-5088b1298356" -> "bd489957-baec-4872-9b64-6ce7ecc36ed1" [label="1:1"];
+"6cc231d4-a25c-4301-98f9-3a9dd548a635" -> "c29fedec-a107-4d03-822b-5f08d44fbfc2" [label="1:1"];
+"470b4218-4ff6-4699-b05d-d5624f70c346" -> "5f398745-a0da-4a93-8654-add2e550003c" [label="1:1"];
+"fe17ac32-aa06-4273-bfeb-6ad12004146d" -> "97f7b483-5810-4f62-a3f2-8dc108f211bf" [label="1:1"];
+"ce6dab26-9823-4e74-9834-914ab6798874" -> "2c7f5446-ca70-424e-b72b-dcbfba13c5fc" [label="1:1"];
+"cf5387c0-3490-4c50-b47e-ac20c5e961a7" -> "34bea0d2-8c02-46af-a281-d359e73e8459" [label="1:1"];
+"86cf6620-ce7a-447d-82ac-32d71720d008" -> "162900ff-b4a6-4d0c-b9c2-6595f9d11e4e" [label="1:1"];
+"84042597-2ad3-41fd-95be-7c7a8c9ba6e7" -> "cf5387c0-3490-4c50-b47e-ac20c5e961a7" [label="M:N Hash"];
+"f0024d8c-b182-4c84-9642-562b7f873cb1" -> "ce6dab26-9823-4e74-9834-914ab6798874" [label="1:1"];
+"3796886b-044c-4bfd-b682-9c3a2df05f31" -> "40fc40ba-d7e5-44a2-a9a6-88642a2e2f79" [label="1:1"];
+"649b70fe-e549-4f38-b248-1868bf691b87" -> "899fc36b-024c-402f-a155-a218dc3358ee" [label="M:N Hash Merge"];
+"a80baf03-e23a-4e51-828a-b9ec8620767b" -> "ad75356e-262b-468d-ad27-5ead6cfa49b3" [label="M:N Hash"];
+"34bea0d2-8c02-46af-a281-d359e73e8459" -> "dde20475-0341-40cd-8d87-47019d4af7e7" [label="M:N Replicate"];
+"800cab7e-8228-4c85-b19a-39cb844893b7" -> "86cf6620-ce7a-447d-82ac-32d71720d008" [label="1:1"];
+"094cb8b2-df6d-4f73-a8f5-00a6ce14d59b" -> "11496054-b3b3-4730-b43a-7130c474ef1f" [label="1:1"];
+"17c0bf1d-edab-423b-a932-23d1c3111b0e" -> "7e45e056-61c7-47a0-a5d0-5e145b48b64b" [label="1:1"];
+"11496054-b3b3-4730-b43a-7130c474ef1f" -> "55442d10-e749-4178-99e7-c29d40c980d1" [label="M:N Hash"];
+"fe400283-741d-4b35-bc79-9e430715f3fb" -> "b07bbb40-a41c-4d00-994b-f5fa5d3eca34" [label="M:N Hash"];
+"73e52bad-0cff-4d55-b95b-176b16f7f464" -> "fe17ac32-aa06-4273-bfeb-6ad12004146d" [label="M:N Hash"];
+"f323df6e-1caa-4cb2-9c2c-903df08ee288" -> "67d4cc31-c6fb-48d3-8ca3-af44628f68ca" [label="1:1"];
+"899fc36b-024c-402f-a155-a218dc3358ee" -> "83b6ee56-1fba-4df7-bd13-89de2edfc4dc" [label="M:N Hash"];
+"b07bbb40-a41c-4d00-994b-f5fa5d3eca34" -> "800cab7e-8228-4c85-b19a-39cb844893b7" [label="M:N Hash"];
+"ad75356e-262b-468d-ad27-5ead6cfa49b3" -> "649b70fe-e549-4f38-b248-1868bf691b87" [label="1:1"];
+"40fc40ba-d7e5-44a2-a9a6-88642a2e2f79" -> "019d92ce-5cb6-4ed4-a55b-5088b1298356" [label="M:N Hash"];
+"6a50b453-2460-4ee8-8fc4-9855ecb54862" -> "83b6ee56-1fba-4df7-bd13-89de2edfc4dc" [label="M:N Hash"];
+"5f398745-a0da-4a93-8654-add2e550003c" -> "4c0306ed-84f7-4dd8-987c-a800d925505a" [label="1:1"];
+"55442d10-e749-4178-99e7-c29d40c980d1" -> "019d92ce-5cb6-4ed4-a55b-5088b1298356" [label="M:N Hash"];
+"162900ff-b4a6-4d0c-b9c2-6595f9d11e4e" -> "094cb8b2-df6d-4f73-a8f5-00a6ce14d59b" [label="M:N Hash"];
+"67d4cc31-c6fb-48d3-8ca3-af44628f68ca" -> "a80baf03-e23a-4e51-828a-b9ec8620767b" [label="1:1"];
+"7e45e056-61c7-47a0-a5d0-5e145b48b64b" -> "6a50b453-2460-4ee8-8fc4-9855ecb54862" [label="1:1"];
+"4c0306ed-84f7-4dd8-987c-a800d925505a" -> "73e52bad-0cff-4d55-b95b-176b16f7f464" [label="1:1"];
+}
diff --git a/asterix-app/src/test/resources/fuzzyjoin/pub/fuzzy-join-aql.json b/asterix-app/src/test/resources/fuzzyjoin/pub/fuzzy-join-aql.json
new file mode 100644
index 0000000..cca4f7a
--- /dev/null
+++ b/asterix-app/src/test/resources/fuzzyjoin/pub/fuzzy-join-aql.json
@@ -0,0 +1,808 @@
+{
+ "connectors": [
+  {
+   "connector": {
+    "id": "9e451fd1-ca4d-44e7-9c01-5fd0bc520dfa",
+    "java-class": "edu.uci.ics.hyracks.dataflow.std.connectors.MToNHashPartitioningConnectorDescriptor",
+    "type": "connector"
+   },
+   "in-operator-id": "ODID:b07bbb40-a41c-4d00-994b-f5fa5d3eca34",
+   "in-operator-port": 0,
+   "out-operator-id": "ODID:800cab7e-8228-4c85-b19a-39cb844893b7",
+   "out-operator-port": 0,
+   "type": "connector-info"
+  },
+  {
+   "connector": {
+    "id": "d506b416-5ef6-4e79-ad8b-97d870b2e7fd",
+    "java-class": "edu.uci.ics.hyracks.dataflow.std.connectors.OneToOneConnectorDescriptor",
+    "type": "connector"
+   },
+   "in-operator-id": "ODID:67d4cc31-c6fb-48d3-8ca3-af44628f68ca",
+   "in-operator-port": 0,
+   "out-operator-id": "ODID:a80baf03-e23a-4e51-828a-b9ec8620767b",
+   "out-operator-port": 0,
+   "type": "connector-info"
+  },
+  {
+   "connector": {
+    "id": "0283040e-2cb1-48ce-8a12-3fd02e02a867",
+    "java-class": "edu.uci.ics.hyracks.dataflow.std.connectors.OneToOneConnectorDescriptor",
+    "type": "connector"
+   },
+   "in-operator-id": "ODID:ce6dab26-9823-4e74-9834-914ab6798874",
+   "in-operator-port": 0,
+   "out-operator-id": "ODID:2c7f5446-ca70-424e-b72b-dcbfba13c5fc",
+   "out-operator-port": 0,
+   "type": "connector-info"
+  },
+  {
+   "connector": {
+    "id": "d3c6f04b-30b0-4eca-8666-d926559d2242",
+    "java-class": "edu.uci.ics.hyracks.dataflow.std.connectors.MToNHashPartitioningConnectorDescriptor",
+    "type": "connector"
+   },
+   "in-operator-id": "ODID:83b6ee56-1fba-4df7-bd13-89de2edfc4dc",
+   "in-operator-port": 0,
+   "out-operator-id": "ODID:f0024d8c-b182-4c84-9642-562b7f873cb1",
+   "out-operator-port": 0,
+   "type": "connector-info"
+  },
+  {
+   "connector": {
+    "id": "27771271-9fd0-4e54-b864-ec0241e06350",
+    "java-class": "edu.uci.ics.hyracks.dataflow.std.connectors.MToNHashPartitioningConnectorDescriptor",
+    "type": "connector"
+   },
+   "in-operator-id": "ODID:40fc40ba-d7e5-44a2-a9a6-88642a2e2f79",
+   "in-operator-port": 0,
+   "out-operator-id": "ODID:019d92ce-5cb6-4ed4-a55b-5088b1298356",
+   "out-operator-port": 1,
+   "type": "connector-info"
+  },
+  {
+   "connector": {
+    "id": "798874c1-f95e-4534-8944-fb04dd5c5d9d",
+    "java-class": "edu.uci.ics.hyracks.dataflow.std.connectors.OneToOneConnectorDescriptor",
+    "type": "connector"
+   },
+   "in-operator-id": "ODID:61e21faf-53be-44c7-a39b-d621a19b3dc6",
+   "in-operator-port": 0,
+   "out-operator-id": "ODID:f323df6e-1caa-4cb2-9c2c-903df08ee288",
+   "out-operator-port": 0,
+   "type": "connector-info"
+  },
+  {
+   "connector": {
+    "id": "dd64cb43-3d38-488c-90df-6703049dcbed",
+    "java-class": "edu.uci.ics.hyracks.dataflow.std.connectors.OneToOneConnectorDescriptor",
+    "type": "connector"
+   },
+   "in-operator-id": "ODID:86cf6620-ce7a-447d-82ac-32d71720d008",
+   "in-operator-port": 0,
+   "out-operator-id": "ODID:162900ff-b4a6-4d0c-b9c2-6595f9d11e4e",
+   "out-operator-port": 0,
+   "type": "connector-info"
+  },
+  {
+   "connector": {
+    "id": "b4eab7c7-58a5-4908-b117-f6a455cf28df",
+    "java-class": "edu.uci.ics.hyracks.dataflow.std.connectors.MToNHashPartitioningConnectorDescriptor",
+    "type": "connector"
+   },
+   "in-operator-id": "ODID:899fc36b-024c-402f-a155-a218dc3358ee",
+   "in-operator-port": 0,
+   "out-operator-id": "ODID:83b6ee56-1fba-4df7-bd13-89de2edfc4dc",
+   "out-operator-port": 1,
+   "type": "connector-info"
+  },
+  {
+   "connector": {
+    "id": "92abc733-323e-4fc4-a0d3-574f1a2380b9",
+    "java-class": "edu.uci.ics.hyracks.dataflow.std.connectors.OneToOneConnectorDescriptor",
+    "type": "connector"
+   },
+   "in-operator-id": "ODID:f0024d8c-b182-4c84-9642-562b7f873cb1",
+   "in-operator-port": 0,
+   "out-operator-id": "ODID:ce6dab26-9823-4e74-9834-914ab6798874",
+   "out-operator-port": 0,
+   "type": "connector-info"
+  },
+  {
+   "connector": {
+    "id": "a442c8f4-dbe3-4549-8116-fabf2133cb37",
+    "java-class": "edu.uci.ics.hyracks.dataflow.std.connectors.OneToOneConnectorDescriptor",
+    "type": "connector"
+   },
+   "in-operator-id": "ODID:939559d4-4753-42ca-a96b-5a4d867521e4",
+   "in-operator-port": 0,
+   "out-operator-id": "ODID:84042597-2ad3-41fd-95be-7c7a8c9ba6e7",
+   "out-operator-port": 0,
+   "type": "connector-info"
+  },
+  {
+   "connector": {
+    "id": "7561fed7-fe79-4f41-a0c7-fe3038cd4df8",
+    "java-class": "edu.uci.ics.hyracks.dataflow.std.connectors.MToNHashPartitioningMergingConnectorDescriptor",
+    "type": "connector"
+   },
+   "in-operator-id": "ODID:649b70fe-e549-4f38-b248-1868bf691b87",
+   "in-operator-port": 0,
+   "out-operator-id": "ODID:899fc36b-024c-402f-a155-a218dc3358ee",
+   "out-operator-port": 0,
+   "type": "connector-info"
+  },
+  {
+   "connector": {
+    "id": "436185ad-9c58-43d3-b654-d4279a41d3ca",
+    "java-class": "edu.uci.ics.hyracks.dataflow.std.connectors.MToNHashPartitioningConnectorDescriptor",
+    "type": "connector"
+   },
+   "in-operator-id": "ODID:11496054-b3b3-4730-b43a-7130c474ef1f",
+   "in-operator-port": 0,
+   "out-operator-id": "ODID:55442d10-e749-4178-99e7-c29d40c980d1",
+   "out-operator-port": 0,
+   "type": "connector-info"
+  },
+  {
+   "connector": {
+    "id": "5fcce470-62bb-4415-b970-feb258ceb126",
+    "java-class": "edu.uci.ics.hyracks.dataflow.std.connectors.MToNHashPartitioningConnectorDescriptor",
+    "type": "connector"
+   },
+   "in-operator-id": "ODID:2c7f5446-ca70-424e-b72b-dcbfba13c5fc",
+   "in-operator-port": 0,
+   "out-operator-id": "ODID:094cb8b2-df6d-4f73-a8f5-00a6ce14d59b",
+   "out-operator-port": 1,
+   "type": "connector-info"
+  },
+  {
+   "connector": {
+    "id": "f07cdaf4-448b-452d-8340-16c2836e950a",
+    "java-class": "edu.uci.ics.hyracks.dataflow.std.connectors.MToNHashPartitioningConnectorDescriptor",
+    "type": "connector"
+   },
+   "in-operator-id": "ODID:a80baf03-e23a-4e51-828a-b9ec8620767b",
+   "in-operator-port": 0,
+   "out-operator-id": "ODID:ad75356e-262b-468d-ad27-5ead6cfa49b3",
+   "out-operator-port": 0,
+   "type": "connector-info"
+  },
+  {
+   "connector": {
+    "id": "aeab0d67-4610-4190-a116-a0d592bfbc76",
+    "java-class": "edu.uci.ics.hyracks.dataflow.std.connectors.MToNHashPartitioningConnectorDescriptor",
+    "type": "connector"
+   },
+   "in-operator-id": "ODID:bd489957-baec-4872-9b64-6ce7ecc36ed1",
+   "in-operator-port": 0,
+   "out-operator-id": "ODID:cf5387c0-3490-4c50-b47e-ac20c5e961a7",
+   "out-operator-port": 0,
+   "type": "connector-info"
+  },
+  {
+   "connector": {
+    "id": "6681661c-aa41-4fe3-8c05-4e77910babc3",
+    "java-class": "edu.uci.ics.hyracks.dataflow.std.connectors.OneToOneConnectorDescriptor",
+    "type": "connector"
+   },
+   "in-operator-id": "ODID:7e45e056-61c7-47a0-a5d0-5e145b48b64b",
+   "in-operator-port": 0,
+   "out-operator-id": "ODID:6a50b453-2460-4ee8-8fc4-9855ecb54862",
+   "out-operator-port": 0,
+   "type": "connector-info"
+  },
+  {
+   "connector": {
+    "id": "83d3048b-5b1e-4835-aaa0-ab6f9bca2cac",
+    "java-class": "edu.uci.ics.hyracks.dataflow.std.connectors.MToNHashPartitioningConnectorDescriptor",
+    "type": "connector"
+   },
+   "in-operator-id": "ODID:55442d10-e749-4178-99e7-c29d40c980d1",
+   "in-operator-port": 0,
+   "out-operator-id": "ODID:019d92ce-5cb6-4ed4-a55b-5088b1298356",
+   "out-operator-port": 0,
+   "type": "connector-info"
+  },
+  {
+   "connector": {
+    "id": "43aabbac-532e-4bf5-88c1-adf115c4e5ef",
+    "java-class": "edu.uci.ics.hyracks.dataflow.std.connectors.OneToOneConnectorDescriptor",
+    "type": "connector"
+   },
+   "in-operator-id": "ODID:6cc231d4-a25c-4301-98f9-3a9dd548a635",
+   "in-operator-port": 0,
+   "out-operator-id": "ODID:c29fedec-a107-4d03-822b-5f08d44fbfc2",
+   "out-operator-port": 0,
+   "type": "connector-info"
+  },
+  {
+   "connector": {
+    "id": "2c5b8681-b3d6-43e4-9a43-b662626231ff",
+    "java-class": "edu.uci.ics.hyracks.dataflow.std.connectors.OneToOneConnectorDescriptor",
+    "type": "connector"
+   },
+   "in-operator-id": "ODID:019d92ce-5cb6-4ed4-a55b-5088b1298356",
+   "in-operator-port": 0,
+   "out-operator-id": "ODID:bd489957-baec-4872-9b64-6ce7ecc36ed1",
+   "out-operator-port": 0,
+   "type": "connector-info"
+  },
+  {
+   "connector": {
+    "id": "448a4dcf-989b-455a-b8db-37fd73633a08",
+    "java-class": "edu.uci.ics.hyracks.dataflow.std.connectors.MToNHashPartitioningConnectorDescriptor",
+    "type": "connector"
+   },
+   "in-operator-id": "ODID:84042597-2ad3-41fd-95be-7c7a8c9ba6e7",
+   "in-operator-port": 0,
+   "out-operator-id": "ODID:cf5387c0-3490-4c50-b47e-ac20c5e961a7",
+   "out-operator-port": 1,
+   "type": "connector-info"
+  },
+  {
+   "connector": {
+    "id": "08d1bec0-36f2-42d5-a8c7-1d07f993dfe0",
+    "java-class": "edu.uci.ics.hyracks.dataflow.std.connectors.MToNHashPartitioningConnectorDescriptor",
+    "type": "connector"
+   },
+   "in-operator-id": "ODID:162900ff-b4a6-4d0c-b9c2-6595f9d11e4e",
+   "in-operator-port": 0,
+   "out-operator-id": "ODID:094cb8b2-df6d-4f73-a8f5-00a6ce14d59b",
+   "out-operator-port": 0,
+   "type": "connector-info"
+  },
+  {
+   "connector": {
+    "id": "0bddc12e-bcbb-4993-8d32-b657505305fc",
+    "java-class": "edu.uci.ics.hyracks.dataflow.std.connectors.MToNHashPartitioningConnectorDescriptor",
+    "type": "connector"
+   },
+   "in-operator-id": "ODID:6a50b453-2460-4ee8-8fc4-9855ecb54862",
+   "in-operator-port": 0,
+   "out-operator-id": "ODID:83b6ee56-1fba-4df7-bd13-89de2edfc4dc",
+   "out-operator-port": 0,
+   "type": "connector-info"
+  },
+  {
+   "connector": {
+    "id": "e066c3c9-3a65-46ae-ab78-417c872d8482",
+    "java-class": "edu.uci.ics.hyracks.dataflow.std.connectors.OneToOneConnectorDescriptor",
+    "type": "connector"
+   },
+   "in-operator-id": "ODID:094cb8b2-df6d-4f73-a8f5-00a6ce14d59b",
+   "in-operator-port": 0,
+   "out-operator-id": "ODID:11496054-b3b3-4730-b43a-7130c474ef1f",
+   "out-operator-port": 0,
+   "type": "connector-info"
+  },
+  {
+   "connector": {
+    "id": "63433aaf-1046-48ca-8bce-ddb9e645aaaf",
+    "java-class": "edu.uci.ics.hyracks.dataflow.std.connectors.MToNHashPartitioningConnectorDescriptor",
+    "type": "connector"
+   },
+   "in-operator-id": "ODID:73e52bad-0cff-4d55-b95b-176b16f7f464",
+   "in-operator-port": 0,
+   "out-operator-id": "ODID:fe17ac32-aa06-4273-bfeb-6ad12004146d",
+   "out-operator-port": 0,
+   "type": "connector-info"
+  },
+  {
+   "connector": {
+    "id": "3194b91e-6df6-47c2-86f9-e933849a1d51",
+    "java-class": "edu.uci.ics.hyracks.dataflow.std.connectors.OneToOneConnectorDescriptor",
+    "type": "connector"
+   },
+   "in-operator-id": "ODID:4c0306ed-84f7-4dd8-987c-a800d925505a",
+   "in-operator-port": 0,
+   "out-operator-id": "ODID:73e52bad-0cff-4d55-b95b-176b16f7f464",
+   "out-operator-port": 0,
+   "type": "connector-info"
+  },
+  {
+   "connector": {
+    "id": "2d0cbb34-5d09-4924-b7d7-d754578d369b",
+    "java-class": "edu.uci.ics.hyracks.dataflow.std.connectors.MToNReplicatingConnectorDescriptor",
+    "type": "connector"
+   },
+   "in-operator-id": "ODID:34bea0d2-8c02-46af-a281-d359e73e8459",
+   "in-operator-port": 0,
+   "out-operator-id": "ODID:dde20475-0341-40cd-8d87-47019d4af7e7",
+   "out-operator-port": 0,
+   "type": "connector-info"
+  },
+  {
+   "connector": {
+    "id": "061b01cf-dd3d-4e4a-b4d1-2e55430b7eff",
+    "java-class": "edu.uci.ics.hyracks.dataflow.std.connectors.OneToOneConnectorDescriptor",
+    "type": "connector"
+   },
+   "in-operator-id": "ODID:fe17ac32-aa06-4273-bfeb-6ad12004146d",
+   "in-operator-port": 0,
+   "out-operator-id": "ODID:97f7b483-5810-4f62-a3f2-8dc108f211bf",
+   "out-operator-port": 0,
+   "type": "connector-info"
+  },
+  {
+   "connector": {
+    "id": "c74fdcf7-75b1-469f-aa4f-bdeec91ea356",
+    "java-class": "edu.uci.ics.hyracks.dataflow.std.connectors.OneToOneConnectorDescriptor",
+    "type": "connector"
+   },
+   "in-operator-id": "ODID:470b4218-4ff6-4699-b05d-d5624f70c346",
+   "in-operator-port": 0,
+   "out-operator-id": "ODID:5f398745-a0da-4a93-8654-add2e550003c",
+   "out-operator-port": 0,
+   "type": "connector-info"
+  },
+  {
+   "connector": {
+    "id": "8742990b-c6b3-43f5-84e4-22df1a61d7c6",
+    "java-class": "edu.uci.ics.hyracks.dataflow.std.connectors.OneToOneConnectorDescriptor",
+    "type": "connector"
+   },
+   "in-operator-id": "ODID:800cab7e-8228-4c85-b19a-39cb844893b7",
+   "in-operator-port": 0,
+   "out-operator-id": "ODID:86cf6620-ce7a-447d-82ac-32d71720d008",
+   "out-operator-port": 0,
+   "type": "connector-info"
+  },
+  {
+   "connector": {
+    "id": "6d59eadb-3286-49f0-80d6-d7ad9d4247a3",
+    "java-class": "edu.uci.ics.hyracks.dataflow.std.connectors.OneToOneConnectorDescriptor",
+    "type": "connector"
+   },
+   "in-operator-id": "ODID:ad75356e-262b-468d-ad27-5ead6cfa49b3",
+   "in-operator-port": 0,
+   "out-operator-id": "ODID:649b70fe-e549-4f38-b248-1868bf691b87",
+   "out-operator-port": 0,
+   "type": "connector-info"
+  },
+  {
+   "connector": {
+    "id": "b400c160-9fca-4151-a5a1-2387da980702",
+    "java-class": "edu.uci.ics.hyracks.dataflow.std.connectors.OneToOneConnectorDescriptor",
+    "type": "connector"
+   },
+   "in-operator-id": "ODID:f323df6e-1caa-4cb2-9c2c-903df08ee288",
+   "in-operator-port": 0,
+   "out-operator-id": "ODID:67d4cc31-c6fb-48d3-8ca3-af44628f68ca",
+   "out-operator-port": 0,
+   "type": "connector-info"
+  },
+  {
+   "connector": {
+    "id": "807b4c5d-ac3f-49e2-a65a-e58348346e49",
+    "java-class": "edu.uci.ics.hyracks.dataflow.std.connectors.MToNHashPartitioningConnectorDescriptor",
+    "type": "connector"
+   },
+   "in-operator-id": "ODID:fe400283-741d-4b35-bc79-9e430715f3fb",
+   "in-operator-port": 0,
+   "out-operator-id": "ODID:b07bbb40-a41c-4d00-994b-f5fa5d3eca34",
+   "out-operator-port": 1,
+   "type": "connector-info"
+  },
+  {
+   "connector": {
+    "id": "6555a4da-7164-40c7-9c11-ce6bb098e1bd",
+    "java-class": "edu.uci.ics.hyracks.dataflow.std.connectors.OneToOneConnectorDescriptor",
+    "type": "connector"
+   },
+   "in-operator-id": "ODID:cf5387c0-3490-4c50-b47e-ac20c5e961a7",
+   "in-operator-port": 0,
+   "out-operator-id": "ODID:34bea0d2-8c02-46af-a281-d359e73e8459",
+   "out-operator-port": 0,
+   "type": "connector-info"
+  },
+  {
+   "connector": {
+    "id": "90ee0791-9c0e-47e8-832d-8344d8f4c36f",
+    "java-class": "edu.uci.ics.hyracks.dataflow.std.connectors.OneToOneConnectorDescriptor",
+    "type": "connector"
+   },
+   "in-operator-id": "ODID:3796886b-044c-4bfd-b682-9c3a2df05f31",
+   "in-operator-port": 0,
+   "out-operator-id": "ODID:40fc40ba-d7e5-44a2-a9a6-88642a2e2f79",
+   "out-operator-port": 0,
+   "type": "connector-info"
+  },
+  {
+   "connector": {
+    "id": "0c93505b-ac0f-4485-98dd-ad1310c8a8af",
+    "java-class": "edu.uci.ics.hyracks.dataflow.std.connectors.OneToOneConnectorDescriptor",
+    "type": "connector"
+   },
+   "in-operator-id": "ODID:8e7bd09e-3fe2-4022-b493-64320be10f22",
+   "in-operator-port": 0,
+   "out-operator-id": "ODID:6cc231d4-a25c-4301-98f9-3a9dd548a635",
+   "out-operator-port": 0,
+   "type": "connector-info"
+  },
+  {
+   "connector": {
+    "id": "dfac2841-28bd-4d2c-be58-60e800885ecb",
+    "java-class": "edu.uci.ics.hyracks.dataflow.std.connectors.OneToOneConnectorDescriptor",
+    "type": "connector"
+   },
+   "in-operator-id": "ODID:5f398745-a0da-4a93-8654-add2e550003c",
+   "in-operator-port": 0,
+   "out-operator-id": "ODID:4c0306ed-84f7-4dd8-987c-a800d925505a",
+   "out-operator-port": 0,
+   "type": "connector-info"
+  },
+  {
+   "connector": {
+    "id": "58da74ca-aa5a-4d1c-95a1-46a17239430b",
+    "java-class": "edu.uci.ics.hyracks.dataflow.std.connectors.MToNHashPartitioningConnectorDescriptor",
+    "type": "connector"
+   },
+   "in-operator-id": "ODID:c29fedec-a107-4d03-822b-5f08d44fbfc2",
+   "in-operator-port": 0,
+   "out-operator-id": "ODID:b07bbb40-a41c-4d00-994b-f5fa5d3eca34",
+   "out-operator-port": 0,
+   "type": "connector-info"
+  },
+  {
+   "connector": {
+    "id": "b58210fa-978c-434f-8417-12fba92a25a9",
+    "java-class": "edu.uci.ics.hyracks.dataflow.std.connectors.MToNHashPartitioningMergingConnectorDescriptor",
+    "type": "connector"
+   },
+   "in-operator-id": "ODID:97f7b483-5810-4f62-a3f2-8dc108f211bf",
+   "in-operator-port": 0,
+   "out-operator-id": "ODID:fe400283-741d-4b35-bc79-9e430715f3fb",
+   "out-operator-port": 0,
+   "type": "connector-info"
+  },
+  {
+   "connector": {
+    "id": "b7081523-098e-47bd-8b86-27d8d7c4c199",
+    "java-class": "edu.uci.ics.hyracks.dataflow.std.connectors.OneToOneConnectorDescriptor",
+    "type": "connector"
+   },
+   "in-operator-id": "ODID:17c0bf1d-edab-423b-a932-23d1c3111b0e",
+   "in-operator-port": 0,
+   "out-operator-id": "ODID:7e45e056-61c7-47a0-a5d0-5e145b48b64b",
+   "out-operator-port": 0,
+   "type": "connector-info"
+  }
+ ],
+ "operators": [
+  {
+   "id": "939559d4-4753-42ca-a96b-5a4d867521e4",
+   "in-arity": 0,
+   "java-class": "edu.uci.ics.aqua.runtime.operators.base.AquaMetaOperatorDescriptor",
+   "micro-operators": ["ets"],
+   "out-arity": 1,
+   "type": "operator"
+  },
+  {
+   "id": "97f7b483-5810-4f62-a3f2-8dc108f211bf",
+   "in-arity": 1,
+   "java-class": "edu.uci.ics.hyracks.dataflow.std.sort.InMemorySortOperatorDescriptor",
+   "out-arity": 1,
+   "type": "operator"
+  },
+  {
+   "id": "bd489957-baec-4872-9b64-6ce7ecc36ed1",
+   "in-arity": 1,
+   "java-class": "edu.uci.ics.aqua.runtime.operators.base.AquaMetaOperatorDescriptor",
+   "micro-operators": ["stream-project [1, 3]"],
+   "out-arity": 1,
+   "type": "operator"
+  },
+  {
+   "id": "2c7f5446-ca70-424e-b72b-dcbfba13c5fc",
+   "in-arity": 1,
+   "java-class": "edu.uci.ics.aqua.runtime.operators.base.AquaMetaOperatorDescriptor",
+   "micro-operators": [
+    "assign [4] := [edu.uci.ics.asterix.runtime.evaluators.tagged.FieldAccessByNameEvalFactory@3a747fa2]",
+    "unnest 5 <- edu.uci.ics.asterix.runtime.unnestingfunctions.std.SubsetCollectionDescriptor$1@366782a9"
+   ],
+   "out-arity": 1,
+   "type": "operator"
+  },
+  {
+   "id": "8e7bd09e-3fe2-4022-b493-64320be10f22",
+   "in-arity": 0,
+   "java-class": "edu.uci.ics.aqua.runtime.operators.base.AquaMetaOperatorDescriptor",
+   "micro-operators": ["ets"],
+   "out-arity": 1,
+   "type": "operator"
+  },
+  {
+   "id": "61e21faf-53be-44c7-a39b-d621a19b3dc6",
+   "in-arity": 0,
+   "java-class": "edu.uci.ics.aqua.runtime.operators.base.AquaMetaOperatorDescriptor",
+   "micro-operators": ["ets"],
+   "out-arity": 1,
+   "type": "operator"
+  },
+  {
+   "id": "c29fedec-a107-4d03-822b-5f08d44fbfc2",
+   "in-arity": 1,
+   "java-class": "edu.uci.ics.aqua.runtime.operators.base.AquaMetaOperatorDescriptor",
+   "micro-operators": [
+    "assign [2, 3] := [edu.uci.ics.asterix.runtime.evaluators.tagged.FieldAccessByNameEvalFactory@45b34126, edu.uci.ics.asterix.runtime.evaluators.tagged.FieldAccessByNameEvalFactory@7b7a4989]",
+    "assign [4] := [edu.uci.ics.asterix.runtime.evaluators.tagged.functions.LenDescriptor$1@197200b4]",
+    "unnest 5 <- edu.uci.ics.asterix.runtime.unnestingfunctions.std.ScanCollectionDescriptor$1@b8c3679"
+   ],
+   "out-arity": 1,
+   "type": "operator"
+  },
+  {
+   "id": "dde20475-0341-40cd-8d87-47019d4af7e7",
+   "in-arity": 1,
+   "java-class": "edu.uci.ics.aqua.runtime.operators.base.AquaMetaOperatorDescriptor",
+   "micro-operators": ["sink-write [0] outputFile"],
+   "out-arity": 0,
+   "type": "operator"
+  },
+  {
+   "id": "83b6ee56-1fba-4df7-bd13-89de2edfc4dc",
+   "in-arity": 2,
+   "java-class": "edu.uci.ics.hyracks.dataflow.std.join.InMemoryHashJoinOperatorDescriptor",
+   "out-arity": 1,
+   "type": "operator"
+  },
+  {
+   "id": "019d92ce-5cb6-4ed4-a55b-5088b1298356",
+   "in-arity": 2,
+   "java-class": "edu.uci.ics.hyracks.dataflow.std.join.InMemoryHashJoinOperatorDescriptor",
+   "out-arity": 1,
+   "type": "operator"
+  },
+  {
+   "id": "6cc231d4-a25c-4301-98f9-3a9dd548a635",
+   "in-arity": 1,
+   "java-class": "edu.uci.ics.hyracks.storage.am.btree.dataflow.BTreeSearchOperatorDescriptor",
+   "out-arity": 1,
+   "type": "operator"
+  },
+  {
+   "id": "470b4218-4ff6-4699-b05d-d5624f70c346",
+   "in-arity": 0,
+   "java-class": "edu.uci.ics.aqua.runtime.operators.base.AquaMetaOperatorDescriptor",
+   "micro-operators": ["ets"],
+   "out-arity": 1,
+   "type": "operator"
+  },
+  {
+   "id": "fe17ac32-aa06-4273-bfeb-6ad12004146d",
+   "in-arity": 1,
+   "java-class": "edu.uci.ics.hyracks.dataflow.std.group.HashGroupOperatorDescriptor",
+   "out-arity": 1,
+   "type": "operator"
+  },
+  {
+   "id": "ce6dab26-9823-4e74-9834-914ab6798874",
+   "in-arity": 1,
+   "java-class": "edu.uci.ics.hyracks.dataflow.std.group.PreclusteredGroupOperatorDescriptor",
+   "out-arity": 1,
+   "type": "operator"
+  },
+  {
+   "id": "cf5387c0-3490-4c50-b47e-ac20c5e961a7",
+   "in-arity": 2,
+   "java-class": "edu.uci.ics.hyracks.dataflow.std.join.InMemoryHashJoinOperatorDescriptor",
+   "out-arity": 1,
+   "type": "operator"
+  },
+  {
+   "id": "86cf6620-ce7a-447d-82ac-32d71720d008",
+   "in-arity": 1,
+   "java-class": "edu.uci.ics.hyracks.dataflow.std.group.PreclusteredGroupOperatorDescriptor",
+   "out-arity": 1,
+   "type": "operator"
+  },
+  {
+   "id": "84042597-2ad3-41fd-95be-7c7a8c9ba6e7",
+   "in-arity": 1,
+   "java-class": "edu.uci.ics.hyracks.storage.am.btree.dataflow.BTreeSearchOperatorDescriptor",
+   "out-arity": 1,
+   "type": "operator"
+  },
+  {
+   "id": "f0024d8c-b182-4c84-9642-562b7f873cb1",
+   "in-arity": 1,
+   "java-class": "edu.uci.ics.hyracks.dataflow.std.sort.InMemorySortOperatorDescriptor",
+   "out-arity": 1,
+   "type": "operator"
+  },
+  {
+   "id": "3796886b-044c-4bfd-b682-9c3a2df05f31",
+   "in-arity": 0,
+   "java-class": "edu.uci.ics.aqua.runtime.operators.base.AquaMetaOperatorDescriptor",
+   "micro-operators": ["ets"],
+   "out-arity": 1,
+   "type": "operator"
+  },
+  {
+   "id": "649b70fe-e549-4f38-b248-1868bf691b87",
+   "in-arity": 1,
+   "java-class": "edu.uci.ics.hyracks.dataflow.std.sort.InMemorySortOperatorDescriptor",
+   "out-arity": 1,
+   "type": "operator"
+  },
+  {
+   "id": "a80baf03-e23a-4e51-828a-b9ec8620767b",
+   "in-arity": 1,
+   "java-class": "edu.uci.ics.hyracks.dataflow.std.group.HashGroupOperatorDescriptor",
+   "out-arity": 1,
+   "type": "operator"
+  },
+  {
+   "id": "34bea0d2-8c02-46af-a281-d359e73e8459",
+   "in-arity": 1,
+   "java-class": "edu.uci.ics.aqua.runtime.operators.base.AquaMetaOperatorDescriptor",
+   "micro-operators": [
+    "assign [4] := [edu.uci.ics.asterix.runtime.evaluators.tagged.functions.AbstractRecordConstructorDescriptor$1@224c47db]",
+    "stream-project [4]"
+   ],
+   "out-arity": 1,
+   "type": "operator"
+  },
+  {
+   "id": "800cab7e-8228-4c85-b19a-39cb844893b7",
+   "in-arity": 1,
+   "java-class": "edu.uci.ics.hyracks.dataflow.std.sort.InMemorySortOperatorDescriptor",
+   "out-arity": 1,
+   "type": "operator"
+  },
+  {
+   "id": "094cb8b2-df6d-4f73-a8f5-00a6ce14d59b",
+   "in-arity": 2,
+   "java-class": "edu.uci.ics.hyracks.dataflow.std.join.InMemoryHashJoinOperatorDescriptor",
+   "out-arity": 1,
+   "type": "operator"
+  },
+  {
+   "id": "17c0bf1d-edab-423b-a932-23d1c3111b0e",
+   "in-arity": 0,
+   "java-class": "edu.uci.ics.aqua.runtime.operators.base.AquaMetaOperatorDescriptor",
+   "micro-operators": ["ets"],
+   "out-arity": 1,
+   "type": "operator"
+  },
+  {
+   "id": "11496054-b3b3-4730-b43a-7130c474ef1f",
+   "in-arity": 1,
+   "java-class": "edu.uci.ics.aqua.runtime.operators.base.AquaMetaOperatorDescriptor",
+   "micro-operators": [
+    "assign [12] := [edu.uci.ics.asterix.runtime.evaluators.tagged.functions.SimilarityDescriptor$1@3e018c74]",
+    "stream-select edu.uci.ics.asterix.runtime.evaluators.comparisons.ComparisonEvalFactory@57ac3379"
+   ],
+   "out-arity": 1,
+   "type": "operator"
+  },
+  {
+   "id": "fe400283-741d-4b35-bc79-9e430715f3fb",
+   "in-arity": 1,
+   "java-class": "edu.uci.ics.aqua.runtime.operators.base.AquaMetaOperatorDescriptor",
+   "micro-operators": [
+    "assign [2] := [ColumnAccess(0)]",
+    "running-aggregate [3] := [edu.uci.ics.asterix.runtime.runningaggregates.std.TidRunningAggregateDescriptor$1@6a6779e6]",
+    "assign [4] := [ConstantEvalFactory true]"
+   ],
+   "out-arity": 1,
+   "type": "operator"
+  },
+  {
+   "id": "73e52bad-0cff-4d55-b95b-176b16f7f464",
+   "in-arity": 1,
+   "java-class": "edu.uci.ics.hyracks.dataflow.std.group.HashGroupOperatorDescriptor",
+   "out-arity": 1,
+   "type": "operator"
+  },
+  {
+   "id": "f323df6e-1caa-4cb2-9c2c-903df08ee288",
+   "in-arity": 1,
+   "java-class": "edu.uci.ics.hyracks.storage.am.btree.dataflow.BTreeSearchOperatorDescriptor",
+   "out-arity": 1,
+   "type": "operator"
+  },
+  {
+   "id": "899fc36b-024c-402f-a155-a218dc3358ee",
+   "in-arity": 1,
+   "java-class": "edu.uci.ics.aqua.runtime.operators.base.AquaMetaOperatorDescriptor",
+   "micro-operators": [
+    "assign [2] := [ColumnAccess(0)]",
+    "running-aggregate [3] := [edu.uci.ics.asterix.runtime.runningaggregates.std.TidRunningAggregateDescriptor$1@2f74219d]",
+    "assign [4] := [ConstantEvalFactory true]"
+   ],
+   "out-arity": 1,
+   "type": "operator"
+  },
+  {
+   "id": "b07bbb40-a41c-4d00-994b-f5fa5d3eca34",
+   "in-arity": 2,
+   "java-class": "edu.uci.ics.hyracks.dataflow.std.join.InMemoryHashJoinOperatorDescriptor",
+   "out-arity": 1,
+   "type": "operator"
+  },
+  {
+   "id": "ad75356e-262b-468d-ad27-5ead6cfa49b3",
+   "in-arity": 1,
+   "java-class": "edu.uci.ics.hyracks.dataflow.std.group.HashGroupOperatorDescriptor",
+   "out-arity": 1,
+   "type": "operator"
+  },
+  {
+   "id": "40fc40ba-d7e5-44a2-a9a6-88642a2e2f79",
+   "in-arity": 1,
+   "java-class": "edu.uci.ics.hyracks.storage.am.btree.dataflow.BTreeSearchOperatorDescriptor",
+   "out-arity": 1,
+   "type": "operator"
+  },
+  {
+   "id": "6a50b453-2460-4ee8-8fc4-9855ecb54862",
+   "in-arity": 1,
+   "java-class": "edu.uci.ics.aqua.runtime.operators.base.AquaMetaOperatorDescriptor",
+   "micro-operators": [
+    "assign [2, 3] := [edu.uci.ics.asterix.runtime.evaluators.tagged.FieldAccessByNameEvalFactory@714ae2c1, edu.uci.ics.asterix.runtime.evaluators.tagged.FieldAccessByNameEvalFactory@6b6d2702]",
+    "assign [4] := [edu.uci.ics.asterix.runtime.evaluators.tagged.functions.LenDescriptor$1@4b1c2b67]",
+    "unnest 5 <- edu.uci.ics.asterix.runtime.unnestingfunctions.std.ScanCollectionDescriptor$1@26659db7"
+   ],
+   "out-arity": 1,
+   "type": "operator"
+  },
+  {
+   "id": "5f398745-a0da-4a93-8654-add2e550003c",
+   "in-arity": 1,
+   "java-class": "edu.uci.ics.hyracks.storage.am.btree.dataflow.BTreeSearchOperatorDescriptor",
+   "out-arity": 1,
+   "type": "operator"
+  },
+  {
+   "id": "55442d10-e749-4178-99e7-c29d40c980d1",
+   "in-arity": 1,
+   "java-class": "edu.uci.ics.hyracks.dataflow.std.group.HashGroupOperatorDescriptor",
+   "out-arity": 1,
+   "type": "operator"
+  },
+  {
+   "id": "162900ff-b4a6-4d0c-b9c2-6595f9d11e4e",
+   "in-arity": 1,
+   "java-class": "edu.uci.ics.aqua.runtime.operators.base.AquaMetaOperatorDescriptor",
+   "micro-operators": [
+    "assign [4] := [edu.uci.ics.asterix.runtime.evaluators.tagged.FieldAccessByNameEvalFactory@59556d12]",
+    "unnest 5 <- edu.uci.ics.asterix.runtime.unnestingfunctions.std.SubsetCollectionDescriptor$1@776be68f"
+   ],
+   "out-arity": 1,
+   "type": "operator"
+  },
+  {
+   "id": "67d4cc31-c6fb-48d3-8ca3-af44628f68ca",
+   "in-arity": 1,
+   "java-class": "edu.uci.ics.aqua.runtime.operators.base.AquaMetaOperatorDescriptor",
+   "micro-operators": [
+    "assign [2] := [edu.uci.ics.asterix.runtime.evaluators.tagged.FieldAccessByNameEvalFactory@4cedf389]",
+    "unnest 3 <- edu.uci.ics.asterix.runtime.unnestingfunctions.std.ScanCollectionDescriptor$1@1a0fced4"
+   ],
+   "out-arity": 1,
+   "type": "operator"
+  },
+  {
+   "id": "7e45e056-61c7-47a0-a5d0-5e145b48b64b",
+   "in-arity": 1,
+   "java-class": "edu.uci.ics.hyracks.storage.am.btree.dataflow.BTreeSearchOperatorDescriptor",
+   "out-arity": 1,
+   "type": "operator"
+  },
+  {
+   "id": "4c0306ed-84f7-4dd8-987c-a800d925505a",
+   "in-arity": 1,
+   "java-class": "edu.uci.ics.aqua.runtime.operators.base.AquaMetaOperatorDescriptor",
+   "micro-operators": [
+    "assign [2] := [edu.uci.ics.asterix.runtime.evaluators.tagged.FieldAccessByNameEvalFactory@3d3cdaa]",
+    "unnest 3 <- edu.uci.ics.asterix.runtime.unnestingfunctions.std.ScanCollectionDescriptor$1@466355dc"
+   ],
+   "out-arity": 1,
+   "type": "operator"
+  }
+ ],
+ "type": "job"
+}
+
diff --git a/asterix-app/src/test/resources/fuzzyjoin/pub/fuzzy-join-aql.png b/asterix-app/src/test/resources/fuzzyjoin/pub/fuzzy-join-aql.png
new file mode 100644
index 0000000..35427bf
--- /dev/null
+++ b/asterix-app/src/test/resources/fuzzyjoin/pub/fuzzy-join-aql.png
Binary files differ
diff --git a/asterix-app/src/test/resources/fuzzyjoin/pub/fuzzy-join-aql.ps b/asterix-app/src/test/resources/fuzzyjoin/pub/fuzzy-join-aql.ps
new file mode 100644
index 0000000..f5c7814
--- /dev/null
+++ b/asterix-app/src/test/resources/fuzzyjoin/pub/fuzzy-join-aql.ps
@@ -0,0 +1,5791 @@
+%!PS-Adobe-3.0
+%%Creator: graphviz version 2.26.3 (20100126.1600)
+%%Title: hyracks_job
+%%Pages: (atend)
+%%BoundingBox: (atend)
+%%EndComments
+save
+%%BeginProlog
+/DotDict 200 dict def
+DotDict begin
+
+/setupLatin1 {
+mark
+/EncodingVector 256 array def
+ EncodingVector 0
+
+ISOLatin1Encoding 0 255 getinterval putinterval
+EncodingVector 45 /hyphen put
+
+% Set up ISO Latin 1 character encoding
+/starnetISO {
+        dup dup findfont dup length dict begin
+        { 1 index /FID ne { def }{ pop pop } ifelse
+        } forall
+        /Encoding EncodingVector def
+        currentdict end definefont
+} def
+/Times-Roman starnetISO def
+/Times-Italic starnetISO def
+/Times-Bold starnetISO def
+/Times-BoldItalic starnetISO def
+/Helvetica starnetISO def
+/Helvetica-Oblique starnetISO def
+/Helvetica-Bold starnetISO def
+/Helvetica-BoldOblique starnetISO def
+/Courier starnetISO def
+/Courier-Oblique starnetISO def
+/Courier-Bold starnetISO def
+/Courier-BoldOblique starnetISO def
+cleartomark
+} bind def
+
+%%BeginResource: procset graphviz 0 0
+/coord-font-family /Times-Roman def
+/default-font-family /Times-Roman def
+/coordfont coord-font-family findfont 8 scalefont def
+
+/InvScaleFactor 1.0 def
+/set_scale {
+       dup 1 exch div /InvScaleFactor exch def
+       scale
+} bind def
+
+% styles
+/solid { [] 0 setdash } bind def
+/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def
+/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def
+/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def
+/bold { 2 setlinewidth } bind def
+/filled { } bind def
+/unfilled { } bind def
+/rounded { } bind def
+/diagonals { } bind def
+
+% hooks for setting color 
+/nodecolor { sethsbcolor } bind def
+/edgecolor { sethsbcolor } bind def
+/graphcolor { sethsbcolor } bind def
+/nopcolor {pop pop pop} bind def
+
+/beginpage {	% i j npages
+	/npages exch def
+	/j exch def
+	/i exch def
+	/str 10 string def
+	npages 1 gt {
+		gsave
+			coordfont setfont
+			0 0 moveto
+			(\() show i str cvs show (,) show j str cvs show (\)) show
+		grestore
+	} if
+} bind def
+
+/set_font {
+	findfont exch
+	scalefont setfont
+} def
+
+% draw text fitted to its expected width
+/alignedtext {			% width text
+	/text exch def
+	/width exch def
+	gsave
+		width 0 gt {
+			[] 0 setdash
+			text stringwidth pop width exch sub text length div 0 text ashow
+		} if
+	grestore
+} def
+
+/boxprim {				% xcorner ycorner xsize ysize
+		4 2 roll
+		moveto
+		2 copy
+		exch 0 rlineto
+		0 exch rlineto
+		pop neg 0 rlineto
+		closepath
+} bind def
+
+/ellipse_path {
+	/ry exch def
+	/rx exch def
+	/y exch def
+	/x exch def
+	matrix currentmatrix
+	newpath
+	x y translate
+	rx ry scale
+	0 0 1 0 360 arc
+	setmatrix
+} bind def
+
+/endpage { showpage } bind def
+/showpage { } def
+
+/layercolorseq
+	[	% layer color sequence - darkest to lightest
+		[0 0 0]
+		[.2 .8 .8]
+		[.4 .8 .8]
+		[.6 .8 .8]
+		[.8 .8 .8]
+	]
+def
+
+/layerlen layercolorseq length def
+
+/setlayer {/maxlayer exch def /curlayer exch def
+	layercolorseq curlayer 1 sub layerlen mod get
+	aload pop sethsbcolor
+	/nodecolor {nopcolor} def
+	/edgecolor {nopcolor} def
+	/graphcolor {nopcolor} def
+} bind def
+
+/onlayer { curlayer ne {invis} if } def
+
+/onlayers {
+	/myupper exch def
+	/mylower exch def
+	curlayer mylower lt
+	curlayer myupper gt
+	or
+	{invis} if
+} def
+
+/curlayer 0 def
+
+%%EndResource
+%%EndProlog
+%%BeginSetup
+14 default-font-family set_font
+1 setmiterlimit
+% /arrowlength 10 def
+% /arrowwidth 5 def
+
+% make sure pdfmark is harmless for PS-interpreters other than Distiller
+/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse
+% make '<<' and '>>' safe on PS Level 1 devices
+/languagelevel where {pop languagelevel}{1} ifelse
+2 lt {
+    userdict (<<) cvn ([) cvn load put
+    userdict (>>) cvn ([) cvn load put
+} if
+
+%%EndSetup
+setupLatin1
+%%Page: 1 1
+%%PageBoundingBox: 36 36 781 1476
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 745 1440 boxprim clip newpath
+0.825688 0.825688 set_scale 0 rotate 47.6 48.6 translate
+% 939559d4-4753-42ca-a96b-5a4d867521e4
+gsave
+0.54118 0.25098 0.93333 nodecolor
+newpath 275 1352 moveto
+213 1352 lineto
+201 1340 lineto
+201 1320 lineto
+213 1308 lineto
+275 1308 lineto
+287 1320 lineto
+287 1340 lineto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 275 1352 moveto
+213 1352 lineto
+201 1340 lineto
+201 1320 lineto
+213 1308 lineto
+275 1308 lineto
+287 1320 lineto
+287 1340 lineto
+closepath stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 213 1352 moveto
+207 1352 201 1346 201 1340 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 213 1352 moveto
+207 1352 201 1346 201 1340 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 201 1320 moveto
+201 1314 207 1308 213 1308 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 201 1320 moveto
+201 1314 207 1308 213 1308 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 275 1308 moveto
+281 1308 287 1314 287 1320 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 275 1308 moveto
+281 1308 287 1314 287 1320 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 287 1340 moveto
+287 1346 281 1352 275 1352 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 287 1340 moveto
+287 1346 281 1352 275 1352 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 275 1352 moveto
+213 1352 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 213 1352 moveto
+207 1352 201 1346 201 1340 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 201 1340 moveto
+201 1320 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 201 1320 moveto
+201 1314 207 1308 213 1308 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 213 1308 moveto
+275 1308 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 275 1308 moveto
+281 1308 287 1314 287 1320 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 287 1320 moveto
+287 1340 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 287 1340 moveto
+287 1346 281 1352 275 1352 curveto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+209 1335.4 moveto 70 (AquaMeta) alignedtext
+0 0 0 nodecolor
+14 /Times-Roman set_font
+228 1317.4 moveto 32 (\(ets\)) alignedtext
+grestore
+% 84042597-2ad3-41fd-95be-7c7a8c9ba6e7
+gsave
+0.54118 0.25098 0.93333 nodecolor
+newpath 283 1446 moveto
+205 1446 lineto
+193 1434 lineto
+193 1422 lineto
+205 1410 lineto
+283 1410 lineto
+295 1422 lineto
+295 1434 lineto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 283 1446 moveto
+205 1446 lineto
+193 1434 lineto
+193 1422 lineto
+205 1410 lineto
+283 1410 lineto
+295 1422 lineto
+295 1434 lineto
+closepath stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 205 1446 moveto
+199 1446 193 1440 193 1434 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 205 1446 moveto
+199 1446 193 1440 193 1434 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 193 1422 moveto
+193 1416 199 1410 205 1410 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 193 1422 moveto
+193 1416 199 1410 205 1410 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 283 1410 moveto
+289 1410 295 1416 295 1422 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 283 1410 moveto
+289 1410 295 1416 295 1422 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 295 1434 moveto
+295 1440 289 1446 283 1446 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 295 1434 moveto
+295 1440 289 1446 283 1446 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 283 1446 moveto
+205 1446 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 205 1446 moveto
+199 1446 193 1440 193 1434 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 193 1434 moveto
+193 1422 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 193 1422 moveto
+193 1416 199 1410 205 1410 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 205 1410 moveto
+283 1410 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 283 1410 moveto
+289 1410 295 1416 295 1422 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 295 1422 moveto
+295 1434 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 295 1434 moveto
+295 1440 289 1446 283 1446 curveto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+200.5 1424.4 moveto 87 (BTreeSearch) alignedtext
+grestore
+% 939559d4-4753-42ca-a96b-5a4d867521e4->84042597-2ad3-41fd-95be-7c7a8c9ba6e7
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 244 1352.24 moveto
+244 1366.23 244 1384.43 244 1399.49 curveto
+stroke
+0 0 0 edgecolor
+newpath 240.5 1399.79 moveto
+244 1409.79 lineto
+247.5 1399.79 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 240.5 1399.79 moveto
+244 1409.79 lineto
+247.5 1399.79 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+244 1375.4 moveto 23 (1:1) alignedtext
+grestore
+% 97f7b483-5810-4f62-a3f2-8dc108f211bf
+gsave
+0.54118 0.25098 0.93333 nodecolor
+newpath 814 510 moveto
+724 510 lineto
+712 498 lineto
+712 486 lineto
+724 474 lineto
+814 474 lineto
+826 486 lineto
+826 498 lineto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 814 510 moveto
+724 510 lineto
+712 498 lineto
+712 486 lineto
+724 474 lineto
+814 474 lineto
+826 486 lineto
+826 498 lineto
+closepath stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 724 510 moveto
+718 510 712 504 712 498 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 724 510 moveto
+718 510 712 504 712 498 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 712 486 moveto
+712 480 718 474 724 474 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 712 486 moveto
+712 480 718 474 724 474 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 814 474 moveto
+820 474 826 480 826 486 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 814 474 moveto
+820 474 826 480 826 486 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 826 498 moveto
+826 504 820 510 814 510 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 826 498 moveto
+826 504 820 510 814 510 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 814 510 moveto
+724 510 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 724 510 moveto
+718 510 712 504 712 498 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 712 498 moveto
+712 486 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 712 486 moveto
+712 480 718 474 724 474 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 724 474 moveto
+814 474 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 814 474 moveto
+820 474 826 480 826 486 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 826 486 moveto
+826 498 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 826 498 moveto
+826 504 820 510 814 510 curveto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+719.5 488.4 moveto 99 (InMemorySort) alignedtext
+grestore
+% fe400283-741d-4b35-bc79-9e430715f3fb
+gsave
+0.54118 0.25098 0.93333 nodecolor
+newpath 882 608 moveto
+656 608 lineto
+644 596 lineto
+644 576 lineto
+656 564 lineto
+882 564 lineto
+894 576 lineto
+894 596 lineto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 882 608 moveto
+656 608 lineto
+644 596 lineto
+644 576 lineto
+656 564 lineto
+882 564 lineto
+894 576 lineto
+894 596 lineto
+closepath stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 656 608 moveto
+650 608 644 602 644 596 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 656 608 moveto
+650 608 644 602 644 596 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 644 576 moveto
+644 570 650 564 656 564 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 644 576 moveto
+644 570 650 564 656 564 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 882 564 moveto
+888 564 894 570 894 576 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 882 564 moveto
+888 564 894 570 894 576 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 894 596 moveto
+894 602 888 608 882 608 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 894 596 moveto
+894 602 888 608 882 608 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 882 608 moveto
+656 608 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 656 608 moveto
+650 608 644 602 644 596 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 644 596 moveto
+644 576 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 644 576 moveto
+644 570 650 564 656 564 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 656 564 moveto
+882 564 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 882 564 moveto
+888 564 894 570 894 576 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 894 576 moveto
+894 596 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 894 596 moveto
+894 602 888 608 882 608 curveto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+734 591.4 moveto 70 (AquaMeta) alignedtext
+0 0 0 nodecolor
+14 /Times-Roman set_font
+651.5 573.4 moveto 235 (\(assign,running-aggregate,assign\)) alignedtext
+grestore
+% 97f7b483-5810-4f62-a3f2-8dc108f211bf->fe400283-741d-4b35-bc79-9e430715f3fb
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 769 510.12 moveto
+769 522.49 769 539.2 769 553.8 curveto
+stroke
+0 0 0 edgecolor
+newpath 765.5 553.96 moveto
+769 563.96 lineto
+772.5 553.96 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 765.5 553.96 moveto
+769 563.96 lineto
+772.5 553.96 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+769 533.4 moveto 114 (M:N Hash Merge) alignedtext
+grestore
+% bd489957-baec-4872-9b64-6ce7ecc36ed1
+gsave
+0.54118 0.25098 0.93333 nodecolor
+newpath 429 1450 moveto
+325 1450 lineto
+313 1438 lineto
+313 1418 lineto
+325 1406 lineto
+429 1406 lineto
+441 1418 lineto
+441 1438 lineto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 429 1450 moveto
+325 1450 lineto
+313 1438 lineto
+313 1418 lineto
+325 1406 lineto
+429 1406 lineto
+441 1418 lineto
+441 1438 lineto
+closepath stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 325 1450 moveto
+319 1450 313 1444 313 1438 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 325 1450 moveto
+319 1450 313 1444 313 1438 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 313 1418 moveto
+313 1412 319 1406 325 1406 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 313 1418 moveto
+313 1412 319 1406 325 1406 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 429 1406 moveto
+435 1406 441 1412 441 1418 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 429 1406 moveto
+435 1406 441 1412 441 1418 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 441 1438 moveto
+441 1444 435 1450 429 1450 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 441 1438 moveto
+441 1444 435 1450 429 1450 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 429 1450 moveto
+325 1450 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 325 1450 moveto
+319 1450 313 1444 313 1438 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 313 1438 moveto
+313 1418 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 313 1418 moveto
+313 1412 319 1406 325 1406 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 325 1406 moveto
+429 1406 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 429 1406 moveto
+435 1406 441 1412 441 1418 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 441 1418 moveto
+441 1438 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 441 1438 moveto
+441 1444 435 1450 429 1450 curveto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+342 1433.4 moveto 70 (AquaMeta) alignedtext
+0 0 0 nodecolor
+14 /Times-Roman set_font
+321 1415.4 moveto 112 (\(stream-project\)) alignedtext
+grestore
+% cf5387c0-3490-4c50-b47e-ac20c5e961a7
+gsave
+0.54118 0.25098 0.93333 nodecolor
+newpath 376 1540 moveto
+254 1540 lineto
+242 1528 lineto
+242 1516 lineto
+254 1504 lineto
+376 1504 lineto
+388 1516 lineto
+388 1528 lineto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 376 1540 moveto
+254 1540 lineto
+242 1528 lineto
+242 1516 lineto
+254 1504 lineto
+376 1504 lineto
+388 1516 lineto
+388 1528 lineto
+closepath stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 254 1540 moveto
+248 1540 242 1534 242 1528 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 254 1540 moveto
+248 1540 242 1534 242 1528 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 242 1516 moveto
+242 1510 248 1504 254 1504 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 242 1516 moveto
+242 1510 248 1504 254 1504 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 376 1504 moveto
+382 1504 388 1510 388 1516 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 376 1504 moveto
+382 1504 388 1510 388 1516 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 388 1528 moveto
+388 1534 382 1540 376 1540 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 388 1528 moveto
+388 1534 382 1540 376 1540 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 376 1540 moveto
+254 1540 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 254 1540 moveto
+248 1540 242 1534 242 1528 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 242 1528 moveto
+242 1516 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 242 1516 moveto
+242 1510 248 1504 254 1504 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 254 1504 moveto
+376 1504 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 376 1504 moveto
+382 1504 388 1510 388 1516 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 388 1516 moveto
+388 1528 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 388 1528 moveto
+388 1534 382 1540 376 1540 curveto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+250 1518.4 moveto 130 (InMemoryHashJoin) alignedtext
+grestore
+% bd489957-baec-4872-9b64-6ce7ecc36ed1->cf5387c0-3490-4c50-b47e-ac20c5e961a7
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 362.31 1450.28 moveto
+353.35 1463.85 341.86 1481.28 332.44 1495.56 curveto
+stroke
+0 0 0 edgecolor
+newpath 329.47 1493.7 moveto
+326.89 1503.97 lineto
+335.32 1497.55 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 329.47 1493.7 moveto
+326.89 1503.97 lineto
+335.32 1497.55 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+350 1473.4 moveto 67 (M:N Hash) alignedtext
+grestore
+% 2c7f5446-ca70-424e-b72b-dcbfba13c5fc
+gsave
+0.54118 0.25098 0.93333 nodecolor
+newpath 425 976 moveto
+327 976 lineto
+315 964 lineto
+315 944 lineto
+327 932 lineto
+425 932 lineto
+437 944 lineto
+437 964 lineto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 425 976 moveto
+327 976 lineto
+315 964 lineto
+315 944 lineto
+327 932 lineto
+425 932 lineto
+437 944 lineto
+437 964 lineto
+closepath stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 327 976 moveto
+321 976 315 970 315 964 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 327 976 moveto
+321 976 315 970 315 964 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 315 944 moveto
+315 938 321 932 327 932 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 315 944 moveto
+315 938 321 932 327 932 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 425 932 moveto
+431 932 437 938 437 944 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 425 932 moveto
+431 932 437 938 437 944 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 437 964 moveto
+437 970 431 976 425 976 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 437 964 moveto
+437 970 431 976 425 976 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 425 976 moveto
+327 976 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 327 976 moveto
+321 976 315 970 315 964 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 315 964 moveto
+315 944 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 315 944 moveto
+315 938 321 932 327 932 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 327 932 moveto
+425 932 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 425 932 moveto
+431 932 437 938 437 944 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 437 944 moveto
+437 964 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 437 964 moveto
+437 970 431 976 425 976 curveto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+341 959.4 moveto 70 (AquaMeta) alignedtext
+0 0 0 nodecolor
+14 /Times-Roman set_font
+323 941.4 moveto 106 (\(assign,unnest\)) alignedtext
+grestore
+% 094cb8b2-df6d-4f73-a8f5-00a6ce14d59b
+gsave
+0.54118 0.25098 0.93333 nodecolor
+newpath 513 1066 moveto
+391 1066 lineto
+379 1054 lineto
+379 1042 lineto
+391 1030 lineto
+513 1030 lineto
+525 1042 lineto
+525 1054 lineto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 513 1066 moveto
+391 1066 lineto
+379 1054 lineto
+379 1042 lineto
+391 1030 lineto
+513 1030 lineto
+525 1042 lineto
+525 1054 lineto
+closepath stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 391 1066 moveto
+385 1066 379 1060 379 1054 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 391 1066 moveto
+385 1066 379 1060 379 1054 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 379 1042 moveto
+379 1036 385 1030 391 1030 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 379 1042 moveto
+379 1036 385 1030 391 1030 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 513 1030 moveto
+519 1030 525 1036 525 1042 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 513 1030 moveto
+519 1030 525 1036 525 1042 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 525 1054 moveto
+525 1060 519 1066 513 1066 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 525 1054 moveto
+525 1060 519 1066 513 1066 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 513 1066 moveto
+391 1066 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 391 1066 moveto
+385 1066 379 1060 379 1054 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 379 1054 moveto
+379 1042 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 379 1042 moveto
+379 1036 385 1030 391 1030 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 391 1030 moveto
+513 1030 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 513 1030 moveto
+519 1030 525 1036 525 1042 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 525 1042 moveto
+525 1054 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 525 1054 moveto
+525 1060 519 1066 513 1066 curveto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+387 1044.4 moveto 130 (InMemoryHashJoin) alignedtext
+grestore
+% 2c7f5446-ca70-424e-b72b-dcbfba13c5fc->094cb8b2-df6d-4f73-a8f5-00a6ce14d59b
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 385.74 976.18 moveto
+391.33 987.54 399.02 1001.22 408 1012 curveto
+411.15 1015.78 414.74 1019.46 418.49 1022.92 curveto
+stroke
+0 0 0 edgecolor
+newpath 416.45 1025.79 moveto
+426.29 1029.71 lineto
+421.04 1020.51 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 416.45 1025.79 moveto
+426.29 1029.71 lineto
+421.04 1020.51 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+408 999.4 moveto 67 (M:N Hash) alignedtext
+grestore
+% 8e7bd09e-3fe2-4022-b493-64320be10f22
+gsave
+0.54118 0.25098 0.93333 nodecolor
+newpath 572 420 moveto
+510 420 lineto
+498 408 lineto
+498 388 lineto
+510 376 lineto
+572 376 lineto
+584 388 lineto
+584 408 lineto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 572 420 moveto
+510 420 lineto
+498 408 lineto
+498 388 lineto
+510 376 lineto
+572 376 lineto
+584 388 lineto
+584 408 lineto
+closepath stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 510 420 moveto
+504 420 498 414 498 408 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 510 420 moveto
+504 420 498 414 498 408 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 498 388 moveto
+498 382 504 376 510 376 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 498 388 moveto
+498 382 504 376 510 376 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 572 376 moveto
+578 376 584 382 584 388 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 572 376 moveto
+578 376 584 382 584 388 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 584 408 moveto
+584 414 578 420 572 420 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 584 408 moveto
+584 414 578 420 572 420 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 572 420 moveto
+510 420 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 510 420 moveto
+504 420 498 414 498 408 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 498 408 moveto
+498 388 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 498 388 moveto
+498 382 504 376 510 376 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 510 376 moveto
+572 376 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 572 376 moveto
+578 376 584 382 584 388 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 584 388 moveto
+584 408 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 584 408 moveto
+584 414 578 420 572 420 curveto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+506 403.4 moveto 70 (AquaMeta) alignedtext
+0 0 0 nodecolor
+14 /Times-Roman set_font
+525 385.4 moveto 32 (\(ets\)) alignedtext
+grestore
+% 6cc231d4-a25c-4301-98f9-3a9dd548a635
+gsave
+0.54118 0.25098 0.93333 nodecolor
+newpath 580 510 moveto
+502 510 lineto
+490 498 lineto
+490 486 lineto
+502 474 lineto
+580 474 lineto
+592 486 lineto
+592 498 lineto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 580 510 moveto
+502 510 lineto
+490 498 lineto
+490 486 lineto
+502 474 lineto
+580 474 lineto
+592 486 lineto
+592 498 lineto
+closepath stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 502 510 moveto
+496 510 490 504 490 498 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 502 510 moveto
+496 510 490 504 490 498 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 490 486 moveto
+490 480 496 474 502 474 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 490 486 moveto
+490 480 496 474 502 474 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 580 474 moveto
+586 474 592 480 592 486 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 580 474 moveto
+586 474 592 480 592 486 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 592 498 moveto
+592 504 586 510 580 510 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 592 498 moveto
+592 504 586 510 580 510 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 580 510 moveto
+502 510 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 502 510 moveto
+496 510 490 504 490 498 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 490 498 moveto
+490 486 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 490 486 moveto
+490 480 496 474 502 474 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 502 474 moveto
+580 474 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 580 474 moveto
+586 474 592 480 592 486 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 592 486 moveto
+592 498 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 592 498 moveto
+592 504 586 510 580 510 curveto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+497.5 488.4 moveto 87 (BTreeSearch) alignedtext
+grestore
+% 8e7bd09e-3fe2-4022-b493-64320be10f22->6cc231d4-a25c-4301-98f9-3a9dd548a635
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 541 420.28 moveto
+541 433.34 541 449.97 541 463.93 curveto
+stroke
+0 0 0 edgecolor
+newpath 537.5 463.97 moveto
+541 473.97 lineto
+544.5 463.97 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 537.5 463.97 moveto
+541 473.97 lineto
+544.5 463.97 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+541 443.4 moveto 23 (1:1) alignedtext
+grestore
+% 61e21faf-53be-44c7-a39b-d621a19b3dc6
+gsave
+0.54118 0.25098 0.93333 nodecolor
+newpath 156 44 moveto
+94 44 lineto
+82 32 lineto
+82 12 lineto
+94 0 lineto
+156 0 lineto
+168 12 lineto
+168 32 lineto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 156 44 moveto
+94 44 lineto
+82 32 lineto
+82 12 lineto
+94 0 lineto
+156 0 lineto
+168 12 lineto
+168 32 lineto
+closepath stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 94 44 moveto
+88 44 82 38 82 32 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 94 44 moveto
+88 44 82 38 82 32 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 82 12 moveto
+82 6 88 0 94 0 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 82 12 moveto
+82 6 88 0 94 0 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 156 0 moveto
+162 0 168 6 168 12 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 156 0 moveto
+162 0 168 6 168 12 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 168 32 moveto
+168 38 162 44 156 44 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 168 32 moveto
+168 38 162 44 156 44 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 156 44 moveto
+94 44 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 94 44 moveto
+88 44 82 38 82 32 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 82 32 moveto
+82 12 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 82 12 moveto
+82 6 88 0 94 0 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 94 0 moveto
+156 0 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 156 0 moveto
+162 0 168 6 168 12 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 168 12 moveto
+168 32 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 168 32 moveto
+168 38 162 44 156 44 curveto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+90 27.4 moveto 70 (AquaMeta) alignedtext
+0 0 0 nodecolor
+14 /Times-Roman set_font
+109 9.4 moveto 32 (\(ets\)) alignedtext
+grestore
+% f323df6e-1caa-4cb2-9c2c-903df08ee288
+gsave
+0.54118 0.25098 0.93333 nodecolor
+newpath 164 134 moveto
+86 134 lineto
+74 122 lineto
+74 110 lineto
+86 98 lineto
+164 98 lineto
+176 110 lineto
+176 122 lineto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 164 134 moveto
+86 134 lineto
+74 122 lineto
+74 110 lineto
+86 98 lineto
+164 98 lineto
+176 110 lineto
+176 122 lineto
+closepath stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 86 134 moveto
+80 134 74 128 74 122 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 86 134 moveto
+80 134 74 128 74 122 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 74 110 moveto
+74 104 80 98 86 98 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 74 110 moveto
+74 104 80 98 86 98 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 164 98 moveto
+170 98 176 104 176 110 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 164 98 moveto
+170 98 176 104 176 110 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 176 122 moveto
+176 128 170 134 164 134 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 176 122 moveto
+176 128 170 134 164 134 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 164 134 moveto
+86 134 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 86 134 moveto
+80 134 74 128 74 122 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 74 122 moveto
+74 110 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 74 110 moveto
+74 104 80 98 86 98 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 86 98 moveto
+164 98 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 164 98 moveto
+170 98 176 104 176 110 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 176 110 moveto
+176 122 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 176 122 moveto
+176 128 170 134 164 134 curveto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+81.5 112.4 moveto 87 (BTreeSearch) alignedtext
+grestore
+% 61e21faf-53be-44c7-a39b-d621a19b3dc6->f323df6e-1caa-4cb2-9c2c-903df08ee288
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 125 44.28 moveto
+125 57.34 125 73.97 125 87.93 curveto
+stroke
+0 0 0 edgecolor
+newpath 121.5 87.97 moveto
+125 97.97 lineto
+128.5 87.97 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 121.5 87.97 moveto
+125 97.97 lineto
+128.5 87.97 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+125 67.4 moveto 23 (1:1) alignedtext
+grestore
+% c29fedec-a107-4d03-822b-5f08d44fbfc2
+gsave
+0.54118 0.25098 0.93333 nodecolor
+newpath 614 608 moveto
+468 608 lineto
+456 596 lineto
+456 576 lineto
+468 564 lineto
+614 564 lineto
+626 576 lineto
+626 596 lineto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 614 608 moveto
+468 608 lineto
+456 596 lineto
+456 576 lineto
+468 564 lineto
+614 564 lineto
+626 576 lineto
+626 596 lineto
+closepath stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 468 608 moveto
+462 608 456 602 456 596 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 468 608 moveto
+462 608 456 602 456 596 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 456 576 moveto
+456 570 462 564 468 564 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 456 576 moveto
+456 570 462 564 468 564 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 614 564 moveto
+620 564 626 570 626 576 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 614 564 moveto
+620 564 626 570 626 576 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 626 596 moveto
+626 602 620 608 614 608 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 626 596 moveto
+626 602 620 608 614 608 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 614 608 moveto
+468 608 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 468 608 moveto
+462 608 456 602 456 596 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 456 596 moveto
+456 576 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 456 576 moveto
+456 570 462 564 468 564 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 468 564 moveto
+614 564 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 614 564 moveto
+620 564 626 570 626 576 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 626 576 moveto
+626 596 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 626 596 moveto
+626 602 620 608 614 608 curveto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+506 591.4 moveto 70 (AquaMeta) alignedtext
+0 0 0 nodecolor
+14 /Times-Roman set_font
+464 573.4 moveto 154 (\(assign,assign,unnest\)) alignedtext
+grestore
+% b07bbb40-a41c-4d00-994b-f5fa5d3eca34
+gsave
+0.54118 0.25098 0.93333 nodecolor
+newpath 602 698 moveto
+480 698 lineto
+468 686 lineto
+468 674 lineto
+480 662 lineto
+602 662 lineto
+614 674 lineto
+614 686 lineto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 602 698 moveto
+480 698 lineto
+468 686 lineto
+468 674 lineto
+480 662 lineto
+602 662 lineto
+614 674 lineto
+614 686 lineto
+closepath stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 480 698 moveto
+474 698 468 692 468 686 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 480 698 moveto
+474 698 468 692 468 686 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 468 674 moveto
+468 668 474 662 480 662 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 468 674 moveto
+468 668 474 662 480 662 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 602 662 moveto
+608 662 614 668 614 674 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 602 662 moveto
+608 662 614 668 614 674 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 614 686 moveto
+614 692 608 698 602 698 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 614 686 moveto
+614 692 608 698 602 698 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 602 698 moveto
+480 698 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 480 698 moveto
+474 698 468 692 468 686 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 468 686 moveto
+468 674 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 468 674 moveto
+468 668 474 662 480 662 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 480 662 moveto
+602 662 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 602 662 moveto
+608 662 614 668 614 674 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 614 674 moveto
+614 686 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 614 686 moveto
+614 692 608 698 602 698 curveto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+476 676.4 moveto 130 (InMemoryHashJoin) alignedtext
+grestore
+% c29fedec-a107-4d03-822b-5f08d44fbfc2->b07bbb40-a41c-4d00-994b-f5fa5d3eca34
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 541 608.28 moveto
+541 621.34 541 637.97 541 651.93 curveto
+stroke
+0 0 0 edgecolor
+newpath 537.5 651.97 moveto
+541 661.97 lineto
+544.5 651.97 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 537.5 651.97 moveto
+541 661.97 lineto
+544.5 651.97 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+541 631.4 moveto 67 (M:N Hash) alignedtext
+grestore
+% dde20475-0341-40cd-8d87-47019d4af7e7
+gsave
+0.54118 0.25098 0.93333 nodecolor
+newpath 351 1736 moveto
+279 1736 lineto
+267 1724 lineto
+267 1704 lineto
+279 1692 lineto
+351 1692 lineto
+363 1704 lineto
+363 1724 lineto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 351 1736 moveto
+279 1736 lineto
+267 1724 lineto
+267 1704 lineto
+279 1692 lineto
+351 1692 lineto
+363 1704 lineto
+363 1724 lineto
+closepath stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 279 1736 moveto
+273 1736 267 1730 267 1724 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 279 1736 moveto
+273 1736 267 1730 267 1724 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 267 1704 moveto
+267 1698 273 1692 279 1692 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 267 1704 moveto
+267 1698 273 1692 279 1692 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 351 1692 moveto
+357 1692 363 1698 363 1704 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 351 1692 moveto
+357 1692 363 1698 363 1704 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 363 1724 moveto
+363 1730 357 1736 351 1736 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 363 1724 moveto
+363 1730 357 1736 351 1736 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 351 1736 moveto
+279 1736 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 279 1736 moveto
+273 1736 267 1730 267 1724 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 267 1724 moveto
+267 1704 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 267 1704 moveto
+267 1698 273 1692 279 1692 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 279 1692 moveto
+351 1692 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 351 1692 moveto
+357 1692 363 1698 363 1704 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 363 1704 moveto
+363 1724 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 363 1724 moveto
+363 1730 357 1736 351 1736 curveto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+280 1719.4 moveto 70 (AquaMeta) alignedtext
+0 0 0 nodecolor
+14 /Times-Roman set_font
+274.5 1701.4 moveto 81 (\(sink-write\)) alignedtext
+grestore
+% 83b6ee56-1fba-4df7-bd13-89de2edfc4dc
+gsave
+0.54118 0.25098 0.93333 nodecolor
+newpath 414 698 moveto
+292 698 lineto
+280 686 lineto
+280 674 lineto
+292 662 lineto
+414 662 lineto
+426 674 lineto
+426 686 lineto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 414 698 moveto
+292 698 lineto
+280 686 lineto
+280 674 lineto
+292 662 lineto
+414 662 lineto
+426 674 lineto
+426 686 lineto
+closepath stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 292 698 moveto
+286 698 280 692 280 686 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 292 698 moveto
+286 698 280 692 280 686 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 280 674 moveto
+280 668 286 662 292 662 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 280 674 moveto
+280 668 286 662 292 662 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 414 662 moveto
+420 662 426 668 426 674 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 414 662 moveto
+420 662 426 668 426 674 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 426 686 moveto
+426 692 420 698 414 698 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 426 686 moveto
+426 692 420 698 414 698 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 414 698 moveto
+292 698 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 292 698 moveto
+286 698 280 692 280 686 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 280 686 moveto
+280 674 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 280 674 moveto
+280 668 286 662 292 662 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 292 662 moveto
+414 662 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 414 662 moveto
+420 662 426 668 426 674 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 426 674 moveto
+426 686 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 426 686 moveto
+426 692 420 698 414 698 curveto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+288 676.4 moveto 130 (InMemoryHashJoin) alignedtext
+grestore
+% f0024d8c-b182-4c84-9642-562b7f873cb1
+gsave
+0.54118 0.25098 0.93333 nodecolor
+newpath 405 788 moveto
+315 788 lineto
+303 776 lineto
+303 764 lineto
+315 752 lineto
+405 752 lineto
+417 764 lineto
+417 776 lineto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 405 788 moveto
+315 788 lineto
+303 776 lineto
+303 764 lineto
+315 752 lineto
+405 752 lineto
+417 764 lineto
+417 776 lineto
+closepath stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 315 788 moveto
+309 788 303 782 303 776 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 315 788 moveto
+309 788 303 782 303 776 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 303 764 moveto
+303 758 309 752 315 752 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 303 764 moveto
+303 758 309 752 315 752 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 405 752 moveto
+411 752 417 758 417 764 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 405 752 moveto
+411 752 417 758 417 764 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 417 776 moveto
+417 782 411 788 405 788 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 417 776 moveto
+417 782 411 788 405 788 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 405 788 moveto
+315 788 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 315 788 moveto
+309 788 303 782 303 776 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 303 776 moveto
+303 764 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 303 764 moveto
+303 758 309 752 315 752 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 315 752 moveto
+405 752 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 405 752 moveto
+411 752 417 758 417 764 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 417 764 moveto
+417 776 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 417 776 moveto
+417 782 411 788 405 788 curveto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+310.5 766.4 moveto 99 (InMemorySort) alignedtext
+grestore
+% 83b6ee56-1fba-4df7-bd13-89de2edfc4dc->f0024d8c-b182-4c84-9642-562b7f873cb1
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 354.42 698.21 moveto
+355.38 710.66 356.69 727.39 357.79 741.58 curveto
+stroke
+0 0 0 edgecolor
+newpath 354.32 742.12 moveto
+358.59 751.81 lineto
+361.3 741.57 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 354.32 742.12 moveto
+358.59 751.81 lineto
+361.3 741.57 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+358 721.4 moveto 67 (M:N Hash) alignedtext
+grestore
+% 019d92ce-5cb6-4ed4-a55b-5088b1298356
+gsave
+0.54118 0.25098 0.93333 nodecolor
+newpath 439 1348 moveto
+317 1348 lineto
+305 1336 lineto
+305 1324 lineto
+317 1312 lineto
+439 1312 lineto
+451 1324 lineto
+451 1336 lineto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 439 1348 moveto
+317 1348 lineto
+305 1336 lineto
+305 1324 lineto
+317 1312 lineto
+439 1312 lineto
+451 1324 lineto
+451 1336 lineto
+closepath stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 317 1348 moveto
+311 1348 305 1342 305 1336 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 317 1348 moveto
+311 1348 305 1342 305 1336 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 305 1324 moveto
+305 1318 311 1312 317 1312 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 305 1324 moveto
+305 1318 311 1312 317 1312 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 439 1312 moveto
+445 1312 451 1318 451 1324 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 439 1312 moveto
+445 1312 451 1318 451 1324 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 451 1336 moveto
+451 1342 445 1348 439 1348 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 451 1336 moveto
+451 1342 445 1348 439 1348 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 439 1348 moveto
+317 1348 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 317 1348 moveto
+311 1348 305 1342 305 1336 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 305 1336 moveto
+305 1324 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 305 1324 moveto
+305 1318 311 1312 317 1312 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 317 1312 moveto
+439 1312 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 439 1312 moveto
+445 1312 451 1318 451 1324 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 451 1324 moveto
+451 1336 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 451 1336 moveto
+451 1342 445 1348 439 1348 curveto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+313 1326.4 moveto 130 (InMemoryHashJoin) alignedtext
+grestore
+% 019d92ce-5cb6-4ed4-a55b-5088b1298356->bd489957-baec-4872-9b64-6ce7ecc36ed1
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 377.81 1348.43 moveto
+377.68 1361.68 377.49 1379.88 377.33 1395.54 curveto
+stroke
+0 0 0 edgecolor
+newpath 373.83 1395.84 moveto
+377.23 1405.88 lineto
+380.83 1395.91 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 373.83 1395.84 moveto
+377.23 1405.88 lineto
+380.83 1395.91 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+378 1375.4 moveto 23 (1:1) alignedtext
+grestore
+% 6cc231d4-a25c-4301-98f9-3a9dd548a635->c29fedec-a107-4d03-822b-5f08d44fbfc2
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 541 510.12 moveto
+541 522.49 541 539.2 541 553.8 curveto
+stroke
+0 0 0 edgecolor
+newpath 537.5 553.96 moveto
+541 563.96 lineto
+544.5 553.96 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 537.5 553.96 moveto
+541 563.96 lineto
+544.5 553.96 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+541 533.4 moveto 23 (1:1) alignedtext
+grestore
+% 470b4218-4ff6-4699-b05d-d5624f70c346
+gsave
+0.54118 0.25098 0.93333 nodecolor
+newpath 800 44 moveto
+738 44 lineto
+726 32 lineto
+726 12 lineto
+738 0 lineto
+800 0 lineto
+812 12 lineto
+812 32 lineto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 800 44 moveto
+738 44 lineto
+726 32 lineto
+726 12 lineto
+738 0 lineto
+800 0 lineto
+812 12 lineto
+812 32 lineto
+closepath stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 738 44 moveto
+732 44 726 38 726 32 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 738 44 moveto
+732 44 726 38 726 32 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 726 12 moveto
+726 6 732 0 738 0 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 726 12 moveto
+726 6 732 0 738 0 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 800 0 moveto
+806 0 812 6 812 12 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 800 0 moveto
+806 0 812 6 812 12 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 812 32 moveto
+812 38 806 44 800 44 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 812 32 moveto
+812 38 806 44 800 44 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 800 44 moveto
+738 44 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 738 44 moveto
+732 44 726 38 726 32 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 726 32 moveto
+726 12 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 726 12 moveto
+726 6 732 0 738 0 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 738 0 moveto
+800 0 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 800 0 moveto
+806 0 812 6 812 12 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 812 12 moveto
+812 32 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 812 32 moveto
+812 38 806 44 800 44 curveto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+734 27.4 moveto 70 (AquaMeta) alignedtext
+0 0 0 nodecolor
+14 /Times-Roman set_font
+753 9.4 moveto 32 (\(ets\)) alignedtext
+grestore
+% 5f398745-a0da-4a93-8654-add2e550003c
+gsave
+0.54118 0.25098 0.93333 nodecolor
+newpath 808 134 moveto
+730 134 lineto
+718 122 lineto
+718 110 lineto
+730 98 lineto
+808 98 lineto
+820 110 lineto
+820 122 lineto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 808 134 moveto
+730 134 lineto
+718 122 lineto
+718 110 lineto
+730 98 lineto
+808 98 lineto
+820 110 lineto
+820 122 lineto
+closepath stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 730 134 moveto
+724 134 718 128 718 122 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 730 134 moveto
+724 134 718 128 718 122 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 718 110 moveto
+718 104 724 98 730 98 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 718 110 moveto
+718 104 724 98 730 98 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 808 98 moveto
+814 98 820 104 820 110 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 808 98 moveto
+814 98 820 104 820 110 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 820 122 moveto
+820 128 814 134 808 134 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 820 122 moveto
+820 128 814 134 808 134 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 808 134 moveto
+730 134 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 730 134 moveto
+724 134 718 128 718 122 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 718 122 moveto
+718 110 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 718 110 moveto
+718 104 724 98 730 98 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 730 98 moveto
+808 98 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 808 98 moveto
+814 98 820 104 820 110 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 820 110 moveto
+820 122 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 820 122 moveto
+820 128 814 134 808 134 curveto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+725.5 112.4 moveto 87 (BTreeSearch) alignedtext
+grestore
+% 470b4218-4ff6-4699-b05d-d5624f70c346->5f398745-a0da-4a93-8654-add2e550003c
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 769 44.28 moveto
+769 57.34 769 73.97 769 87.93 curveto
+stroke
+0 0 0 edgecolor
+newpath 765.5 87.97 moveto
+769 97.97 lineto
+772.5 87.97 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 765.5 87.97 moveto
+769 97.97 lineto
+772.5 87.97 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+769 67.4 moveto 23 (1:1) alignedtext
+grestore
+% fe17ac32-aa06-4273-bfeb-6ad12004146d
+gsave
+0.54118 0.25098 0.93333 nodecolor
+newpath 804 416 moveto
+734 416 lineto
+722 404 lineto
+722 392 lineto
+734 380 lineto
+804 380 lineto
+816 392 lineto
+816 404 lineto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 804 416 moveto
+734 416 lineto
+722 404 lineto
+722 392 lineto
+734 380 lineto
+804 380 lineto
+816 392 lineto
+816 404 lineto
+closepath stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 734 416 moveto
+728 416 722 410 722 404 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 734 416 moveto
+728 416 722 410 722 404 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 722 392 moveto
+722 386 728 380 734 380 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 722 392 moveto
+722 386 728 380 734 380 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 804 380 moveto
+810 380 816 386 816 392 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 804 380 moveto
+810 380 816 386 816 392 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 816 404 moveto
+816 410 810 416 804 416 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 816 404 moveto
+816 410 810 416 804 416 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 804 416 moveto
+734 416 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 734 416 moveto
+728 416 722 410 722 404 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 722 404 moveto
+722 392 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 722 392 moveto
+722 386 728 380 734 380 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 734 380 moveto
+804 380 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 804 380 moveto
+810 380 816 386 816 392 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 816 392 moveto
+816 404 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 816 404 moveto
+816 410 810 416 804 416 curveto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+730 394.4 moveto 78 (HashGroup) alignedtext
+grestore
+% fe17ac32-aa06-4273-bfeb-6ad12004146d->97f7b483-5810-4f62-a3f2-8dc108f211bf
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 769 416.12 moveto
+769 429.65 769 448.38 769 463.85 curveto
+stroke
+0 0 0 edgecolor
+newpath 765.5 463.93 moveto
+769 473.93 lineto
+772.5 463.93 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 765.5 463.93 moveto
+769 473.93 lineto
+772.5 463.93 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+769 443.4 moveto 23 (1:1) alignedtext
+grestore
+% ce6dab26-9823-4e74-9834-914ab6798874
+gsave
+0.54118 0.25098 0.93333 nodecolor
+newpath 422 878 moveto
+300 878 lineto
+288 866 lineto
+288 854 lineto
+300 842 lineto
+422 842 lineto
+434 854 lineto
+434 866 lineto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 422 878 moveto
+300 878 lineto
+288 866 lineto
+288 854 lineto
+300 842 lineto
+422 842 lineto
+434 854 lineto
+434 866 lineto
+closepath stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 300 878 moveto
+294 878 288 872 288 866 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 300 878 moveto
+294 878 288 872 288 866 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 288 854 moveto
+288 848 294 842 300 842 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 288 854 moveto
+288 848 294 842 300 842 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 422 842 moveto
+428 842 434 848 434 854 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 422 842 moveto
+428 842 434 848 434 854 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 434 866 moveto
+434 872 428 878 422 878 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 434 866 moveto
+434 872 428 878 422 878 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 422 878 moveto
+300 878 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 300 878 moveto
+294 878 288 872 288 866 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 288 866 moveto
+288 854 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 288 854 moveto
+288 848 294 842 300 842 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 300 842 moveto
+422 842 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 422 842 moveto
+428 842 434 848 434 854 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 434 854 moveto
+434 866 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 434 866 moveto
+434 872 428 878 422 878 curveto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+296 856.4 moveto 130 (PreclusteredGroup) alignedtext
+grestore
+% ce6dab26-9823-4e74-9834-914ab6798874->2c7f5446-ca70-424e-b72b-dcbfba13c5fc
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 363.89 878.12 moveto
+365.87 890.49 368.53 907.2 370.86 921.8 curveto
+stroke
+0 0 0 edgecolor
+newpath 367.45 922.64 moveto
+372.48 931.96 lineto
+374.36 921.53 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 367.45 922.64 moveto
+372.48 931.96 lineto
+374.36 921.53 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+370 901.4 moveto 23 (1:1) alignedtext
+grestore
+% 34bea0d2-8c02-46af-a281-d359e73e8459
+gsave
+0.54118 0.25098 0.93333 nodecolor
+newpath 390 1638 moveto
+240 1638 lineto
+228 1626 lineto
+228 1606 lineto
+240 1594 lineto
+390 1594 lineto
+402 1606 lineto
+402 1626 lineto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 390 1638 moveto
+240 1638 lineto
+228 1626 lineto
+228 1606 lineto
+240 1594 lineto
+390 1594 lineto
+402 1606 lineto
+402 1626 lineto
+closepath stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 240 1638 moveto
+234 1638 228 1632 228 1626 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 240 1638 moveto
+234 1638 228 1632 228 1626 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 228 1606 moveto
+228 1600 234 1594 240 1594 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 228 1606 moveto
+228 1600 234 1594 240 1594 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 390 1594 moveto
+396 1594 402 1600 402 1606 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 390 1594 moveto
+396 1594 402 1600 402 1606 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 402 1626 moveto
+402 1632 396 1638 390 1638 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 402 1626 moveto
+402 1632 396 1638 390 1638 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 390 1638 moveto
+240 1638 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 240 1638 moveto
+234 1638 228 1632 228 1626 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 228 1626 moveto
+228 1606 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 228 1606 moveto
+228 1600 234 1594 240 1594 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 240 1594 moveto
+390 1594 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 390 1594 moveto
+396 1594 402 1600 402 1606 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 402 1606 moveto
+402 1626 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 402 1626 moveto
+402 1632 396 1638 390 1638 curveto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+280 1621.4 moveto 70 (AquaMeta) alignedtext
+0 0 0 nodecolor
+14 /Times-Roman set_font
+235.5 1603.4 moveto 159 (\(assign,stream-project\)) alignedtext
+grestore
+% cf5387c0-3490-4c50-b47e-ac20c5e961a7->34bea0d2-8c02-46af-a281-d359e73e8459
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 315 1540.12 moveto
+315 1552.49 315 1569.2 315 1583.8 curveto
+stroke
+0 0 0 edgecolor
+newpath 311.5 1583.96 moveto
+315 1593.96 lineto
+318.5 1583.96 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 311.5 1583.96 moveto
+315 1593.96 lineto
+318.5 1583.96 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+315 1563.4 moveto 23 (1:1) alignedtext
+grestore
+% 86cf6620-ce7a-447d-82ac-32d71720d008
+gsave
+0.54118 0.25098 0.93333 nodecolor
+newpath 586 878 moveto
+464 878 lineto
+452 866 lineto
+452 854 lineto
+464 842 lineto
+586 842 lineto
+598 854 lineto
+598 866 lineto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 586 878 moveto
+464 878 lineto
+452 866 lineto
+452 854 lineto
+464 842 lineto
+586 842 lineto
+598 854 lineto
+598 866 lineto
+closepath stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 464 878 moveto
+458 878 452 872 452 866 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 464 878 moveto
+458 878 452 872 452 866 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 452 854 moveto
+452 848 458 842 464 842 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 452 854 moveto
+452 848 458 842 464 842 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 586 842 moveto
+592 842 598 848 598 854 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 586 842 moveto
+592 842 598 848 598 854 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 598 866 moveto
+598 872 592 878 586 878 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 598 866 moveto
+598 872 592 878 586 878 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 586 878 moveto
+464 878 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 464 878 moveto
+458 878 452 872 452 866 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 452 866 moveto
+452 854 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 452 854 moveto
+452 848 458 842 464 842 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 464 842 moveto
+586 842 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 586 842 moveto
+592 842 598 848 598 854 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 598 854 moveto
+598 866 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 598 866 moveto
+598 872 592 878 586 878 curveto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+460 856.4 moveto 130 (PreclusteredGroup) alignedtext
+grestore
+% 162900ff-b4a6-4d0c-b9c2-6595f9d11e4e
+gsave
+0.54118 0.25098 0.93333 nodecolor
+newpath 566 976 moveto
+468 976 lineto
+456 964 lineto
+456 944 lineto
+468 932 lineto
+566 932 lineto
+578 944 lineto
+578 964 lineto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 566 976 moveto
+468 976 lineto
+456 964 lineto
+456 944 lineto
+468 932 lineto
+566 932 lineto
+578 944 lineto
+578 964 lineto
+closepath stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 468 976 moveto
+462 976 456 970 456 964 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 468 976 moveto
+462 976 456 970 456 964 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 456 944 moveto
+456 938 462 932 468 932 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 456 944 moveto
+456 938 462 932 468 932 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 566 932 moveto
+572 932 578 938 578 944 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 566 932 moveto
+572 932 578 938 578 944 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 578 964 moveto
+578 970 572 976 566 976 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 578 964 moveto
+578 970 572 976 566 976 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 566 976 moveto
+468 976 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 468 976 moveto
+462 976 456 970 456 964 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 456 964 moveto
+456 944 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 456 944 moveto
+456 938 462 932 468 932 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 468 932 moveto
+566 932 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 566 932 moveto
+572 932 578 938 578 944 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 578 944 moveto
+578 964 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 578 964 moveto
+578 970 572 976 566 976 curveto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+482 959.4 moveto 70 (AquaMeta) alignedtext
+0 0 0 nodecolor
+14 /Times-Roman set_font
+464 941.4 moveto 106 (\(assign,unnest\)) alignedtext
+grestore
+% 86cf6620-ce7a-447d-82ac-32d71720d008->162900ff-b4a6-4d0c-b9c2-6595f9d11e4e
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 523.46 878.12 moveto
+522.41 890.49 520.98 907.2 519.74 921.8 curveto
+stroke
+0 0 0 edgecolor
+newpath 516.24 921.7 moveto
+518.88 931.96 lineto
+523.21 922.29 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 516.24 921.7 moveto
+518.88 931.96 lineto
+523.21 922.29 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+522 901.4 moveto 23 (1:1) alignedtext
+grestore
+% 84042597-2ad3-41fd-95be-7c7a8c9ba6e7->cf5387c0-3490-4c50-b47e-ac20c5e961a7
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 249.63 1446.2 moveto
+253.95 1458.28 260.75 1474.05 270 1486 curveto
+272.98 1489.85 276.46 1493.54 280.13 1496.99 curveto
+stroke
+0 0 0 edgecolor
+newpath 278.01 1499.78 moveto
+287.85 1503.71 lineto
+282.6 1494.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 278.01 1499.78 moveto
+287.85 1503.71 lineto
+282.6 1494.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+270 1473.4 moveto 67 (M:N Hash) alignedtext
+grestore
+% f0024d8c-b182-4c84-9642-562b7f873cb1->ce6dab26-9823-4e74-9834-914ab6798874
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 360.2 788.21 moveto
+360.34 800.66 360.53 817.39 360.68 831.58 curveto
+stroke
+0 0 0 edgecolor
+newpath 357.19 831.85 moveto
+360.8 841.81 lineto
+364.19 831.78 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 357.19 831.85 moveto
+360.8 841.81 lineto
+364.19 831.78 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+361 811.4 moveto 23 (1:1) alignedtext
+grestore
+% 3796886b-044c-4bfd-b682-9c3a2df05f31
+gsave
+0.54118 0.25098 0.93333 nodecolor
+newpath 339 1164 moveto
+277 1164 lineto
+265 1152 lineto
+265 1132 lineto
+277 1120 lineto
+339 1120 lineto
+351 1132 lineto
+351 1152 lineto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 339 1164 moveto
+277 1164 lineto
+265 1152 lineto
+265 1132 lineto
+277 1120 lineto
+339 1120 lineto
+351 1132 lineto
+351 1152 lineto
+closepath stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 277 1164 moveto
+271 1164 265 1158 265 1152 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 277 1164 moveto
+271 1164 265 1158 265 1152 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 265 1132 moveto
+265 1126 271 1120 277 1120 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 265 1132 moveto
+265 1126 271 1120 277 1120 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 339 1120 moveto
+345 1120 351 1126 351 1132 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 339 1120 moveto
+345 1120 351 1126 351 1132 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 351 1152 moveto
+351 1158 345 1164 339 1164 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 351 1152 moveto
+351 1158 345 1164 339 1164 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 339 1164 moveto
+277 1164 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 277 1164 moveto
+271 1164 265 1158 265 1152 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 265 1152 moveto
+265 1132 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 265 1132 moveto
+265 1126 271 1120 277 1120 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 277 1120 moveto
+339 1120 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 339 1120 moveto
+345 1120 351 1126 351 1132 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 351 1132 moveto
+351 1152 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 351 1152 moveto
+351 1158 345 1164 339 1164 curveto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+273 1147.4 moveto 70 (AquaMeta) alignedtext
+0 0 0 nodecolor
+14 /Times-Roman set_font
+292 1129.4 moveto 32 (\(ets\)) alignedtext
+grestore
+% 40fc40ba-d7e5-44a2-a9a6-88642a2e2f79
+gsave
+0.54118 0.25098 0.93333 nodecolor
+newpath 354 1254 moveto
+276 1254 lineto
+264 1242 lineto
+264 1230 lineto
+276 1218 lineto
+354 1218 lineto
+366 1230 lineto
+366 1242 lineto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 354 1254 moveto
+276 1254 lineto
+264 1242 lineto
+264 1230 lineto
+276 1218 lineto
+354 1218 lineto
+366 1230 lineto
+366 1242 lineto
+closepath stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 276 1254 moveto
+270 1254 264 1248 264 1242 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 276 1254 moveto
+270 1254 264 1248 264 1242 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 264 1230 moveto
+264 1224 270 1218 276 1218 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 264 1230 moveto
+264 1224 270 1218 276 1218 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 354 1218 moveto
+360 1218 366 1224 366 1230 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 354 1218 moveto
+360 1218 366 1224 366 1230 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 366 1242 moveto
+366 1248 360 1254 354 1254 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 366 1242 moveto
+366 1248 360 1254 354 1254 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 354 1254 moveto
+276 1254 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 276 1254 moveto
+270 1254 264 1248 264 1242 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 264 1242 moveto
+264 1230 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 264 1230 moveto
+264 1224 270 1218 276 1218 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 276 1218 moveto
+354 1218 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 354 1218 moveto
+360 1218 366 1224 366 1230 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 366 1230 moveto
+366 1242 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 366 1242 moveto
+366 1248 360 1254 354 1254 curveto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+271.5 1232.4 moveto 87 (BTreeSearch) alignedtext
+grestore
+% 3796886b-044c-4bfd-b682-9c3a2df05f31->40fc40ba-d7e5-44a2-a9a6-88642a2e2f79
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 309.66 1164.28 moveto
+310.63 1177.34 311.87 1193.97 312.91 1207.93 curveto
+stroke
+0 0 0 edgecolor
+newpath 309.42 1208.26 moveto
+313.66 1217.97 lineto
+316.41 1207.74 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 309.42 1208.26 moveto
+313.66 1217.97 lineto
+316.41 1207.74 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+313 1187.4 moveto 23 (1:1) alignedtext
+grestore
+% 649b70fe-e549-4f38-b248-1868bf691b87
+gsave
+0.54118 0.25098 0.93333 nodecolor
+newpath 170 510 moveto
+80 510 lineto
+68 498 lineto
+68 486 lineto
+80 474 lineto
+170 474 lineto
+182 486 lineto
+182 498 lineto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 170 510 moveto
+80 510 lineto
+68 498 lineto
+68 486 lineto
+80 474 lineto
+170 474 lineto
+182 486 lineto
+182 498 lineto
+closepath stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 80 510 moveto
+74 510 68 504 68 498 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 80 510 moveto
+74 510 68 504 68 498 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 68 486 moveto
+68 480 74 474 80 474 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 68 486 moveto
+68 480 74 474 80 474 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 170 474 moveto
+176 474 182 480 182 486 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 170 474 moveto
+176 474 182 480 182 486 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 182 498 moveto
+182 504 176 510 170 510 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 182 498 moveto
+182 504 176 510 170 510 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 170 510 moveto
+80 510 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 80 510 moveto
+74 510 68 504 68 498 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 68 498 moveto
+68 486 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 68 486 moveto
+68 480 74 474 80 474 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 80 474 moveto
+170 474 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 170 474 moveto
+176 474 182 480 182 486 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 182 486 moveto
+182 498 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 182 498 moveto
+182 504 176 510 170 510 curveto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+75.5 488.4 moveto 99 (InMemorySort) alignedtext
+grestore
+% 899fc36b-024c-402f-a155-a218dc3358ee
+gsave
+0.54118 0.25098 0.93333 nodecolor
+newpath 238 608 moveto
+12 608 lineto
+0 596 lineto
+0 576 lineto
+12 564 lineto
+238 564 lineto
+250 576 lineto
+250 596 lineto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 238 608 moveto
+12 608 lineto
+0 596 lineto
+0 576 lineto
+12 564 lineto
+238 564 lineto
+250 576 lineto
+250 596 lineto
+closepath stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 12 608 moveto
+6 608 0 602 0 596 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 12 608 moveto
+6 608 0 602 0 596 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 0 576 moveto
+0 570 6 564 12 564 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 0 576 moveto
+0 570 6 564 12 564 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 238 564 moveto
+244 564 250 570 250 576 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 238 564 moveto
+244 564 250 570 250 576 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 250 596 moveto
+250 602 244 608 238 608 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 250 596 moveto
+250 602 244 608 238 608 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 238 608 moveto
+12 608 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 12 608 moveto
+6 608 0 602 0 596 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 596 moveto
+0 576 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 0 576 moveto
+0 570 6 564 12 564 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 12 564 moveto
+238 564 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 238 564 moveto
+244 564 250 570 250 576 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 250 576 moveto
+250 596 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 250 596 moveto
+250 602 244 608 238 608 curveto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+90 591.4 moveto 70 (AquaMeta) alignedtext
+0 0 0 nodecolor
+14 /Times-Roman set_font
+7.5 573.4 moveto 235 (\(assign,running-aggregate,assign\)) alignedtext
+grestore
+% 649b70fe-e549-4f38-b248-1868bf691b87->899fc36b-024c-402f-a155-a218dc3358ee
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 125 510.12 moveto
+125 522.49 125 539.2 125 553.8 curveto
+stroke
+0 0 0 edgecolor
+newpath 121.5 553.96 moveto
+125 563.96 lineto
+128.5 553.96 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 121.5 553.96 moveto
+125 563.96 lineto
+128.5 553.96 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+125 533.4 moveto 114 (M:N Hash Merge) alignedtext
+grestore
+% a80baf03-e23a-4e51-828a-b9ec8620767b
+gsave
+0.54118 0.25098 0.93333 nodecolor
+newpath 160 322 moveto
+90 322 lineto
+78 310 lineto
+78 298 lineto
+90 286 lineto
+160 286 lineto
+172 298 lineto
+172 310 lineto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 160 322 moveto
+90 322 lineto
+78 310 lineto
+78 298 lineto
+90 286 lineto
+160 286 lineto
+172 298 lineto
+172 310 lineto
+closepath stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 90 322 moveto
+84 322 78 316 78 310 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 90 322 moveto
+84 322 78 316 78 310 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 78 298 moveto
+78 292 84 286 90 286 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 78 298 moveto
+78 292 84 286 90 286 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 160 286 moveto
+166 286 172 292 172 298 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 160 286 moveto
+166 286 172 292 172 298 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 172 310 moveto
+172 316 166 322 160 322 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 172 310 moveto
+172 316 166 322 160 322 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 160 322 moveto
+90 322 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 90 322 moveto
+84 322 78 316 78 310 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 78 310 moveto
+78 298 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 78 298 moveto
+78 292 84 286 90 286 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 90 286 moveto
+160 286 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 160 286 moveto
+166 286 172 292 172 298 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 172 298 moveto
+172 310 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 172 310 moveto
+172 316 166 322 160 322 curveto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+86 300.4 moveto 78 (HashGroup) alignedtext
+grestore
+% ad75356e-262b-468d-ad27-5ead6cfa49b3
+gsave
+0.54118 0.25098 0.93333 nodecolor
+newpath 160 416 moveto
+90 416 lineto
+78 404 lineto
+78 392 lineto
+90 380 lineto
+160 380 lineto
+172 392 lineto
+172 404 lineto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 160 416 moveto
+90 416 lineto
+78 404 lineto
+78 392 lineto
+90 380 lineto
+160 380 lineto
+172 392 lineto
+172 404 lineto
+closepath stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 90 416 moveto
+84 416 78 410 78 404 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 90 416 moveto
+84 416 78 410 78 404 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 78 392 moveto
+78 386 84 380 90 380 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 78 392 moveto
+78 386 84 380 90 380 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 160 380 moveto
+166 380 172 386 172 392 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 160 380 moveto
+166 380 172 386 172 392 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 172 404 moveto
+172 410 166 416 160 416 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 172 404 moveto
+172 410 166 416 160 416 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 160 416 moveto
+90 416 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 90 416 moveto
+84 416 78 410 78 404 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 78 404 moveto
+78 392 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 78 392 moveto
+78 386 84 380 90 380 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 90 380 moveto
+160 380 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 160 380 moveto
+166 380 172 386 172 392 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 172 392 moveto
+172 404 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 172 404 moveto
+172 410 166 416 160 416 curveto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+86 394.4 moveto 78 (HashGroup) alignedtext
+grestore
+% a80baf03-e23a-4e51-828a-b9ec8620767b->ad75356e-262b-468d-ad27-5ead6cfa49b3
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 125 322.12 moveto
+125 335.65 125 354.38 125 369.85 curveto
+stroke
+0 0 0 edgecolor
+newpath 121.5 369.93 moveto
+125 379.93 lineto
+128.5 369.93 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 121.5 369.93 moveto
+125 379.93 lineto
+128.5 369.93 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+125 345.4 moveto 67 (M:N Hash) alignedtext
+grestore
+% 34bea0d2-8c02-46af-a281-d359e73e8459->dde20475-0341-40cd-8d87-47019d4af7e7
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 315 1638.24 moveto
+315 1651.02 315 1667.3 315 1681.5 curveto
+stroke
+0 0 0 edgecolor
+newpath 311.5 1681.85 moveto
+315 1691.85 lineto
+318.5 1681.85 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 311.5 1681.85 moveto
+315 1691.85 lineto
+318.5 1681.85 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+315 1661.4 moveto 94 (M:N Replicate) alignedtext
+grestore
+% 800cab7e-8228-4c85-b19a-39cb844893b7
+gsave
+0.54118 0.25098 0.93333 nodecolor
+newpath 571 788 moveto
+481 788 lineto
+469 776 lineto
+469 764 lineto
+481 752 lineto
+571 752 lineto
+583 764 lineto
+583 776 lineto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 571 788 moveto
+481 788 lineto
+469 776 lineto
+469 764 lineto
+481 752 lineto
+571 752 lineto
+583 764 lineto
+583 776 lineto
+closepath stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 481 788 moveto
+475 788 469 782 469 776 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 481 788 moveto
+475 788 469 782 469 776 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 469 764 moveto
+469 758 475 752 481 752 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 469 764 moveto
+469 758 475 752 481 752 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 571 752 moveto
+577 752 583 758 583 764 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 571 752 moveto
+577 752 583 758 583 764 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 583 776 moveto
+583 782 577 788 571 788 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 583 776 moveto
+583 782 577 788 571 788 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 571 788 moveto
+481 788 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 481 788 moveto
+475 788 469 782 469 776 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 469 776 moveto
+469 764 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 469 764 moveto
+469 758 475 752 481 752 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 481 752 moveto
+571 752 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 571 752 moveto
+577 752 583 758 583 764 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 583 764 moveto
+583 776 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 583 776 moveto
+583 782 577 788 571 788 curveto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+476.5 766.4 moveto 99 (InMemorySort) alignedtext
+grestore
+% 800cab7e-8228-4c85-b19a-39cb844893b7->86cf6620-ce7a-447d-82ac-32d71720d008
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 525.8 788.21 moveto
+525.66 800.66 525.47 817.39 525.32 831.58 curveto
+stroke
+0 0 0 edgecolor
+newpath 521.81 831.78 moveto
+525.2 841.81 lineto
+528.81 831.85 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 521.81 831.78 moveto
+525.2 841.81 lineto
+528.81 831.85 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+526 811.4 moveto 23 (1:1) alignedtext
+grestore
+% 11496054-b3b3-4730-b43a-7130c474ef1f
+gsave
+0.54118 0.25098 0.93333 nodecolor
+newpath 523 1164 moveto
+381 1164 lineto
+369 1152 lineto
+369 1132 lineto
+381 1120 lineto
+523 1120 lineto
+535 1132 lineto
+535 1152 lineto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 523 1164 moveto
+381 1164 lineto
+369 1152 lineto
+369 1132 lineto
+381 1120 lineto
+523 1120 lineto
+535 1132 lineto
+535 1152 lineto
+closepath stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 381 1164 moveto
+375 1164 369 1158 369 1152 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 381 1164 moveto
+375 1164 369 1158 369 1152 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 369 1132 moveto
+369 1126 375 1120 381 1120 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 369 1132 moveto
+369 1126 375 1120 381 1120 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 523 1120 moveto
+529 1120 535 1126 535 1132 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 523 1120 moveto
+529 1120 535 1126 535 1132 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 535 1152 moveto
+535 1158 529 1164 523 1164 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 535 1152 moveto
+535 1158 529 1164 523 1164 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 523 1164 moveto
+381 1164 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 381 1164 moveto
+375 1164 369 1158 369 1152 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 369 1152 moveto
+369 1132 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 369 1132 moveto
+369 1126 375 1120 381 1120 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 381 1120 moveto
+523 1120 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 523 1120 moveto
+529 1120 535 1126 535 1132 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 535 1132 moveto
+535 1152 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 535 1152 moveto
+535 1158 529 1164 523 1164 curveto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+417 1147.4 moveto 70 (AquaMeta) alignedtext
+0 0 0 nodecolor
+14 /Times-Roman set_font
+376.5 1129.4 moveto 151 (\(assign,stream-select\)) alignedtext
+grestore
+% 094cb8b2-df6d-4f73-a8f5-00a6ce14d59b->11496054-b3b3-4730-b43a-7130c474ef1f
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 452 1066.12 moveto
+452 1078.49 452 1095.2 452 1109.8 curveto
+stroke
+0 0 0 edgecolor
+newpath 448.5 1109.96 moveto
+452 1119.96 lineto
+455.5 1109.96 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 448.5 1109.96 moveto
+452 1119.96 lineto
+455.5 1109.96 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+452 1089.4 moveto 23 (1:1) alignedtext
+grestore
+% 17c0bf1d-edab-423b-a932-23d1c3111b0e
+gsave
+0.54118 0.25098 0.93333 nodecolor
+newpath 384 420 moveto
+322 420 lineto
+310 408 lineto
+310 388 lineto
+322 376 lineto
+384 376 lineto
+396 388 lineto
+396 408 lineto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 384 420 moveto
+322 420 lineto
+310 408 lineto
+310 388 lineto
+322 376 lineto
+384 376 lineto
+396 388 lineto
+396 408 lineto
+closepath stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 322 420 moveto
+316 420 310 414 310 408 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 322 420 moveto
+316 420 310 414 310 408 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 310 388 moveto
+310 382 316 376 322 376 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 310 388 moveto
+310 382 316 376 322 376 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 384 376 moveto
+390 376 396 382 396 388 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 384 376 moveto
+390 376 396 382 396 388 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 396 408 moveto
+396 414 390 420 384 420 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 396 408 moveto
+396 414 390 420 384 420 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 384 420 moveto
+322 420 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 322 420 moveto
+316 420 310 414 310 408 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 310 408 moveto
+310 388 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 310 388 moveto
+310 382 316 376 322 376 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 322 376 moveto
+384 376 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 384 376 moveto
+390 376 396 382 396 388 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 396 388 moveto
+396 408 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 396 408 moveto
+396 414 390 420 384 420 curveto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+318 403.4 moveto 70 (AquaMeta) alignedtext
+0 0 0 nodecolor
+14 /Times-Roman set_font
+337 385.4 moveto 32 (\(ets\)) alignedtext
+grestore
+% 7e45e056-61c7-47a0-a5d0-5e145b48b64b
+gsave
+0.54118 0.25098 0.93333 nodecolor
+newpath 392 510 moveto
+314 510 lineto
+302 498 lineto
+302 486 lineto
+314 474 lineto
+392 474 lineto
+404 486 lineto
+404 498 lineto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 392 510 moveto
+314 510 lineto
+302 498 lineto
+302 486 lineto
+314 474 lineto
+392 474 lineto
+404 486 lineto
+404 498 lineto
+closepath stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 314 510 moveto
+308 510 302 504 302 498 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 314 510 moveto
+308 510 302 504 302 498 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 302 486 moveto
+302 480 308 474 314 474 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 302 486 moveto
+302 480 308 474 314 474 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 392 474 moveto
+398 474 404 480 404 486 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 392 474 moveto
+398 474 404 480 404 486 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 404 498 moveto
+404 504 398 510 392 510 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 404 498 moveto
+404 504 398 510 392 510 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 392 510 moveto
+314 510 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 314 510 moveto
+308 510 302 504 302 498 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 302 498 moveto
+302 486 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 302 486 moveto
+302 480 308 474 314 474 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 314 474 moveto
+392 474 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 392 474 moveto
+398 474 404 480 404 486 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 404 486 moveto
+404 498 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 404 498 moveto
+404 504 398 510 392 510 curveto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+309.5 488.4 moveto 87 (BTreeSearch) alignedtext
+grestore
+% 17c0bf1d-edab-423b-a932-23d1c3111b0e->7e45e056-61c7-47a0-a5d0-5e145b48b64b
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 353 420.28 moveto
+353 433.34 353 449.97 353 463.93 curveto
+stroke
+0 0 0 edgecolor
+newpath 349.5 463.97 moveto
+353 473.97 lineto
+356.5 463.97 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 349.5 463.97 moveto
+353 473.97 lineto
+356.5 463.97 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+353 443.4 moveto 23 (1:1) alignedtext
+grestore
+% 55442d10-e749-4178-99e7-c29d40c980d1
+gsave
+0.54118 0.25098 0.93333 nodecolor
+newpath 469 1254 moveto
+399 1254 lineto
+387 1242 lineto
+387 1230 lineto
+399 1218 lineto
+469 1218 lineto
+481 1230 lineto
+481 1242 lineto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 469 1254 moveto
+399 1254 lineto
+387 1242 lineto
+387 1230 lineto
+399 1218 lineto
+469 1218 lineto
+481 1230 lineto
+481 1242 lineto
+closepath stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 399 1254 moveto
+393 1254 387 1248 387 1242 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 399 1254 moveto
+393 1254 387 1248 387 1242 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 387 1230 moveto
+387 1224 393 1218 399 1218 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 387 1230 moveto
+387 1224 393 1218 399 1218 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 469 1218 moveto
+475 1218 481 1224 481 1230 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 469 1218 moveto
+475 1218 481 1224 481 1230 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 481 1242 moveto
+481 1248 475 1254 469 1254 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 481 1242 moveto
+481 1248 475 1254 469 1254 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 469 1254 moveto
+399 1254 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 399 1254 moveto
+393 1254 387 1248 387 1242 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 387 1242 moveto
+387 1230 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 387 1230 moveto
+387 1224 393 1218 399 1218 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 399 1218 moveto
+469 1218 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 469 1218 moveto
+475 1218 481 1224 481 1230 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 481 1230 moveto
+481 1242 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 481 1242 moveto
+481 1248 475 1254 469 1254 curveto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+395 1232.4 moveto 78 (HashGroup) alignedtext
+grestore
+% 11496054-b3b3-4730-b43a-7130c474ef1f->55442d10-e749-4178-99e7-c29d40c980d1
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 447.73 1164.28 moveto
+445.23 1177.34 442.05 1193.97 439.38 1207.93 curveto
+stroke
+0 0 0 edgecolor
+newpath 435.89 1207.5 moveto
+437.45 1217.97 lineto
+442.77 1208.81 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 435.89 1207.5 moveto
+437.45 1217.97 lineto
+442.77 1208.81 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+445 1187.4 moveto 67 (M:N Hash) alignedtext
+grestore
+% fe400283-741d-4b35-bc79-9e430715f3fb->b07bbb40-a41c-4d00-994b-f5fa5d3eca34
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 715.54 608.04 moveto
+679.06 623.08 630.91 642.93 594.43 657.97 curveto
+stroke
+0 0 0 edgecolor
+newpath 592.85 654.84 moveto
+584.94 661.88 lineto
+595.52 661.31 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 592.85 654.84 moveto
+584.94 661.88 lineto
+595.52 661.31 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+668 631.4 moveto 67 (M:N Hash) alignedtext
+grestore
+% 73e52bad-0cff-4d55-b95b-176b16f7f464
+gsave
+0.54118 0.25098 0.93333 nodecolor
+newpath 804 322 moveto
+734 322 lineto
+722 310 lineto
+722 298 lineto
+734 286 lineto
+804 286 lineto
+816 298 lineto
+816 310 lineto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 804 322 moveto
+734 322 lineto
+722 310 lineto
+722 298 lineto
+734 286 lineto
+804 286 lineto
+816 298 lineto
+816 310 lineto
+closepath stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 734 322 moveto
+728 322 722 316 722 310 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 734 322 moveto
+728 322 722 316 722 310 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 722 298 moveto
+722 292 728 286 734 286 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 722 298 moveto
+722 292 728 286 734 286 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 804 286 moveto
+810 286 816 292 816 298 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 804 286 moveto
+810 286 816 292 816 298 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 816 310 moveto
+816 316 810 322 804 322 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 816 310 moveto
+816 316 810 322 804 322 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 804 322 moveto
+734 322 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 734 322 moveto
+728 322 722 316 722 310 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 722 310 moveto
+722 298 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 722 298 moveto
+722 292 728 286 734 286 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 734 286 moveto
+804 286 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 804 286 moveto
+810 286 816 292 816 298 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 816 298 moveto
+816 310 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 816 310 moveto
+816 316 810 322 804 322 curveto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+730 300.4 moveto 78 (HashGroup) alignedtext
+grestore
+% 73e52bad-0cff-4d55-b95b-176b16f7f464->fe17ac32-aa06-4273-bfeb-6ad12004146d
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 769 322.12 moveto
+769 335.65 769 354.38 769 369.85 curveto
+stroke
+0 0 0 edgecolor
+newpath 765.5 369.93 moveto
+769 379.93 lineto
+772.5 369.93 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 765.5 369.93 moveto
+769 379.93 lineto
+772.5 369.93 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+769 345.4 moveto 67 (M:N Hash) alignedtext
+grestore
+% 67d4cc31-c6fb-48d3-8ca3-af44628f68ca
+gsave
+0.54118 0.25098 0.93333 nodecolor
+newpath 174 232 moveto
+76 232 lineto
+64 220 lineto
+64 200 lineto
+76 188 lineto
+174 188 lineto
+186 200 lineto
+186 220 lineto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 174 232 moveto
+76 232 lineto
+64 220 lineto
+64 200 lineto
+76 188 lineto
+174 188 lineto
+186 200 lineto
+186 220 lineto
+closepath stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 76 232 moveto
+70 232 64 226 64 220 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 76 232 moveto
+70 232 64 226 64 220 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 64 200 moveto
+64 194 70 188 76 188 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 64 200 moveto
+64 194 70 188 76 188 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 174 188 moveto
+180 188 186 194 186 200 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 174 188 moveto
+180 188 186 194 186 200 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 186 220 moveto
+186 226 180 232 174 232 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 186 220 moveto
+186 226 180 232 174 232 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 174 232 moveto
+76 232 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 76 232 moveto
+70 232 64 226 64 220 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 64 220 moveto
+64 200 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 64 200 moveto
+64 194 70 188 76 188 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 76 188 moveto
+174 188 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 174 188 moveto
+180 188 186 194 186 200 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 186 200 moveto
+186 220 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 186 220 moveto
+186 226 180 232 174 232 curveto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+90 215.4 moveto 70 (AquaMeta) alignedtext
+0 0 0 nodecolor
+14 /Times-Roman set_font
+72 197.4 moveto 106 (\(assign,unnest\)) alignedtext
+grestore
+% f323df6e-1caa-4cb2-9c2c-903df08ee288->67d4cc31-c6fb-48d3-8ca3-af44628f68ca
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 125 134.12 moveto
+125 146.49 125 163.2 125 177.8 curveto
+stroke
+0 0 0 edgecolor
+newpath 121.5 177.96 moveto
+125 187.96 lineto
+128.5 177.96 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 121.5 177.96 moveto
+125 187.96 lineto
+128.5 177.96 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+125 157.4 moveto 23 (1:1) alignedtext
+grestore
+% 899fc36b-024c-402f-a155-a218dc3358ee->83b6ee56-1fba-4df7-bd13-89de2edfc4dc
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 178.46 608.04 moveto
+214.94 623.08 263.09 642.93 299.57 657.97 curveto
+stroke
+0 0 0 edgecolor
+newpath 298.48 661.31 moveto
+309.06 661.88 lineto
+301.15 654.84 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 298.48 661.31 moveto
+309.06 661.88 lineto
+301.15 654.84 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+260 631.4 moveto 67 (M:N Hash) alignedtext
+grestore
+% b07bbb40-a41c-4d00-994b-f5fa5d3eca34->800cab7e-8228-4c85-b19a-39cb844893b7
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 537.96 698.21 moveto
+535.89 710.66 533.1 727.39 530.74 741.58 curveto
+stroke
+0 0 0 edgecolor
+newpath 527.22 741.37 moveto
+529.03 751.81 lineto
+534.13 742.53 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 527.22 741.37 moveto
+529.03 751.81 lineto
+534.13 742.53 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+535 721.4 moveto 67 (M:N Hash) alignedtext
+grestore
+% ad75356e-262b-468d-ad27-5ead6cfa49b3->649b70fe-e549-4f38-b248-1868bf691b87
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 125 416.12 moveto
+125 429.65 125 448.38 125 463.85 curveto
+stroke
+0 0 0 edgecolor
+newpath 121.5 463.93 moveto
+125 473.93 lineto
+128.5 463.93 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 121.5 463.93 moveto
+125 473.93 lineto
+128.5 463.93 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+125 443.4 moveto 23 (1:1) alignedtext
+grestore
+% 40fc40ba-d7e5-44a2-a9a6-88642a2e2f79->019d92ce-5cb6-4ed4-a55b-5088b1298356
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 318.1 1254.1 moveto
+320.59 1265.13 324.89 1279.15 332 1290 curveto
+335.5 1295.34 339.91 1300.39 344.6 1304.99 curveto
+stroke
+0 0 0 edgecolor
+newpath 342.37 1307.68 moveto
+352.12 1311.81 lineto
+347.07 1302.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 342.37 1307.68 moveto
+352.12 1311.81 lineto
+347.07 1302.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+332 1277.4 moveto 67 (M:N Hash) alignedtext
+grestore
+% 6a50b453-2460-4ee8-8fc4-9855ecb54862
+gsave
+0.54118 0.25098 0.93333 nodecolor
+newpath 426 608 moveto
+280 608 lineto
+268 596 lineto
+268 576 lineto
+280 564 lineto
+426 564 lineto
+438 576 lineto
+438 596 lineto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 426 608 moveto
+280 608 lineto
+268 596 lineto
+268 576 lineto
+280 564 lineto
+426 564 lineto
+438 576 lineto
+438 596 lineto
+closepath stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 280 608 moveto
+274 608 268 602 268 596 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 280 608 moveto
+274 608 268 602 268 596 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 268 576 moveto
+268 570 274 564 280 564 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 268 576 moveto
+268 570 274 564 280 564 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 426 564 moveto
+432 564 438 570 438 576 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 426 564 moveto
+432 564 438 570 438 576 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 438 596 moveto
+438 602 432 608 426 608 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 438 596 moveto
+438 602 432 608 426 608 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 426 608 moveto
+280 608 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 280 608 moveto
+274 608 268 602 268 596 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 268 596 moveto
+268 576 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 268 576 moveto
+268 570 274 564 280 564 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 280 564 moveto
+426 564 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 426 564 moveto
+432 564 438 570 438 576 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 438 576 moveto
+438 596 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 438 596 moveto
+438 602 432 608 426 608 curveto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+318 591.4 moveto 70 (AquaMeta) alignedtext
+0 0 0 nodecolor
+14 /Times-Roman set_font
+276 573.4 moveto 154 (\(assign,assign,unnest\)) alignedtext
+grestore
+% 6a50b453-2460-4ee8-8fc4-9855ecb54862->83b6ee56-1fba-4df7-bd13-89de2edfc4dc
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 353 608.28 moveto
+353 621.34 353 637.97 353 651.93 curveto
+stroke
+0 0 0 edgecolor
+newpath 349.5 651.97 moveto
+353 661.97 lineto
+356.5 651.97 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 349.5 651.97 moveto
+353 661.97 lineto
+356.5 651.97 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+353 631.4 moveto 67 (M:N Hash) alignedtext
+grestore
+% 4c0306ed-84f7-4dd8-987c-a800d925505a
+gsave
+0.54118 0.25098 0.93333 nodecolor
+newpath 818 232 moveto
+720 232 lineto
+708 220 lineto
+708 200 lineto
+720 188 lineto
+818 188 lineto
+830 200 lineto
+830 220 lineto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 818 232 moveto
+720 232 lineto
+708 220 lineto
+708 200 lineto
+720 188 lineto
+818 188 lineto
+830 200 lineto
+830 220 lineto
+closepath stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 720 232 moveto
+714 232 708 226 708 220 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 720 232 moveto
+714 232 708 226 708 220 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 708 200 moveto
+708 194 714 188 720 188 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 708 200 moveto
+708 194 714 188 720 188 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 818 188 moveto
+824 188 830 194 830 200 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 818 188 moveto
+824 188 830 194 830 200 curveto
+stroke
+0.54118 0.25098 0.93333 nodecolor
+newpath 830 220 moveto
+830 226 824 232 818 232 curveto
+closepath fill
+1 setlinewidth
+filled
+0.54118 0.25098 0.93333 nodecolor
+newpath 830 220 moveto
+830 226 824 232 818 232 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 818 232 moveto
+720 232 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 720 232 moveto
+714 232 708 226 708 220 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 708 220 moveto
+708 200 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 708 200 moveto
+708 194 714 188 720 188 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 720 188 moveto
+818 188 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 818 188 moveto
+824 188 830 194 830 200 curveto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 830 200 moveto
+830 220 lineto
+stroke
+1 setlinewidth
+filled
+0 0 0 nodecolor
+newpath 830 220 moveto
+830 226 824 232 818 232 curveto
+stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+734 215.4 moveto 70 (AquaMeta) alignedtext
+0 0 0 nodecolor
+14 /Times-Roman set_font
+716 197.4 moveto 106 (\(assign,unnest\)) alignedtext
+grestore
+% 5f398745-a0da-4a93-8654-add2e550003c->4c0306ed-84f7-4dd8-987c-a800d925505a
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 769 134.12 moveto
+769 146.49 769 163.2 769 177.8 curveto
+stroke
+0 0 0 edgecolor
+newpath 765.5 177.96 moveto
+769 187.96 lineto
+772.5 177.96 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 765.5 177.96 moveto
+769 187.96 lineto
+772.5 177.96 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+769 157.4 moveto 23 (1:1) alignedtext
+grestore
+% 55442d10-e749-4178-99e7-c29d40c980d1->019d92ce-5cb6-4ed4-a55b-5088b1298356
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 423.2 1254.12 moveto
+414.91 1268.04 403.34 1287.47 393.98 1303.18 curveto
+stroke
+0 0 0 edgecolor
+newpath 390.88 1301.55 moveto
+388.76 1311.93 lineto
+396.89 1305.13 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 390.88 1301.55 moveto
+388.76 1311.93 lineto
+396.89 1305.13 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+412 1277.4 moveto 67 (M:N Hash) alignedtext
+grestore
+% 162900ff-b4a6-4d0c-b9c2-6595f9d11e4e->094cb8b2-df6d-4f73-a8f5-00a6ce14d59b
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 501.6 976.28 moveto
+492.21 989.85 480.16 1007.28 470.29 1021.56 curveto
+stroke
+0 0 0 edgecolor
+newpath 467.27 1019.76 moveto
+464.46 1029.97 lineto
+473.03 1023.74 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 467.27 1019.76 moveto
+464.46 1029.97 lineto
+473.03 1023.74 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+489 999.4 moveto 67 (M:N Hash) alignedtext
+grestore
+% 67d4cc31-c6fb-48d3-8ca3-af44628f68ca->a80baf03-e23a-4e51-828a-b9ec8620767b
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 125 232.28 moveto
+125 245.34 125 261.97 125 275.93 curveto
+stroke
+0 0 0 edgecolor
+newpath 121.5 275.97 moveto
+125 285.97 lineto
+128.5 275.97 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 121.5 275.97 moveto
+125 285.97 lineto
+128.5 275.97 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+125 255.4 moveto 23 (1:1) alignedtext
+grestore
+% 7e45e056-61c7-47a0-a5d0-5e145b48b64b->6a50b453-2460-4ee8-8fc4-9855ecb54862
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 353 510.12 moveto
+353 522.49 353 539.2 353 553.8 curveto
+stroke
+0 0 0 edgecolor
+newpath 349.5 553.96 moveto
+353 563.96 lineto
+356.5 553.96 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 349.5 553.96 moveto
+353 563.96 lineto
+356.5 553.96 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+353 533.4 moveto 23 (1:1) alignedtext
+grestore
+% 4c0306ed-84f7-4dd8-987c-a800d925505a->73e52bad-0cff-4d55-b95b-176b16f7f464
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 769 232.28 moveto
+769 245.34 769 261.97 769 275.93 curveto
+stroke
+0 0 0 edgecolor
+newpath 765.5 275.97 moveto
+769 285.97 lineto
+772.5 275.97 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 765.5 275.97 moveto
+769 285.97 lineto
+772.5 275.97 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+769 255.4 moveto 23 (1:1) alignedtext
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 781 1476
+end
+restore
+%%EOF
diff --git a/asterix-app/src/test/resources/fuzzyjoin/users-visitors/010-load-users.aql b/asterix-app/src/test/resources/fuzzyjoin/users-visitors/010-load-users.aql
new file mode 100644
index 0000000..be75fa6
--- /dev/null
+++ b/asterix-app/src/test/resources/fuzzyjoin/users-visitors/010-load-users.aql
@@ -0,0 +1,18 @@
+use dataverse fuzzy1;
+
+declare type UserType as open {
+  uid: int32, 
+  name: string,
+  lottery_numbers: {{int32}},
+  interests: {{string}}
+}
+
+declare nodegroup group1 on nc1, nc2;
+
+declare dataset Users(UserType) 
+  partitioned by key uid on group1;
+
+load dataset Users 
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1:///asterix/asterix-app/data/users-visitors-small/users.json"),("format"="adm")) pre-sorted;
+
diff --git a/asterix-app/src/test/resources/fuzzyjoin/users-visitors/020-drop-users.aql b/asterix-app/src/test/resources/fuzzyjoin/users-visitors/020-drop-users.aql
new file mode 100644
index 0000000..86525a7
--- /dev/null
+++ b/asterix-app/src/test/resources/fuzzyjoin/users-visitors/020-drop-users.aql
@@ -0,0 +1,15 @@
+use dataverse fuzzy1;
+
+declare type UserType as open {
+  uid: int32, 
+  name: string,
+  lottery_numbers: {{int32}},
+  interests: {{string}}
+}
+
+declare nodegroup group1 on nc1, nc2;
+
+declare dataset Users(UserType) 
+  partitioned by key uid on group1;
+
+drop dataset Users;
diff --git a/asterix-app/src/test/resources/fuzzyjoin/users-visitors/030-filter-users.aql b/asterix-app/src/test/resources/fuzzyjoin/users-visitors/030-filter-users.aql
new file mode 100644
index 0000000..298c0b1
--- /dev/null
+++ b/asterix-app/src/test/resources/fuzzyjoin/users-visitors/030-filter-users.aql
@@ -0,0 +1,21 @@
+use dataverse fuzzy1;
+
+declare type UserType as open {
+  uid: int32, 
+  name: string,
+  lottery_numbers: {{int32}},
+  interests: {{string}}
+}
+
+declare nodegroup group1 on nc1, nc2;
+
+declare dataset Users(UserType) 
+  partitioned by key uid on group1;
+
+write output to nc1:'/tmp/users.adm';
+
+for $u in dataset('Users')
+// where $u.uid > 1
+// where $u.name = 'Jodi Rotruck'
+return $u
+// return's:q1 { 'user_name': $u.name }
diff --git a/asterix-app/src/test/resources/fuzzyjoin/users-visitors/040-load-visitors.aql b/asterix-app/src/test/resources/fuzzyjoin/users-visitors/040-load-visitors.aql
new file mode 100644
index 0000000..a75989a
--- /dev/null
+++ b/asterix-app/src/test/resources/fuzzyjoin/users-visitors/040-load-visitors.aql
@@ -0,0 +1,19 @@
+use dataverse fuzzy1;
+
+declare type VisitorType as open {
+  vid: int32, 
+  name: string,
+  lottery_numbers: {{int32}},
+  interests: {{string}}
+}
+
+declare nodegroup group1 on nc1, nc2;
+
+declare dataset Visitors(VisitorType) 
+  partitioned by key vid on group1;
+
+load dataset Visitors 
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1:///asterix/asterix-app/data/users-visitors-small/visitors.json"),("format"="asm")) pre-sorted;
+
+
diff --git a/asterix-app/src/test/resources/fuzzyjoin/users-visitors/050-drop-visitors.aql b/asterix-app/src/test/resources/fuzzyjoin/users-visitors/050-drop-visitors.aql
new file mode 100644
index 0000000..15047b8
--- /dev/null
+++ b/asterix-app/src/test/resources/fuzzyjoin/users-visitors/050-drop-visitors.aql
@@ -0,0 +1,15 @@
+use dataverse fuzzy1;
+
+declare type VisitorType as open {
+  vid: int32, 
+  name: string,
+  lottery_numbers: {{int32}},
+  interests: {{string}}
+}
+
+declare nodegroup group1 on nc1, nc2;
+
+declare dataset Visitors(VisitorType) 
+  partitioned by key vid on group1;
+
+drop dataset Visitors;
diff --git a/asterix-app/src/test/resources/fuzzyjoin/users-visitors/060-fililter-visitors.aql b/asterix-app/src/test/resources/fuzzyjoin/users-visitors/060-fililter-visitors.aql
new file mode 100644
index 0000000..dae180e
--- /dev/null
+++ b/asterix-app/src/test/resources/fuzzyjoin/users-visitors/060-fililter-visitors.aql
@@ -0,0 +1,21 @@
+use dataverse fuzzy1;
+
+declare type VisitorType as open {
+  vid: int32, 
+  name: string,
+  lottery_numbers: {{int32}},
+  interests: {{string}}
+}
+
+declare nodegroup group1 on nc1, nc2;
+
+declare dataset Visitors(VisitorType) 
+  partitioned by key vid on group1;
+
+write output to nc1:'/tmp/visitors.adm';
+
+for $v in dataset('Visitors')
+// where $v.vid >= 10
+// where $v.name = 'Marvella Loud'
+return $v
+// return { 'user_name': $v.name }
diff --git a/asterix-app/src/test/resources/fuzzyjoin/users-visitors/070-join-aql-lottery_numbers.aql b/asterix-app/src/test/resources/fuzzyjoin/users-visitors/070-join-aql-lottery_numbers.aql
new file mode 100644
index 0000000..aaa145f
--- /dev/null
+++ b/asterix-app/src/test/resources/fuzzyjoin/users-visitors/070-join-aql-lottery_numbers.aql
@@ -0,0 +1,92 @@
+use dataverse fuzzy1;
+
+declare type UserType as open {
+  uid: int32, 
+  name: string,
+  lottery_numbers: {{int32}},
+  interests: {{string}}
+}
+
+declare type VisitorType as open {
+  vid: int32, 
+  name: string,
+  lottery_numbers: {{int32}},
+  interests: {{string}}
+}
+
+declare nodegroup group1 on nc1, nc2;
+
+declare dataset Users(UserType) 
+  partitioned by key uid on group1;
+declare dataset Visitors(VisitorType) 
+  partitioned by key vid on group1;
+
+write output to nc1:'/tmp/users-visitors.adm';
+
+//
+// -- - Stage 3 - --
+//
+for $ridpair in 
+    //
+    // -- - Stage 2 - --
+    //
+    for $user in dataset('Users')
+    let $tokens_user :=
+        for $lottery_number in $user.lottery_numbers
+        for $token at $i in
+            //
+            // -- - Stage 1 - --
+            //
+            for $user in dataset('Users')
+            for $lottery_number in $user.lottery_numbers 
+            group by $item := $lottery_number with $user 
+            order by count($user)
+            return $item
+        where $lottery_number = $token
+        order by $i
+        return $i
+    for $prefix_token_user in subset-collection(
+                                $tokens_user, 
+                                0,
+                                prefix-len(
+                                    len($tokens_user), 'Jaccard', .5))
+
+    for $visitor in dataset('Visitors')
+    let $tokens_visitor :=
+        for $lottery_number in $visitor.lottery_numbers
+        for $token at $i in
+            //
+            // -- - Stage 1 - --
+            //
+            for $user in dataset('Users')
+            for $lottery_number in $user.lottery_numbers 
+            group by $item := $lottery_number with $user 
+            order by count($user)
+            return $item
+        where $lottery_number = $token
+        order by $i
+        return $i
+    for $prefix_token_visitor in subset-collection(
+                                    $tokens_visitor, 
+                                    0, 
+                                    prefix-len(
+                                        len($tokens_visitor), 'Jaccard', .5))
+
+    where $prefix_token_user = $prefix_token_visitor
+
+    let $sim := similarity(
+                    len($user.lottery_numbers),
+                    $tokens_user,
+                    len($visitor.lottery_numbers),
+                    $tokens_visitor,
+                    $prefix_token_user,
+                    'Jaccard',
+                    .5)
+    where $sim >= .5
+    group by $uid := $user.uid, $vid := $visitor.vid with $sim
+    return { 'uid': $uid, 'vid': $vid, 'sim': $sim[0] }
+
+for $user in dataset('Users')
+for $visitor in dataset('Visitors')
+where $ridpair.uid = $user.uid and $ridpair.vid = $visitor.vid
+return { 'user': $user, 'visitor': $visitor, 'sim': $ridpair.sim }
diff --git a/asterix-app/src/test/resources/fuzzyjoin/users-visitors/080-join-op-lottery_numbers.aql b/asterix-app/src/test/resources/fuzzyjoin/users-visitors/080-join-op-lottery_numbers.aql
new file mode 100644
index 0000000..ca5bebb
--- /dev/null
+++ b/asterix-app/src/test/resources/fuzzyjoin/users-visitors/080-join-op-lottery_numbers.aql
@@ -0,0 +1,31 @@
+use dataverse fuzzy1;
+
+declare type UserType as open {
+  uid: int32, 
+  name: string,
+  lottery_numbers: {{int32}},
+  interests: {{string}}
+}
+
+declare type VisitorType as open {
+  vid: int32, 
+  name: string,
+  lottery_numbers: {{int32}},
+  interests: {{string}}
+}
+
+declare nodegroup group1 on nc1, nc2;
+
+declare dataset Users(UserType) 
+  partitioned by key uid on group1;
+declare dataset Visitors(VisitorType) 
+  partitioned by key vid on group1;
+
+write output to nc1:'/tmp/users-visitors.adm';
+
+set simthreshold '.5';
+
+for $user in dataset('Users')
+for $visitor in dataset('Visitors')
+where $user.lottery_numbers ~= $visitor.lottery_numbers
+return { 'user': $user, 'visitor': $visitor }
diff --git a/asterix-app/src/test/resources/fuzzyjoin/users-visitors/090-join-op-interests.aql b/asterix-app/src/test/resources/fuzzyjoin/users-visitors/090-join-op-interests.aql
new file mode 100644
index 0000000..a7cf0a4
--- /dev/null
+++ b/asterix-app/src/test/resources/fuzzyjoin/users-visitors/090-join-op-interests.aql
@@ -0,0 +1,31 @@
+use dataverse fuzzy1;
+
+declare type UserType as open {
+  uid: {{int32}}, 
+  name: string,
+  lottery_numbers: {{int32}},
+  interests: {{string}}
+}
+
+declare type VisitorType as open {
+  vid: {{int32}}, 
+  name: string,
+  lottery_numbers: {{int32}},
+  interests: {{string}}
+}
+
+declare nodegroup group1 on nc1, nc2;
+
+declare dataset Users(UserType) 
+  partitioned by key uid on group1;
+declare dataset Visitors(VisitorType) 
+  partitioned by key vid on group1;
+
+write output to nc1:'/tmp/users-visitors.adm';
+
+set simthreshold '.5';
+
+for $user in dataset('Users')
+for $visitor in dataset('Visitors')
+where $user.interests ~= $visitor.interests
+return { 'user': $user, 'visitor': $visitor }