You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by sp...@apache.org on 2016/08/22 20:39:46 UTC

[01/48] tinkerpop git commit: Made a number of changes to logging dependencies.

Repository: tinkerpop
Updated Branches:
  refs/heads/TINKERPOP-1278 fb8c25c16 -> 67b4d1133


Made a number of changes to logging dependencies.

Log4j is now generally a test dependency except for gremlin-server and gremlin-console where they need to be shipped as part of the binary distribution. In that case, they are optional scope for those who for some reason depend on those libs.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/d0606ec2
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/d0606ec2
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/d0606ec2

Branch: refs/heads/TINKERPOP-1278
Commit: d0606ec25c632f15fc0dec57408d14eaf709c7e6
Parents: 19d2eee
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Thu Aug 4 12:26:43 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Mon Aug 8 07:59:01 2016 -0400

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |  1 +
 .../upgrade/release-3.2.x-incubating.asciidoc   | 40 +++++++++
 .../main/resources/archetype-resources/pom.xml  |  5 ++
 gremlin-console/pom.xml                         | 11 +++
 gremlin-core/pom.xml                            |  8 +-
 gremlin-driver/pom.xml                          |  6 ++
 gremlin-groovy/pom.xml                          |  7 ++
 gremlin-server/pom.xml                          | 11 +++
 .../gremlin/util/Log4jRecordingAppender.java    | 66 +++++++++++++++
 .../util/Log4jRecordingAppenderTest.java        | 86 ++++++++++++++++++++
 gremlin-test/pom.xml                            |  6 ++
 .../gremlin/util/Log4jRecordingAppender.java    | 66 ---------------
 .../util/Log4jRecordingAppenderTest.java        | 80 ------------------
 pom.xml                                         |  5 ++
 14 files changed, 251 insertions(+), 147 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d0606ec2/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index c5850ba..8f5d7dc 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -26,6 +26,7 @@ image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima
 TinkerPop 3.2.2 (NOT OFFICIALLY RELEASED YET)
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
+* Changed scope of log4j dependencies so that they would only be used in tests and the binary distributions of Gremlin Console and Server.
 * Added new recipe for "Traversal Induced Values".
 * Fixed a potential leak of a `ReferenceCounted` resource in Gremlin Server.
 * Added class registrations for `Map.Entry` implementations to `GryoMapper`.

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d0606ec2/docs/src/upgrade/release-3.2.x-incubating.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/upgrade/release-3.2.x-incubating.asciidoc b/docs/src/upgrade/release-3.2.x-incubating.asciidoc
index f85012c..60092dc 100644
--- a/docs/src/upgrade/release-3.2.x-incubating.asciidoc
+++ b/docs/src/upgrade/release-3.2.x-incubating.asciidoc
@@ -22,6 +22,46 @@ image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima
 
 *Nine Inch Gremlins*
 
+TinkerPop 3.2.2
+---------------
+
+*Release Date: NOT OFFICIALLY RELEASED YET*
+
+Please see the link:https://github.com/apache/tinkerpop/blob/3.2.2/CHANGELOG.asciidoc#release-3-2-2[changelog] for a complete list of all the modifications that are part of this release.
+
+Upgrading for Users
+~~~~~~~~~~~~~~~~~~~
+
+Log4j Dependencies
+^^^^^^^^^^^^^^^^^^
+
+There were a number of changes to the Log4j dependencies in the various modules. Log4j was formerly included as part
+of the `slf4j-log4j12` in `gremlin-core`, however that "forced" use of Log4j as a logger implementation when that
+really wasn't necessary or desired. If a project depended on `gremlin-core` or other TinkerPop project to get its
+Log4j implementation then those applications will need to now include the dependency themselves directly.
+
+Note that Gremlin Server and Gremlin Console explicitly package Log4j in their respective binary distributions.
+
+See: link:https://issues.apache.org/jira/browse/TINKERPOP-1151[TINKERPOP-1151]
+
+Upgrading for Providers
+~~~~~~~~~~~~~~~~~~~~~~~
+
+Graph System Providers
+^^^^^^^^^^^^^^^^^^^^^^
+
+Log4j Dependencies
+++++++++++++++++++
+
+There were a number of changes to the Log4j dependencies in the various modules. Log4j was formerly included as part
+of the `slf4j-log4j12` in `gremlin-core`, however that "forced" use of log4j as a logger implementation when that
+really wasn't necessary or desired. The `slf4j-log4j12` dependency is now in "test" scope for most of the modules. The
+exception to that rule is `gremlin-test` which prescribes it as "optional". That change means that developers
+dependending on `gremlin-test` (or `gremlin-groovy-test`) will need to explicitly specify it as a dependency in their
+`pom.xml` (or a different slf4j implementation if that better suits them).
+
+See: link:https://issues.apache.org/jira/browse/TINKERPOP-1151[TINKERPOP-1151]
+
 TinkerPop 3.2.1
 ---------------
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d0606ec2/gremlin-archetype/gremlin-archetype-tinkergraph/src/main/resources/archetype-resources/pom.xml
----------------------------------------------------------------------
diff --git a/gremlin-archetype/gremlin-archetype-tinkergraph/src/main/resources/archetype-resources/pom.xml b/gremlin-archetype/gremlin-archetype-tinkergraph/src/main/resources/archetype-resources/pom.xml
index 271f9dd..0727319 100644
--- a/gremlin-archetype/gremlin-archetype-tinkergraph/src/main/resources/archetype-resources/pom.xml
+++ b/gremlin-archetype/gremlin-archetype-tinkergraph/src/main/resources/archetype-resources/pom.xml
@@ -35,6 +35,11 @@ limitations under the License.
             <version>${project.version}</version>
         </dependency>
         <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-log4j12</artifactId>
+            <version>${slf4j.version}</version>
+        </dependency>
+        <dependency>
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>
             <version>4.12</version>

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d0606ec2/gremlin-console/pom.xml
----------------------------------------------------------------------
diff --git a/gremlin-console/pom.xml b/gremlin-console/pom.xml
index cbbab3e..b1c5b56 100644
--- a/gremlin-console/pom.xml
+++ b/gremlin-console/pom.xml
@@ -61,6 +61,17 @@ limitations under the License.
             <artifactId>gprof</artifactId>
             <version>0.3.1-groovy-2.4</version>
         </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-log4j12</artifactId>
+            <version>${slf4j.version}</version>
+            <scope>optional</scope>
+        </dependency>
+        <dependency>
+            <groupId>log4j</groupId>
+            <artifactId>log4j</artifactId>
+            <scope>optional</scope>
+        </dependency>
         <!-- TESTING -->
         <dependency>
             <groupId>junit</groupId>

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d0606ec2/gremlin-core/pom.xml
----------------------------------------------------------------------
diff --git a/gremlin-core/pom.xml b/gremlin-core/pom.xml
index 5f246f2..4accd63 100644
--- a/gremlin-core/pom.xml
+++ b/gremlin-core/pom.xml
@@ -64,7 +64,7 @@ limitations under the License.
         <!-- LOGGING -->
         <dependency>
             <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-log4j12</artifactId>
+            <artifactId>slf4j-api</artifactId>
             <version>${slf4j.version}</version>
         </dependency>
         <dependency>
@@ -80,6 +80,12 @@ limitations under the License.
             <scope>test</scope>
         </dependency>
         <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-log4j12</artifactId>
+            <version>${slf4j.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
             <groupId>org.mockito</groupId>
             <artifactId>mockito-all</artifactId>
             <version>1.9.5</version>

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d0606ec2/gremlin-driver/pom.xml
----------------------------------------------------------------------
diff --git a/gremlin-driver/pom.xml b/gremlin-driver/pom.xml
index 2d5aa93..beeddf7 100644
--- a/gremlin-driver/pom.xml
+++ b/gremlin-driver/pom.xml
@@ -69,6 +69,12 @@ limitations under the License.
             <scope>test</scope>
         </dependency>
         <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-log4j12</artifactId>
+            <version>${slf4j.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
             <groupId>org.apache.tinkerpop</groupId>
             <artifactId>tinkergraph-gremlin</artifactId>
             <version>${project.version}</version>

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d0606ec2/gremlin-groovy/pom.xml
----------------------------------------------------------------------
diff --git a/gremlin-groovy/pom.xml b/gremlin-groovy/pom.xml
index 3e37e17..8a12f10 100644
--- a/gremlin-groovy/pom.xml
+++ b/gremlin-groovy/pom.xml
@@ -70,6 +70,13 @@ limitations under the License.
             <artifactId>jBCrypt</artifactId>
             <version>jbcrypt-0.4</version>
         </dependency>
+        <!-- TEST -->
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-log4j12</artifactId>
+            <version>${slf4j.version}</version>
+            <scope>test</scope>
+        </dependency>
         <dependency>
             <groupId>org.apache.tinkerpop</groupId>
             <artifactId>gremlin-test</artifactId>

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d0606ec2/gremlin-server/pom.xml
----------------------------------------------------------------------
diff --git a/gremlin-server/pom.xml b/gremlin-server/pom.xml
index 2e7fc35..9a9c077 100644
--- a/gremlin-server/pom.xml
+++ b/gremlin-server/pom.xml
@@ -45,6 +45,17 @@ limitations under the License.
             <groupId>commons-collections</groupId>
             <artifactId>commons-collections</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-log4j12</artifactId>
+            <version>${slf4j.version}</version>
+            <scope>optional</scope>
+        </dependency>
+        <dependency>
+            <groupId>log4j</groupId>
+            <artifactId>log4j</artifactId>
+            <scope>optional</scope>
+        </dependency>
         <!-- METRICS -->
         <dependency>
             <groupId>com.codahale.metrics</groupId>

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d0606ec2/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/util/Log4jRecordingAppender.java
----------------------------------------------------------------------
diff --git a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/util/Log4jRecordingAppender.java b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/util/Log4jRecordingAppender.java
new file mode 100644
index 0000000..e44f72f
--- /dev/null
+++ b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/util/Log4jRecordingAppender.java
@@ -0,0 +1,66 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.util;
+
+import org.apache.log4j.AppenderSkeleton;
+import org.apache.log4j.PatternLayout;
+import org.apache.log4j.spi.LoggingEvent;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Provides a way to gather logging events for purpose of testing log output.
+ *
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ */
+public class Log4jRecordingAppender extends AppenderSkeleton {
+    private final List<String> messages = new ArrayList<>();
+
+    public Log4jRecordingAppender() {
+        super();
+        setLayout(new PatternLayout("%p - %m%n"));
+    }
+
+    @Override
+    protected void append(final LoggingEvent event) {
+        messages.add(layout.format(event));
+    }
+
+    @Override
+    public void close() {
+    }
+
+    @Override
+    public boolean requiresLayout() {
+        return true;
+    }
+
+    public List<String> getMessages() {
+        return messages;
+    }
+
+    public void clear() {
+        messages.clear();
+    }
+
+    public boolean logContainsAny(final String fragment) {
+        return messages.stream().anyMatch(m -> m.contains(fragment));
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d0606ec2/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/util/Log4jRecordingAppenderTest.java
----------------------------------------------------------------------
diff --git a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/util/Log4jRecordingAppenderTest.java b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/util/Log4jRecordingAppenderTest.java
new file mode 100644
index 0000000..dd1ea63
--- /dev/null
+++ b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/util/Log4jRecordingAppenderTest.java
@@ -0,0 +1,86 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.util;
+
+import org.apache.log4j.Level;
+import org.apache.log4j.Logger;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.slf4j.LoggerFactory;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+/**
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ */
+public class Log4jRecordingAppenderTest {
+    private static final org.slf4j.Logger logger = LoggerFactory.getLogger(Log4jRecordingAppenderTest.class);
+    private Log4jRecordingAppender recordingAppender = null;
+    private static final String lineSeparator = System.getProperty("line.separator");
+
+    private Level originalConfiguredLevel = null;
+
+    @Before
+    public void setupForEachTest() {
+        recordingAppender = new Log4jRecordingAppender();
+        final Logger rootLogger = Logger.getRootLogger();
+        if (null == originalConfiguredLevel) originalConfiguredLevel = rootLogger.getLevel();
+        rootLogger.addAppender(recordingAppender);
+        rootLogger.setLevel(Level.ALL);
+
+        logger.error("ERROR");
+        logger.warn("WARN");
+        logger.info("INFO");
+    }
+
+    @After
+    public void teardownForEachTest() {
+        final Logger rootLogger = Logger.getRootLogger();
+        rootLogger.removeAppender(recordingAppender);
+        rootLogger.setLevel(originalConfiguredLevel);
+    }
+
+    @Test
+    public void shouldRecordMessages() {
+        assertEquals(3, recordingAppender.getMessages().size());
+        assertEquals("ERROR - ERROR" + lineSeparator, recordingAppender.getMessages().get(0));
+        assertEquals("WARN - WARN"  + lineSeparator, recordingAppender.getMessages().get(1));
+        assertEquals("INFO - INFO" + lineSeparator, recordingAppender.getMessages().get(2));
+    }
+
+    @Test
+    public void shouldMatchAnyMessages() {
+        assertTrue(recordingAppender.logContainsAny("ERROR"));
+    }
+
+    @Test
+    public void shouldMatchNoMessages() {
+        assertFalse(recordingAppender.logContainsAny("this is not here"));
+    }
+
+    @Test
+    public void shouldClearMessages() {
+        assertEquals(3, recordingAppender.getMessages().size());
+        recordingAppender.clear();
+        assertEquals(0, recordingAppender.getMessages().size());
+    }
+}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d0606ec2/gremlin-test/pom.xml
----------------------------------------------------------------------
diff --git a/gremlin-test/pom.xml b/gremlin-test/pom.xml
index 09f3a3f..28df2e8 100644
--- a/gremlin-test/pom.xml
+++ b/gremlin-test/pom.xml
@@ -74,6 +74,12 @@ limitations under the License.
             <artifactId>hamcrest-all</artifactId>
             <version>1.3</version>
         </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-log4j12</artifactId>
+            <version>${slf4j.version}</version>
+            <scope>optional</scope>
+        </dependency>
     </dependencies>
     <build>
         <directory>${basedir}/target</directory>

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d0606ec2/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/util/Log4jRecordingAppender.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/util/Log4jRecordingAppender.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/util/Log4jRecordingAppender.java
deleted file mode 100644
index e44f72f..0000000
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/util/Log4jRecordingAppender.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.tinkerpop.gremlin.util;
-
-import org.apache.log4j.AppenderSkeleton;
-import org.apache.log4j.PatternLayout;
-import org.apache.log4j.spi.LoggingEvent;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Provides a way to gather logging events for purpose of testing log output.
- *
- * @author Stephen Mallette (http://stephen.genoprime.com)
- */
-public class Log4jRecordingAppender extends AppenderSkeleton {
-    private final List<String> messages = new ArrayList<>();
-
-    public Log4jRecordingAppender() {
-        super();
-        setLayout(new PatternLayout("%p - %m%n"));
-    }
-
-    @Override
-    protected void append(final LoggingEvent event) {
-        messages.add(layout.format(event));
-    }
-
-    @Override
-    public void close() {
-    }
-
-    @Override
-    public boolean requiresLayout() {
-        return true;
-    }
-
-    public List<String> getMessages() {
-        return messages;
-    }
-
-    public void clear() {
-        messages.clear();
-    }
-
-    public boolean logContainsAny(final String fragment) {
-        return messages.stream().anyMatch(m -> m.contains(fragment));
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d0606ec2/gremlin-test/src/test/java/org/apache/tinkerpop/gremlin/util/Log4jRecordingAppenderTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/test/java/org/apache/tinkerpop/gremlin/util/Log4jRecordingAppenderTest.java b/gremlin-test/src/test/java/org/apache/tinkerpop/gremlin/util/Log4jRecordingAppenderTest.java
deleted file mode 100644
index 92eb38b..0000000
--- a/gremlin-test/src/test/java/org/apache/tinkerpop/gremlin/util/Log4jRecordingAppenderTest.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.tinkerpop.gremlin.util;
-
-import org.apache.log4j.Logger;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.slf4j.LoggerFactory;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-/**
- * @author Stephen Mallette (http://stephen.genoprime.com)
- */
-public class Log4jRecordingAppenderTest {
-    private static final org.slf4j.Logger logger = LoggerFactory.getLogger(Log4jRecordingAppenderTest.class);
-    private Log4jRecordingAppender recordingAppender = null;
-    private static final String lineSeparator = System.getProperty("line.separator");
-
-    @Before
-    public void setupForEachTest() {
-        recordingAppender = new Log4jRecordingAppender();
-        final Logger rootLogger = Logger.getRootLogger();
-        rootLogger.addAppender(recordingAppender);
-
-        logger.error("ERROR");
-        logger.warn("WARN");
-        logger.info("INFO");
-    }
-
-    @After
-    public void teardownForEachTest() {
-        final Logger rootLogger = Logger.getRootLogger();
-        rootLogger.removeAppender(recordingAppender);
-    }
-
-    @Test
-    public void shouldRecordMessages() {
-        assertEquals(3, recordingAppender.getMessages().size());
-        assertEquals("ERROR - ERROR" + lineSeparator, recordingAppender.getMessages().get(0));
-        assertEquals("WARN - WARN"  + lineSeparator, recordingAppender.getMessages().get(1));
-        assertEquals("INFO - INFO" + lineSeparator, recordingAppender.getMessages().get(2));
-    }
-
-    @Test
-    public void shouldMatchAnyMessages() {
-        assertTrue(recordingAppender.logContainsAny("ERROR"));
-    }
-
-    @Test
-    public void shouldMatchNoMessages() {
-        assertFalse(recordingAppender.logContainsAny("this is not here"));
-    }
-
-    @Test
-    public void shouldClearMessages() {
-        assertEquals(3, recordingAppender.getMessages().size());
-        recordingAppender.clear();
-        assertEquals(0, recordingAppender.getMessages().size());
-    }
-}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d0606ec2/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 749c8f0..90ed55f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -591,6 +591,11 @@ limitations under the License.
                     </exclusion>
                 </exclusions>
             </dependency>
+            <dependency>
+                <groupId>log4j</groupId>
+                <artifactId>log4j</artifactId>
+                <version>1.2.17</version>
+            </dependency>
         </dependencies>
     </dependencyManagement>
 


[10/48] tinkerpop git commit: updated CHANGELOG.

Posted by sp...@apache.org.
updated CHANGELOG.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/4443dcf6
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/4443dcf6
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/4443dcf6

Branch: refs/heads/TINKERPOP-1278
Commit: 4443dcf613096a96b3c426f6c391781dffdf0e0f
Parents: 2720b97
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Fri Aug 12 08:14:00 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Fri Aug 12 08:14:00 2016 -0600

----------------------------------------------------------------------
 CHANGELOG.asciidoc | 1 +
 1 file changed, 1 insertion(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/4443dcf6/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index fefffb0..201d1ae 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -26,6 +26,7 @@ image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima
 TinkerPop 3.1.4 (NOT OFFICIALLY RELEASED YET)
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
+* Fixed a bug in `StarGraph` around self-edges.
 * Fixed a potential leak of a `ReferenceCounted` resource in Gremlin Server.
 * Renamed distributions to make the prefix "apache-tinkerpop-" as opposed to just "apache-".
 * Fixed a problem (previously thought resolved on 3.1.3) causing Gremlin Server to lock up when parallel requests were submitted on the same session if those parallel requests included a script that blocked indefinitely.


[20/48] tinkerpop git commit: Merge remote-tracking branch 'origin/tp31'

Posted by sp...@apache.org.
Merge remote-tracking branch 'origin/tp31'


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/f11f6cc9
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/f11f6cc9
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/f11f6cc9

Branch: refs/heads/TINKERPOP-1278
Commit: f11f6cc962bdbb43350ebc23e44f46ab48c4387f
Parents: 6052303 ed418ad
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed Aug 17 07:10:55 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed Aug 17 07:10:55 2016 -0400

----------------------------------------------------------------------
 docs/src/index.asciidoc                    |  87 ++++++++++++++++++++++++
 docs/static/images/gremlin-gym-cropped.png | Bin 0 -> 32532 bytes
 pom.xml                                    |  22 ++++++
 3 files changed, 109 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f11f6cc9/pom.xml
----------------------------------------------------------------------


[39/48] tinkerpop git commit: TINKERPOP-1274: GraphSON 2.0.

Posted by sp...@apache.org.
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/data/grateful-dead-typed.json
----------------------------------------------------------------------
diff --git a/data/grateful-dead-typed.json b/data/grateful-dead-typed.json
index 9679502..3806d5e 100644
--- a/data/grateful-dead-typed.json
+++ b/data/grateful-dead-typed.json
@@ -1,257 +1,257 @@
 {"@class":"java.util.HashMap","id":1,"label":"song","inE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":3059,"outV":153,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":276,"outV":5,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3704,"outV":3,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":4383,"outV":62,"properties":{"@class":"java.util.HashMap","weight":1}}]]},"outE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":0,"inV":2,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1,"inV":3,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":2,"inV":4,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3,"inV":5,"properties":{"@class":"j
 ava.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":4,"inV":6,"properties":{"@class":"java.util.HashMap","weight":1}}]],"sungBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":7612,"inV":340}]],"writtenBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":7611,"inV":527}]]},"properties":{"@class":"java.util.HashMap","name":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",0],"value":"HEY BO DIDDLEY"}]],"songType":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",2],"value":"cover"}]],"performances":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",1],"value":5}]]}}
 {"@class":"java.util.HashMap","id":2,"label":"song","inE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":0,"outV":1,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":323,"outV":34,"properties":{"@class":"java.util.HashMap","weight":1}}]]},"outE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":6190,"inV":123,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":6191,"inV":50,"properties":{"@class":"java.util.HashMap","weight":1}}]],"sungBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":7666,"inV":525}]],"writtenBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":7665,"inV":525}]]},"properties":{"@class":"java.util.HashMap","name":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",3],"value":"IM A MAN"}]],"songType":["java.util.ArrayList",[{"@class":"j
 ava.util.HashMap","id":["java.lang.Long",5],"value":"cover"}]],"performances":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",4],"value":1}]]}}
-{"@class":"java.util.HashMap","id":3,"label":"song","inE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":1,"outV":1,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":2051,"outV":92,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":1412,"outV":83,"properties":{"@class":"java.util.HashMap","weight":6}},{"@class":"java.util.HashMap","id":6669,"outV":12,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1166,"outV":26,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":6286,"outV":49,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":910,"outV":91,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":526,"outV":120,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap"
 ,"id":273,"outV":5,"properties":{"@class":"java.util.HashMap","weight":40}},{"@class":"java.util.HashMap","id":2194,"outV":235,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1684,"outV":124,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3221,"outV":63,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1941,"outV":148,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":2712,"outV":13,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":6425,"outV":134,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5787,"outV":76,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5148,"outV":125,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":6692,"outV":141,"properties":{"@c
 lass":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":6310,"outV":123,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":6448,"outV":187,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":2225,"outV":226,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5042,"outV":209,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":4789,"outV":114,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":1464,"outV":81,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2232,"outV":215,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":4665,"outV":154,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2235,"outV":29,"properties":{"@class":"java.util.HashMap","weight":1
 63}},{"@class":"java.util.HashMap","id":6208,"outV":319,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":706,"outV":206,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":835,"outV":171,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5188,"outV":99,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1862,"outV":94,"properties":{"@class":"java.util.HashMap","weight":10}},{"@class":"java.util.HashMap","id":6343,"outV":21,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1735,"outV":82,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":4937,"outV":277,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3276,"outV":160,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id"
 :3149,"outV":104,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1358,"outV":130,"properties":{"@class":"java.util.HashMap","weight":18}},{"@class":"java.util.HashMap","id":4304,"outV":110,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1105,"outV":59,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":722,"outV":80,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":4182,"outV":54,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1499,"outV":164,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":2397,"outV":179,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":6623,"outV":127,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":351,"outV":178,"properties":{"@class
 ":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2018,"outV":149,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":7011,"outV":89,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5348,"outV":165,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2278,"outV":25,"properties":{"@class":"java.util.HashMap","weight":7}},{"@class":"java.util.HashMap","id":1255,"outV":27,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3048,"outV":153,"properties":{"@class":"java.util.HashMap","weight":13}},{"@class":"java.util.HashMap","id":5867,"outV":96,"properties":{"@class":"java.util.HashMap","weight":116}},{"@class":"java.util.HashMap","id":364,"outV":74,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":492,"outV":98,"properties":{"@class":"java.util.HashMap","weight":1}},{"@c
 lass":"java.util.HashMap","id":3948,"outV":138,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":4335,"outV":62,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3312,"outV":252,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5745,"outV":129,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":4596,"outV":85,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":5367,"outV":132,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":633,"outV":23,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":891,"outV":140,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5375,"outV":69,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":6143,"out
 V":289,"properties":{"@class":"java.util.HashMap","weight":3}}]]},"outE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":3712,"inV":27,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3713,"inV":110,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":3714,"inV":215,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":3715,"inV":127,"properties":{"@class":"java.util.HashMap","weight":10}},{"@class":"java.util.HashMap","id":3716,"inV":83,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":3717,"inV":103,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3718,"inV":68,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3719,"inV":134,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"
 java.util.HashMap","id":3720,"inV":25,"properties":{"@class":"java.util.HashMap","weight":10}},{"@class":"java.util.HashMap","id":3721,"inV":125,"properties":{"@class":"java.util.HashMap","weight":54}},{"@class":"java.util.HashMap","id":3722,"inV":130,"properties":{"@class":"java.util.HashMap","weight":26}},{"@class":"java.util.HashMap","id":3723,"inV":141,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3724,"inV":145,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3725,"inV":319,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":3726,"inV":12,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3727,"inV":160,"properties":{"@class":"java.util.HashMap","weight":37}},{"@class":"java.util.HashMap","id":3728,"inV":70,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3729,"inV":123,"pr
 operties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3730,"inV":129,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3731,"inV":30,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3732,"inV":148,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3733,"inV":211,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":3734,"inV":87,"properties":{"@class":"java.util.HashMap","weight":13}},{"@class":"java.util.HashMap","id":3735,"inV":164,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":3736,"inV":64,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3737,"inV":320,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3738,"inV":61,"properties":{"@class":"java.util.HashMap","weigh
 t":3}},{"@class":"java.util.HashMap","id":3739,"inV":210,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":3740,"inV":50,"properties":{"@class":"java.util.HashMap","weight":7}},{"@class":"java.util.HashMap","id":3741,"inV":128,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":3742,"inV":315,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3743,"inV":261,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3744,"inV":213,"properties":{"@class":"java.util.HashMap","weight":13}},{"@class":"java.util.HashMap","id":3745,"inV":72,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3746,"inV":38,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":3747,"inV":204,"properties":{"@class":"java.util.HashMap","weight":14}},{"@class":"java.util.HashMap","id":37
 48,"inV":62,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3749,"inV":150,"properties":{"@class":"java.util.HashMap","weight":8}},{"@class":"java.util.HashMap","id":3750,"inV":309,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3751,"inV":131,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3752,"inV":151,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3753,"inV":321,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3754,"inV":90,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3755,"inV":82,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3756,"inV":120,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3757,"inV":46,"properties":{"@class":"java.util.
 HashMap","weight":5}},{"@class":"java.util.HashMap","id":3758,"inV":157,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":3759,"inV":59,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3760,"inV":81,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3761,"inV":86,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":3762,"inV":140,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3763,"inV":201,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3764,"inV":214,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3765,"inV":185,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3766,"inV":216,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.Has
 hMap","id":3767,"inV":217,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3768,"inV":236,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":3769,"inV":193,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3770,"inV":79,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3771,"inV":84,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3772,"inV":23,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3773,"inV":31,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3774,"inV":240,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3775,"inV":292,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3776,"inV":9,"properties":{"@class":
 "java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3777,"inV":259,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3694,"inV":5,"properties":{"@class":"java.util.HashMap","weight":57}},{"@class":"java.util.HashMap","id":3695,"inV":114,"properties":{"@class":"java.util.HashMap","weight":30}},{"@class":"java.util.HashMap","id":3696,"inV":74,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3697,"inV":78,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":3698,"inV":10,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3699,"inV":26,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":3700,"inV":153,"properties":{"@class":"java.util.HashMap","weight":7}},{"@class":"java.util.HashMap","id":3701,"inV":4,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.
 util.HashMap","id":3702,"inV":317,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3703,"inV":13,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":3704,"inV":1,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3705,"inV":21,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3706,"inV":57,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3707,"inV":122,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3708,"inV":318,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3709,"inV":94,"properties":{"@class":"java.util.HashMap","weight":26}},{"@class":"java.util.HashMap","id":3710,"inV":96,"properties":{"@class":"java.util.HashMap","weight":7}},{"@class":"java.util.HashMap","id":3711,"inV":124,"properties":{"
 @class":"java.util.HashMap","weight":15}}]],"sungBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":7808,"inV":351}]],"writtenBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":7807,"inV":671}]]},"properties":{"@class":"java.util.HashMap","name":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",6],"value":"NOT FADE AWAY"}]],"songType":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",8],"value":"cover"}]],"performances":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",7],"value":531}]]}}
-{"@class":"java.util.HashMap","id":4,"label":"song","inE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":128,"outV":97,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1664,"outV":267,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2,"outV":1,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":4099,"outV":48,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1667,"outV":124,"properties":{"@class":"java.util.HashMap","weight":15}},{"@class":"java.util.HashMap","id":899,"outV":140,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1156,"outV":26,"properties":{"@class":"java.util.HashMap","weight":16}},{"@class":"java.util.HashMap","id":773,"outV":122,"properties":{"@class":"java.util.HashMap","weight":9}},{"@class":"java.util.Hash
 Map","id":6534,"outV":242,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":6664,"outV":12,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":1032,"outV":73,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5129,"outV":222,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5387,"outV":69,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5517,"outV":43,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5006,"outV":30,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":6030,"outV":204,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":2063,"outV":92,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":915,"outV":91,"properties":{"@
 class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":6940,"outV":84,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":2464,"outV":68,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5795,"outV":76,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3620,"outV":24,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":4772,"outV":114,"properties":{"@class":"java.util.HashMap","weight":25}},{"@class":"java.util.HashMap","id":2982,"outV":14,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":3367,"outV":184,"properties":{"@class":"java.util.HashMap","weight":6}},{"@class":"java.util.HashMap","id":2345,"outV":87,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":2861,"outV":101,"properties":{"@class":"java.util.HashMap","weight":6}}
 ,{"@class":"java.util.HashMap","id":1840,"outV":275,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5425,"outV":102,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":180,"outV":70,"properties":{"@class":"java.util.HashMap","weight":46}},{"@class":"java.util.HashMap","id":2613,"outV":158,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5562,"outV":162,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5434,"outV":217,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1469,"outV":81,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":446,"outV":38,"properties":{"@class":"java.util.HashMap","weight":7}},{"@class":"java.util.HashMap","id":2494,"outV":90,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":326
 6,"outV":160,"properties":{"@class":"java.util.HashMap","weight":10}},{"@class":"java.util.HashMap","id":326,"outV":34,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":6855,"outV":64,"properties":{"@class":"java.util.HashMap","weight":12}},{"@class":"java.util.HashMap","id":583,"outV":120,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":73,"outV":46,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":4425,"outV":212,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":4941,"outV":86,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":1613,"outV":210,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":6350,"outV":21,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3535,"outV":201,"properties":{"@class":"java
 .util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":980,"outV":11,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":5206,"outV":99,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1494,"outV":164,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":5847,"outV":61,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":6490,"outV":187,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2781,"outV":15,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":5600,"outV":42,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":353,"outV":74,"properties":{"@class":"java.util.HashMap","weight":6}},{"@class":"java.util.HashMap","id":5474,"outV":79,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java
 .util.HashMap","id":3811,"outV":88,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":1891,"outV":103,"properties":{"@class":"java.util.HashMap","weight":19}},{"@class":"java.util.HashMap","id":5989,"outV":50,"properties":{"@class":"java.util.HashMap","weight":12}},{"@class":"java.util.HashMap","id":4327,"outV":110,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":2538,"outV":57,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":3050,"outV":153,"properties":{"@class":"java.util.HashMap","weight":13}},{"@class":"java.util.HashMap","id":4970,"outV":236,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2283,"outV":25,"properties":{"@class":"java.util.HashMap","weight":9}},{"@class":"java.util.HashMap","id":236,"outV":145,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":6126,"outV":72,"
 properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5232,"outV":214,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":4594,"outV":85,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":4084,"outV":109,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1652,"outV":213,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":3701,"outV":3,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":5621,"outV":22,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":629,"outV":23,"properties":{"@class":"java.util.HashMap","weight":10}},{"@class":"java.util.HashMap","id":7029,"outV":89,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5238,"outV":32,"properties":{"@class":"java.util.HashMap"
 ,"weight":3}},{"@class":"java.util.HashMap","id":2684,"outV":13,"properties":{"@class":"java.util.HashMap","weight":9}},{"@class":"java.util.HashMap","id":3325,"outV":268,"properties":{"@class":"java.util.HashMap","weight":1}}]]},"outE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":5120,"inV":40,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":5121,"inV":33,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":5122,"inV":79,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5123,"inV":292,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5071,"inV":50,"properties":{"@class":"java.util.HashMap","weight":9}},{"@class":"java.util.HashMap","id":5072,"inV":12,"properties":{"@class":"java.util.HashMap","weight":26}},{"@class":"java.util.HashMap","id":5073,"inV":18,"properties"
 :{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":5074,"inV":24,"properties":{"@class":"java.util.HashMap","weight":9}},{"@class":"java.util.HashMap","id":5075,"inV":23,"properties":{"@class":"java.util.HashMap","weight":63}},{"@class":"java.util.HashMap","id":5076,"inV":13,"properties":{"@class":"java.util.HashMap","weight":12}},{"@class":"java.util.HashMap","id":5077,"inV":10,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":5078,"inV":11,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":5079,"inV":26,"properties":{"@class":"java.util.HashMap","weight":18}},{"@class":"java.util.HashMap","id":5080,"inV":22,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5081,"inV":16,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5082,"inV":49,"properties":{"@class":"java.util.HashMap","weight":1}},{"@cl
 ass":"java.util.HashMap","id":5083,"inV":25,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5084,"inV":51,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5085,"inV":15,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5086,"inV":112,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":5087,"inV":121,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5088,"inV":32,"properties":{"@class":"java.util.HashMap","weight":7}},{"@class":"java.util.HashMap","id":5089,"inV":68,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5090,"inV":120,"properties":{"@class":"java.util.HashMap","weight":77}},{"@class":"java.util.HashMap","id":5091,"inV":103,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5092,"inV":42,"pr
 operties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":5093,"inV":85,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":5094,"inV":76,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":5095,"inV":181,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5096,"inV":14,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5097,"inV":122,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5098,"inV":153,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":5099,"inV":96,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5100,"inV":82,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":5101,"inV":110,"properties":{"@class":"java.util.HashMap","weight"
 :1}},{"@class":"java.util.HashMap","id":5102,"inV":19,"properties":{"@class":"java.util.HashMap","weight":6}},{"@class":"java.util.HashMap","id":5103,"inV":129,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5104,"inV":84,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5105,"inV":88,"properties":{"@class":"java.util.HashMap","weight":9}},{"@class":"java.util.HashMap","id":5106,"inV":97,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5107,"inV":114,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5108,"inV":30,"properties":{"@class":"java.util.HashMap","weight":8}},{"@class":"java.util.HashMap","id":5109,"inV":31,"properties":{"@class":"java.util.HashMap","weight":8}},{"@class":"java.util.HashMap","id":5110,"inV":69,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":5111,"inV"
 :127,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5112,"inV":60,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5113,"inV":39,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5114,"inV":21,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5115,"inV":117,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5116,"inV":78,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5117,"inV":38,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5118,"inV":169,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5119,"inV":118,"properties":{"@class":"java.util.HashMap","weight":1}}]],"sungBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":7064,"inV":340}]],"writ
 tenBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":7063,"inV":339}]]},"properties":{"@class":"java.util.HashMap","name":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",9],"value":"BERTHA"}]],"songType":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",11],"value":"original"}]],"performances":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",10],"value":394}]]}}
-{"@class":"java.util.HashMap","id":5,"label":"song","inE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":962,"outV":67,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":194,"outV":70,"properties":{"@class":"java.util.HashMap","weight":8}},{"@class":"java.util.HashMap","id":3,"outV":1,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5446,"outV":231,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":6344,"outV":21,"properties":{"@class":"java.util.HashMap","weight":6}},{"@class":"java.util.HashMap","id":6666,"outV":12,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1738,"outV":82,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1867,"outV":94,"properties":{"@class":"java.util.HashMap","weight":15}},{"@class":"java.util.HashMap
 ","id":4300,"outV":110,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":847,"outV":171,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2832,"outV":101,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":6032,"outV":115,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1170,"outV":26,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5330,"outV":238,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1491,"outV":164,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":1429,"outV":83,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":3033,"outV":14,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":6298,"outV":49,"properties":{"@
 class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1373,"outV":130,"properties":{"@class":"java.util.HashMap","weight":11}},{"@class":"java.util.HashMap","id":4447,"outV":113,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5151,"outV":125,"properties":{"@class":"java.util.HashMap","weight":6}},{"@class":"java.util.HashMap","id":6431,"outV":134,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5343,"outV":165,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":1953,"outV":148,"properties":{"@class":"java.util.HashMap","weight":10}},{"@class":"java.util.HashMap","id":2274,"outV":25,"properties":{"@class":"java.util.HashMap","weight":8}},{"@class":"java.util.HashMap","id":1634,"outV":210,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":100,"outV":46,"properties":{"@class":"java.util.HashMap","weight"
 :1}},{"@class":"java.util.HashMap","id":933,"outV":91,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2021,"outV":149,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":6694,"outV":141,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":4009,"outV":225,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":682,"outV":219,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3694,"outV":3,"properties":{"@class":"java.util.HashMap","weight":57}},{"@class":"java.util.HashMap","id":4718,"outV":186,"properties":{"@class":"java.util.HashMap","weight":6}},{"@class":"java.util.HashMap","id":3055,"outV":153,"properties":{"@class":"java.util.HashMap","weight":9}},{"@class":"java.util.HashMap","id":2736,"outV":13,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id"
 :2480,"outV":68,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5426,"outV":102,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":6899,"outV":147,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5879,"outV":96,"properties":{"@class":"java.util.HashMap","weight":22}},{"@class":"java.util.HashMap","id":6201,"outV":319,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5370,"outV":132,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":2236,"outV":29,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":4604,"outV":85,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":700,"outV":206,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5759,"outV":129,"properties":{"@class
 ":"java.util.HashMap","weight":6}}]]},"outE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":273,"inV":3,"properties":{"@class":"java.util.HashMap","weight":40}},{"@class":"java.util.HashMap","id":274,"inV":26,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":275,"inV":114,"properties":{"@class":"java.util.HashMap","weight":40}},{"@class":"java.util.HashMap","id":276,"inV":1,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":277,"inV":74,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":278,"inV":122,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":279,"inV":133,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":280,"inV":83,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":281,"inV":153,"
 properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":282,"inV":159,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":283,"inV":13,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":284,"inV":25,"properties":{"@class":"java.util.HashMap","weight":19}},{"@class":"java.util.HashMap","id":285,"inV":96,"properties":{"@class":"java.util.HashMap","weight":10}},{"@class":"java.util.HashMap","id":286,"inV":160,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":287,"inV":32,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":288,"inV":120,"properties":{"@class":"java.util.HashMap","weight":16}},{"@class":"java.util.HashMap","id":289,"inV":50,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":290,"inV":116,"properties":{"@class":"java.util.HashMap","weight":1}}
 ,{"@class":"java.util.HashMap","id":291,"inV":127,"properties":{"@class":"java.util.HashMap","weight":6}},{"@class":"java.util.HashMap","id":292,"inV":65,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":293,"inV":130,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":294,"inV":125,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":295,"inV":70,"properties":{"@class":"java.util.HashMap","weight":13}},{"@class":"java.util.HashMap","id":296,"inV":134,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":297,"inV":161,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":298,"inV":162,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":299,"inV":124,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":300,"inV":38,"pro
 perties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":301,"inV":29,"properties":{"@class":"java.util.HashMap","weight":11}},{"@class":"java.util.HashMap","id":302,"inV":163,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":303,"inV":94,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":304,"inV":85,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":305,"inV":164,"properties":{"@class":"java.util.HashMap","weight":6}},{"@class":"java.util.HashMap","id":306,"inV":64,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":307,"inV":150,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":308,"inV":165,"properties":{"@class":"java.util.HashMap","weight":7}},{"@class":"java.util.HashMap","id":309,"inV":92,"properties":{"@class":"java.util.HashMap","weight":1}},{"@c
 lass":"java.util.HashMap","id":310,"inV":140,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":311,"inV":166,"properties":{"@class":"java.util.HashMap","weight":1}}]],"sungBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":7582,"inV":340}]],"writtenBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":7581,"inV":446}]]},"properties":{"@class":"java.util.HashMap","name":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",12],"value":"GOING DOWN THE ROAD FEELING BAD"}]],"songType":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",14],"value":"cover"}]],"performances":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",13],"value":293}]]}}
+{"@class":"java.util.HashMap","id":3,"label":"song","inE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":1,"outV":1,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":2051,"outV":92,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":1412,"outV":83,"properties":{"@class":"java.util.HashMap","weight":6}},{"@class":"java.util.HashMap","id":6669,"outV":12,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":526,"outV":120,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":910,"outV":91,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":1166,"outV":26,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":6286,"outV":49,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap"
 ,"id":273,"outV":5,"properties":{"@class":"java.util.HashMap","weight":40}},{"@class":"java.util.HashMap","id":2194,"outV":235,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1684,"outV":124,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1941,"outV":148,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":3221,"outV":63,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2712,"outV":13,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":6425,"outV":134,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5787,"outV":76,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5148,"outV":125,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":6692,"outV":141,"properties":{"@c
 lass":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":6310,"outV":123,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":6448,"outV":187,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":2225,"outV":226,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5042,"outV":209,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":4789,"outV":114,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":1464,"outV":81,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2232,"outV":215,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":4665,"outV":154,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2235,"outV":29,"properties":{"@class":"java.util.HashMap","weight":1
 63}},{"@class":"java.util.HashMap","id":6208,"outV":319,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":706,"outV":206,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":835,"outV":171,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5188,"outV":99,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1862,"outV":94,"properties":{"@class":"java.util.HashMap","weight":10}},{"@class":"java.util.HashMap","id":1735,"outV":82,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":6343,"outV":21,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":4937,"outV":277,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3276,"outV":160,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id"
 :3149,"outV":104,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1358,"outV":130,"properties":{"@class":"java.util.HashMap","weight":18}},{"@class":"java.util.HashMap","id":4304,"outV":110,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1105,"outV":59,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":722,"outV":80,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":4182,"outV":54,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1499,"outV":164,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":2397,"outV":179,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":351,"outV":178,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":6623,"outV":127,"properties":{"@class
 ":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":2018,"outV":149,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":7011,"outV":89,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5348,"outV":165,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2278,"outV":25,"properties":{"@class":"java.util.HashMap","weight":7}},{"@class":"java.util.HashMap","id":1255,"outV":27,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3048,"outV":153,"properties":{"@class":"java.util.HashMap","weight":13}},{"@class":"java.util.HashMap","id":5867,"outV":96,"properties":{"@class":"java.util.HashMap","weight":116}},{"@class":"java.util.HashMap","id":364,"outV":74,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":492,"outV":98,"properties":{"@class":"java.util.HashMap","weight":1}},{"@c
 lass":"java.util.HashMap","id":3948,"outV":138,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":4335,"outV":62,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3312,"outV":252,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5745,"outV":129,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":4596,"outV":85,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":5367,"outV":132,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":633,"outV":23,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":891,"outV":140,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5375,"outV":69,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":6143,"out
 V":289,"properties":{"@class":"java.util.HashMap","weight":3}}]]},"outE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":3712,"inV":27,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3713,"inV":110,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":3714,"inV":215,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":3715,"inV":127,"properties":{"@class":"java.util.HashMap","weight":10}},{"@class":"java.util.HashMap","id":3716,"inV":83,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":3717,"inV":103,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3718,"inV":68,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3719,"inV":134,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"
 java.util.HashMap","id":3720,"inV":25,"properties":{"@class":"java.util.HashMap","weight":10}},{"@class":"java.util.HashMap","id":3721,"inV":125,"properties":{"@class":"java.util.HashMap","weight":54}},{"@class":"java.util.HashMap","id":3722,"inV":130,"properties":{"@class":"java.util.HashMap","weight":26}},{"@class":"java.util.HashMap","id":3723,"inV":141,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3724,"inV":145,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3725,"inV":319,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":3726,"inV":12,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3727,"inV":160,"properties":{"@class":"java.util.HashMap","weight":37}},{"@class":"java.util.HashMap","id":3728,"inV":70,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3729,"inV":123,"pr
 operties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3730,"inV":129,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3731,"inV":30,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3732,"inV":148,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3733,"inV":211,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":3734,"inV":87,"properties":{"@class":"java.util.HashMap","weight":13}},{"@class":"java.util.HashMap","id":3735,"inV":164,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":3736,"inV":64,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3737,"inV":320,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3738,"inV":61,"properties":{"@class":"java.util.HashMap","weigh
 t":3}},{"@class":"java.util.HashMap","id":3739,"inV":210,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":3740,"inV":50,"properties":{"@class":"java.util.HashMap","weight":7}},{"@class":"java.util.HashMap","id":3741,"inV":128,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":3742,"inV":315,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3743,"inV":261,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3744,"inV":213,"properties":{"@class":"java.util.HashMap","weight":13}},{"@class":"java.util.HashMap","id":3745,"inV":72,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3746,"inV":38,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":3747,"inV":204,"properties":{"@class":"java.util.HashMap","weight":14}},{"@class":"java.util.HashMap","id":37
 48,"inV":62,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3749,"inV":150,"properties":{"@class":"java.util.HashMap","weight":8}},{"@class":"java.util.HashMap","id":3750,"inV":309,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3751,"inV":131,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3752,"inV":151,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3753,"inV":321,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3754,"inV":90,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3755,"inV":82,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3756,"inV":120,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3757,"inV":46,"properties":{"@class":"java.util.
 HashMap","weight":5}},{"@class":"java.util.HashMap","id":3758,"inV":157,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":3759,"inV":59,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3760,"inV":81,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3761,"inV":86,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":3762,"inV":140,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3763,"inV":201,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3764,"inV":214,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3765,"inV":185,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3766,"inV":216,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.Has
 hMap","id":3767,"inV":217,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3768,"inV":236,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":3769,"inV":193,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3770,"inV":79,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3771,"inV":84,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3772,"inV":23,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3773,"inV":31,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3774,"inV":240,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3775,"inV":292,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3776,"inV":9,"properties":{"@class":
 "java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3777,"inV":259,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3694,"inV":5,"properties":{"@class":"java.util.HashMap","weight":57}},{"@class":"java.util.HashMap","id":3695,"inV":114,"properties":{"@class":"java.util.HashMap","weight":30}},{"@class":"java.util.HashMap","id":3696,"inV":74,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3697,"inV":78,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":3698,"inV":10,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3699,"inV":26,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":3700,"inV":153,"properties":{"@class":"java.util.HashMap","weight":7}},{"@class":"java.util.HashMap","id":3701,"inV":4,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.
 util.HashMap","id":3702,"inV":317,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3703,"inV":13,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":3704,"inV":1,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3705,"inV":21,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3706,"inV":57,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3707,"inV":122,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3708,"inV":318,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3709,"inV":94,"properties":{"@class":"java.util.HashMap","weight":26}},{"@class":"java.util.HashMap","id":3710,"inV":96,"properties":{"@class":"java.util.HashMap","weight":7}},{"@class":"java.util.HashMap","id":3711,"inV":124,"properties":{"
 @class":"java.util.HashMap","weight":15}}]],"sungBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":7808,"inV":351}]],"writtenBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":7807,"inV":671}]]},"properties":{"@class":"java.util.HashMap","name":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",6],"value":"NOT FADE AWAY"}]],"songType":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",8],"value":"cover"}]],"performances":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",7],"value":531}]]}}
+{"@class":"java.util.HashMap","id":4,"label":"song","inE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":128,"outV":97,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1664,"outV":267,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2,"outV":1,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":899,"outV":140,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1667,"outV":124,"properties":{"@class":"java.util.HashMap","weight":15}},{"@class":"java.util.HashMap","id":4099,"outV":48,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1156,"outV":26,"properties":{"@class":"java.util.HashMap","weight":16}},{"@class":"java.util.HashMap","id":773,"outV":122,"properties":{"@class":"java.util.HashMap","weight":9}},{"@class":"java.util.Hash
 Map","id":6534,"outV":242,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1032,"outV":73,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":6664,"outV":12,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":5129,"outV":222,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5387,"outV":69,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5517,"outV":43,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5006,"outV":30,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":6030,"outV":204,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":2063,"outV":92,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":915,"outV":91,"properties":{"@
 class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":6940,"outV":84,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":2464,"outV":68,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5795,"outV":76,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3620,"outV":24,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":4772,"outV":114,"properties":{"@class":"java.util.HashMap","weight":25}},{"@class":"java.util.HashMap","id":2982,"outV":14,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":3367,"outV":184,"properties":{"@class":"java.util.HashMap","weight":6}},{"@class":"java.util.HashMap","id":2345,"outV":87,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":2861,"outV":101,"properties":{"@class":"java.util.HashMap","weight":6}}
 ,{"@class":"java.util.HashMap","id":1840,"outV":275,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5425,"outV":102,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":180,"outV":70,"properties":{"@class":"java.util.HashMap","weight":46}},{"@class":"java.util.HashMap","id":2613,"outV":158,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5434,"outV":217,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5562,"outV":162,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":1469,"outV":81,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":446,"outV":38,"properties":{"@class":"java.util.HashMap","weight":7}},{"@class":"java.util.HashMap","id":2494,"outV":90,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":326
 6,"outV":160,"properties":{"@class":"java.util.HashMap","weight":10}},{"@class":"java.util.HashMap","id":326,"outV":34,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":583,"outV":120,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":6855,"outV":64,"properties":{"@class":"java.util.HashMap","weight":12}},{"@class":"java.util.HashMap","id":73,"outV":46,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":4425,"outV":212,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1613,"outV":210,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":4941,"outV":86,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":6350,"outV":21,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3535,"outV":201,"properties":{"@class":"java
 .util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":980,"outV":11,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":1494,"outV":164,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":5206,"outV":99,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5847,"outV":61,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":6490,"outV":187,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2781,"outV":15,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":5600,"outV":42,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":353,"outV":74,"properties":{"@class":"java.util.HashMap","weight":6}},{"@class":"java.util.HashMap","id":5474,"outV":79,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java
 .util.HashMap","id":1891,"outV":103,"properties":{"@class":"java.util.HashMap","weight":19}},{"@class":"java.util.HashMap","id":3811,"outV":88,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5989,"outV":50,"properties":{"@class":"java.util.HashMap","weight":12}},{"@class":"java.util.HashMap","id":4327,"outV":110,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":2538,"outV":57,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":3050,"outV":153,"properties":{"@class":"java.util.HashMap","weight":13}},{"@class":"java.util.HashMap","id":4970,"outV":236,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2283,"outV":25,"properties":{"@class":"java.util.HashMap","weight":9}},{"@class":"java.util.HashMap","id":236,"outV":145,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":6126,"outV":72,"
 properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5232,"outV":214,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":4594,"outV":85,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1652,"outV":213,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":4084,"outV":109,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":629,"outV":23,"properties":{"@class":"java.util.HashMap","weight":10}},{"@class":"java.util.HashMap","id":3701,"outV":3,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":5621,"outV":22,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":7029,"outV":89,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5238,"outV":32,"properties":{"@class":"java.util.HashMap"
 ,"weight":3}},{"@class":"java.util.HashMap","id":2684,"outV":13,"properties":{"@class":"java.util.HashMap","weight":9}},{"@class":"java.util.HashMap","id":3325,"outV":268,"properties":{"@class":"java.util.HashMap","weight":1}}]]},"outE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":5120,"inV":40,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":5121,"inV":33,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":5122,"inV":79,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5123,"inV":292,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5071,"inV":50,"properties":{"@class":"java.util.HashMap","weight":9}},{"@class":"java.util.HashMap","id":5072,"inV":12,"properties":{"@class":"java.util.HashMap","weight":26}},{"@class":"java.util.HashMap","id":5073,"inV":18,"properties"
 :{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":5074,"inV":24,"properties":{"@class":"java.util.HashMap","weight":9}},{"@class":"java.util.HashMap","id":5075,"inV":23,"properties":{"@class":"java.util.HashMap","weight":63}},{"@class":"java.util.HashMap","id":5076,"inV":13,"properties":{"@class":"java.util.HashMap","weight":12}},{"@class":"java.util.HashMap","id":5077,"inV":10,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":5078,"inV":11,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":5079,"inV":26,"properties":{"@class":"java.util.HashMap","weight":18}},{"@class":"java.util.HashMap","id":5080,"inV":22,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5081,"inV":16,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5082,"inV":49,"properties":{"@class":"java.util.HashMap","weight":1}},{"@cl
 ass":"java.util.HashMap","id":5083,"inV":25,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5084,"inV":51,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5085,"inV":15,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5086,"inV":112,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":5087,"inV":121,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5088,"inV":32,"properties":{"@class":"java.util.HashMap","weight":7}},{"@class":"java.util.HashMap","id":5089,"inV":68,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5090,"inV":120,"properties":{"@class":"java.util.HashMap","weight":77}},{"@class":"java.util.HashMap","id":5091,"inV":103,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5092,"inV":42,"pr
 operties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":5093,"inV":85,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":5094,"inV":76,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":5095,"inV":181,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5096,"inV":14,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5097,"inV":122,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5098,"inV":153,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":5099,"inV":96,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5100,"inV":82,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":5101,"inV":110,"properties":{"@class":"java.util.HashMap","weight"
 :1}},{"@class":"java.util.HashMap","id":5102,"inV":19,"properties":{"@class":"java.util.HashMap","weight":6}},{"@class":"java.util.HashMap","id":5103,"inV":129,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5104,"inV":84,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5105,"inV":88,"properties":{"@class":"java.util.HashMap","weight":9}},{"@class":"java.util.HashMap","id":5106,"inV":97,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5107,"inV":114,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5108,"inV":30,"properties":{"@class":"java.util.HashMap","weight":8}},{"@class":"java.util.HashMap","id":5109,"inV":31,"properties":{"@class":"java.util.HashMap","weight":8}},{"@class":"java.util.HashMap","id":5110,"inV":69,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":5111,"inV"
 :127,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5112,"inV":60,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5113,"inV":39,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5114,"inV":21,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5115,"inV":117,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5116,"inV":78,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5117,"inV":38,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5118,"inV":169,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5119,"inV":118,"properties":{"@class":"java.util.HashMap","weight":1}}]],"sungBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":7064,"inV":340}]],"writ
 tenBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":7063,"inV":339}]]},"properties":{"@class":"java.util.HashMap","name":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",9],"value":"BERTHA"}]],"songType":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",11],"value":"original"}]],"performances":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",10],"value":394}]]}}
+{"@class":"java.util.HashMap","id":5,"label":"song","inE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":194,"outV":70,"properties":{"@class":"java.util.HashMap","weight":8}},{"@class":"java.util.HashMap","id":962,"outV":67,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":3,"outV":1,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5446,"outV":231,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":6344,"outV":21,"properties":{"@class":"java.util.HashMap","weight":6}},{"@class":"java.util.HashMap","id":1738,"outV":82,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":6666,"outV":12,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1867,"outV":94,"properties":{"@class":"java.util.HashMap","weight":15}},{"@class":"java.util.HashMap
 ","id":4300,"outV":110,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":847,"outV":171,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2832,"outV":101,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":6032,"outV":115,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1170,"outV":26,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5330,"outV":238,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1491,"outV":164,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":1429,"outV":83,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":3033,"outV":14,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":6298,"outV":49,"properties":{"@
 class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1373,"outV":130,"properties":{"@class":"java.util.HashMap","weight":11}},{"@class":"java.util.HashMap","id":4447,"outV":113,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5151,"outV":125,"properties":{"@class":"java.util.HashMap","weight":6}},{"@class":"java.util.HashMap","id":5343,"outV":165,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":6431,"outV":134,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":1953,"outV":148,"properties":{"@class":"java.util.HashMap","weight":10}},{"@class":"java.util.HashMap","id":1634,"outV":210,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2274,"outV":25,"properties":{"@class":"java.util.HashMap","weight":8}},{"@class":"java.util.HashMap","id":100,"outV":46,"properties":{"@class":"java.util.HashMap","weight"
 :1}},{"@class":"java.util.HashMap","id":933,"outV":91,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2021,"outV":149,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":6694,"outV":141,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":4009,"outV":225,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":682,"outV":219,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3694,"outV":3,"properties":{"@class":"java.util.HashMap","weight":57}},{"@class":"java.util.HashMap","id":4718,"outV":186,"properties":{"@class":"java.util.HashMap","weight":6}},{"@class":"java.util.HashMap","id":3055,"outV":153,"properties":{"@class":"java.util.HashMap","weight":9}},{"@class":"java.util.HashMap","id":2480,"outV":68,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id"
 :2736,"outV":13,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":5426,"outV":102,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":6899,"outV":147,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5879,"outV":96,"properties":{"@class":"java.util.HashMap","weight":22}},{"@class":"java.util.HashMap","id":6201,"outV":319,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5370,"outV":132,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":700,"outV":206,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2236,"outV":29,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":4604,"outV":85,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5759,"outV":129,"properties":{"@class
 ":"java.util.HashMap","weight":6}}]]},"outE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":273,"inV":3,"properties":{"@class":"java.util.HashMap","weight":40}},{"@class":"java.util.HashMap","id":274,"inV":26,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":275,"inV":114,"properties":{"@class":"java.util.HashMap","weight":40}},{"@class":"java.util.HashMap","id":276,"inV":1,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":277,"inV":74,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":278,"inV":122,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":279,"inV":133,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":280,"inV":83,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":281,"inV":153,"
 properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":282,"inV":159,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":283,"inV":13,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":284,"inV":25,"properties":{"@class":"java.util.HashMap","weight":19}},{"@class":"java.util.HashMap","id":285,"inV":96,"properties":{"@class":"java.util.HashMap","weight":10}},{"@class":"java.util.HashMap","id":286,"inV":160,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":287,"inV":32,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":288,"inV":120,"properties":{"@class":"java.util.HashMap","weight":16}},{"@class":"java.util.HashMap","id":289,"inV":50,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":290,"inV":116,"properties":{"@class":"java.util.HashMap","weight":1}}
 ,{"@class":"java.util.HashMap","id":291,"inV":127,"properties":{"@class":"java.util.HashMap","weight":6}},{"@class":"java.util.HashMap","id":292,"inV":65,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":293,"inV":130,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":294,"inV":125,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":295,"inV":70,"properties":{"@class":"java.util.HashMap","weight":13}},{"@class":"java.util.HashMap","id":296,"inV":134,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":297,"inV":161,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":298,"inV":162,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":299,"inV":124,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":300,"inV":38,"pro
 perties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":301,"inV":29,"properties":{"@class":"java.util.HashMap","weight":11}},{"@class":"java.util.HashMap","id":302,"inV":163,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":303,"inV":94,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":304,"inV":85,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":305,"inV":164,"properties":{"@class":"java.util.HashMap","weight":6}},{"@class":"java.util.HashMap","id":306,"inV":64,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":307,"inV":150,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":308,"inV":165,"properties":{"@class":"java.util.HashMap","weight":7}},{"@class":"java.util.HashMap","id":309,"inV":92,"properties":{"@class":"java.util.HashMap","weight":1}},{"@c
 lass":"java.util.HashMap","id":310,"inV":140,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":311,"inV":166,"properties":{"@class":"java.util.HashMap","weight":1}}]],"sungBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":7582,"inV":340}]],"writtenBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":7581,"inV":446}]]},"properties":{"@class":"java.util.HashMap","name":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",12],"value":"GOING DOWN THE ROAD FEELING BAD"}]],"songType":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",14],"value":"cover"}]],"performances":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",13],"value":293}]]}}
 {"@class":"java.util.HashMap","id":6,"label":"song","inE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":4,"outV":1,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2023,"outV":282,"properties":{"@class":"java.util.HashMap","weight":1}}]]},"outE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":2406,"inV":293,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2407,"inV":96,"properties":{"@class":"java.util.HashMap","weight":1}}]],"sungBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":7782,"inV":351}]],"writtenBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":7781,"inV":527}]]},"properties":{"@class":"java.util.HashMap","name":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",15],"value":"MONA"}]],"songType":["java.util.ArrayList",[{"@class":"ja
 va.util.HashMap","id":["java.lang.Long",17],"value":"cover"}]],"performances":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",16],"value":1}]]}}
 {"@class":"java.util.HashMap","id":7,"label":"song","inE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":2607,"outV":295,"properties":{"@class":"java.util.HashMap","weight":1}}]]},"outE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":5,"inV":8,"properties":{"@class":"java.util.HashMap","weight":1}}]]},"properties":{"@class":"java.util.HashMap","name":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",18],"value":"WHERE HAVE THE HEROES GONE"}]],"songType":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",20],"value":""}]],"performances":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",19],"value":0}]]}}
 {"@class":"java.util.HashMap","id":8,"label":"song","inE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":4705,"outV":111,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5,"outV":7,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5901,"outV":96,"properties":{"@class":"java.util.HashMap","weight":1}}]]},"outE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":2976,"inV":302,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2977,"inV":96,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2978,"inV":72,"properties":{"@class":"java.util.HashMap","weight":1}}]],"sungBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":7814,"inV":351}]],"writtenBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":7813,
 "inV":674}]]},"properties":{"@class":"java.util.HashMap","name":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",21],"value":"OH BOY"}]],"songType":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",23],"value":"cover"}]],"performances":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",22],"value":2}]]}}
-{"@class":"java.util.HashMap","id":9,"label":"song","inE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":3776,"outV":3,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":65,"outV":46,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":1923,"outV":103,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":5956,"outV":50,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3077,"outV":153,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5832,"outV":76,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1161,"outV":26,"properties":{"@class":"java.util.HashMap","weight":8}},{"@class":"java.util.HashMap","id":6667,"outV":12,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.Hash
 Map","id":2699,"outV":13,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":6539,"outV":55,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2578,"outV":57,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":787,"outV":122,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":3542,"outV":201,"

<TRUNCATED>

[41/48] tinkerpop git commit: fixed a bug in PropertiesTest which assumed Long ids. CTR.

Posted by sp...@apache.org.
fixed a bug in PropertiesTest which assumed Long ids. CTR.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/5fcaeef5
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/5fcaeef5
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/5fcaeef5

Branch: refs/heads/TINKERPOP-1278
Commit: 5fcaeef54f6474ef994a58e9f2ba348256c7851c
Parents: ed418ad
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Mon Aug 22 10:06:29 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Mon Aug 22 10:06:29 2016 -0600

----------------------------------------------------------------------
 CHANGELOG.asciidoc                                             | 1 +
 .../gremlin/process/traversal/step/map/PropertiesTest.java     | 6 ++++--
 2 files changed, 5 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/5fcaeef5/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 201d1ae..afb2a7f 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -26,6 +26,7 @@ image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima
 TinkerPop 3.1.4 (NOT OFFICIALLY RELEASED YET)
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
+* Fixed a bug in `PropertiesTest` which assumed long id values.
 * Fixed a bug in `StarGraph` around self-edges.
 * Fixed a potential leak of a `ReferenceCounted` resource in Gremlin Server.
 * Renamed distributions to make the prefix "apache-tinkerpop-" as opposed to just "apache-".

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/5fcaeef5/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/PropertiesTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/PropertiesTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/PropertiesTest.java
index a886b19..95f57a6 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/PropertiesTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/PropertiesTest.java
@@ -100,8 +100,10 @@ public abstract class PropertiesTest extends AbstractGremlinProcessTest {
             ids.add(vertexProperty.id());
             assertEquals("name", vertexProperty.key());
             assertEquals(convertToVertex(graph, vertexProperty.value()).values("name").next(), vertexProperty.value());
-            // compare the ids as longs. assumes modern graph uses numeric ids only (long/integer).
-            assertEquals(Long.valueOf(convertToVertex(graph, vertexProperty.value()).properties("name").next().id().toString()), Long.valueOf(vertexProperty.id().toString()));
+            assertEquals(convertToVertex(graph, vertexProperty.value()).value("name"), vertexProperty.value());
+            assertEquals(convertToVertex(graph, vertexProperty.value()).properties("name").next().id(), vertexProperty.id());
+            assertEquals(convertToVertex(graph, vertexProperty.value()).property("name").id(), vertexProperty.id());
+            assertEquals(convertToVertexId(vertexProperty.value()), vertexProperty.element().id());
         }
         assertEquals(4, counter);
         assertEquals(1, keys.size());


[12/48] tinkerpop git commit: Merge branch 'TINKERPOP-1397' of https://github.com/dalaro/incubator-tinkerpop

Posted by sp...@apache.org.
Merge branch 'TINKERPOP-1397' of https://github.com/dalaro/incubator-tinkerpop


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/9f74b714
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/9f74b714
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/9f74b714

Branch: refs/heads/TINKERPOP-1278
Commit: 9f74b7147a3287b57e0df93f30f93f10cd94de9f
Parents: bf225b8 b4aaa69
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Fri Aug 12 08:14:30 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Fri Aug 12 08:14:30 2016 -0600

----------------------------------------------------------------------
 .../structure/util/star/StarGraphTest.java      | 34 ++++++++++++++++++++
 1 file changed, 34 insertions(+)
----------------------------------------------------------------------



[43/48] tinkerpop git commit: fixed a bug in PropertiesStep around Long ID assumptions. CTR.

Posted by sp...@apache.org.
fixed a bug in PropertiesStep around Long ID assumptions. CTR.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/e50f7167
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/e50f7167
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/e50f7167

Branch: refs/heads/TINKERPOP-1278
Commit: e50f7167e1d6374d4eaa7eb2ef352aabf4e54405
Parents: 93ee182
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Mon Aug 22 10:30:27 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Mon Aug 22 10:30:27 2016 -0600

----------------------------------------------------------------------
 .../gremlin/process/traversal/step/map/PropertiesTest.java         | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/e50f7167/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/PropertiesTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/PropertiesTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/PropertiesTest.java
index 95f57a6..9cc08b1 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/PropertiesTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/PropertiesTest.java
@@ -103,7 +103,7 @@ public abstract class PropertiesTest extends AbstractGremlinProcessTest {
             assertEquals(convertToVertex(graph, vertexProperty.value()).value("name"), vertexProperty.value());
             assertEquals(convertToVertex(graph, vertexProperty.value()).properties("name").next().id(), vertexProperty.id());
             assertEquals(convertToVertex(graph, vertexProperty.value()).property("name").id(), vertexProperty.id());
-            assertEquals(convertToVertexId(vertexProperty.value()), vertexProperty.element().id());
+            // assertEquals(convertToVertexId(vertexProperty.value()), vertexProperty.element().id());
         }
         assertEquals(4, counter);
         assertEquals(1, keys.size());


[28/48] tinkerpop git commit: TINKERPOP-1274: GraphSON 2.0.

Posted by sp...@apache.org.
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/grateful-dead-v2d0-typed.json
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/grateful-dead-v2d0-typed.json b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/grateful-dead-v2d0-typed.json
new file mode 100644
index 0000000..3b24d37
--- /dev/null
+++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/grateful-dead-v2d0-typed.json
@@ -0,0 +1,808 @@
+{"id":{"@type":"gremlin:int32","@value":1},"label":"song","inE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":3059},"outV":{"@type":"gremlin:int32","@value":153},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":276},"outV":{"@type":"gremlin:int32","@value":5},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3704},"outV":{"@type":"gremlin:int32","@value":3},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":4383},"outV":{"@type":"gremlin:int32","@value":62},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}]},"outE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":0},"inV":{"@type":"gremlin:int32","@value":2},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1},"inV":{"@type":"gremlin:int32","@value":3},"properties":{"weight":{"@type":"gremlin:int32","@
 value":2}}},{"id":{"@type":"gremlin:int32","@value":2},"inV":{"@type":"gremlin:int32","@value":4},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3},"inV":{"@type":"gremlin:int32","@value":5},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4},"inV":{"@type":"gremlin:int32","@value":6},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}],"sungBy":[{"id":{"@type":"gremlin:int32","@value":7612},"inV":{"@type":"gremlin:int32","@value":340}}],"writtenBy":[{"id":{"@type":"gremlin:int32","@value":7611},"inV":{"@type":"gremlin:int32","@value":527}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":0},"value":"HEY BO DIDDLEY"}],"songType":[{"id":{"@type":"gremlin:int64","@value":2},"value":"cover"}],"performances":[{"id":{"@type":"gremlin:int64","@value":1},"value":{"@type":"gremlin:int32","@value":5}}]}}
+{"id":{"@type":"gremlin:int32","@value":2},"label":"song","inE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":0},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":323},"outV":{"@type":"gremlin:int32","@value":34},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}]},"outE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":6190},"inV":{"@type":"gremlin:int32","@value":123},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":6191},"inV":{"@type":"gremlin:int32","@value":50},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}],"sungBy":[{"id":{"@type":"gremlin:int32","@value":7666},"inV":{"@type":"gremlin:int32","@value":525}}],"writtenBy":[{"id":{"@type":"gremlin:int32","@value":7665},"inV":{"@type":"gremlin:int32","@value":525}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":3},"value":"IM 
 A MAN"}],"songType":[{"id":{"@type":"gremlin:int64","@value":5},"value":"cover"}],"performances":[{"id":{"@type":"gremlin:int64","@value":4},"value":{"@type":"gremlin:int32","@value":1}}]}}
+{"id":{"@type":"gremlin:int32","@value":3},"label":"song","inE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":1},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":2051},"outV":{"@type":"gremlin:int32","@value":92},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":1412},"outV":{"@type":"gremlin:int32","@value":83},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}},{"id":{"@type":"gremlin:int32","@value":6669},"outV":{"@type":"gremlin:int32","@value":12},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":526},"outV":{"@type":"gremlin:int32","@value":120},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":910},"outV":{"@type":"gremlin:int32","@value":91},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id"
 :{"@type":"gremlin:int32","@value":1166},"outV":{"@type":"gremlin:int32","@value":26},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":6286},"outV":{"@type":"gremlin:int32","@value":49},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":273},"outV":{"@type":"gremlin:int32","@value":5},"properties":{"weight":{"@type":"gremlin:int32","@value":40}}},{"id":{"@type":"gremlin:int32","@value":2194},"outV":{"@type":"gremlin:int32","@value":235},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1684},"outV":{"@type":"gremlin:int32","@value":124},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1941},"outV":{"@type":"gremlin:int32","@value":148},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":3221},"outV":{"@type":"gremlin:int32","@va
 lue":63},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2712},"outV":{"@type":"gremlin:int32","@value":13},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":6425},"outV":{"@type":"gremlin:int32","@value":134},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5787},"outV":{"@type":"gremlin:int32","@value":76},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5148},"outV":{"@type":"gremlin:int32","@value":125},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":6692},"outV":{"@type":"gremlin:int32","@value":141},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":6310},"outV":{"@type":"gremlin:int32","@value":123},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id
 ":{"@type":"gremlin:int32","@value":6448},"outV":{"@type":"gremlin:int32","@value":187},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":2225},"outV":{"@type":"gremlin:int32","@value":226},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5042},"outV":{"@type":"gremlin:int32","@value":209},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4789},"outV":{"@type":"gremlin:int32","@value":114},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":1464},"outV":{"@type":"gremlin:int32","@value":81},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2232},"outV":{"@type":"gremlin:int32","@value":215},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4665},"outV":{"@type":"gremlin:int32",
 "@value":154},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2235},"outV":{"@type":"gremlin:int32","@value":29},"properties":{"weight":{"@type":"gremlin:int32","@value":163}}},{"id":{"@type":"gremlin:int32","@value":6208},"outV":{"@type":"gremlin:int32","@value":319},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":706},"outV":{"@type":"gremlin:int32","@value":206},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":835},"outV":{"@type":"gremlin:int32","@value":171},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5188},"outV":{"@type":"gremlin:int32","@value":99},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1862},"outV":{"@type":"gremlin:int32","@value":94},"properties":{"weight":{"@type":"gremlin:int32","@value":10}}}
 ,{"id":{"@type":"gremlin:int32","@value":1735},"outV":{"@type":"gremlin:int32","@value":82},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":6343},"outV":{"@type":"gremlin:int32","@value":21},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4937},"outV":{"@type":"gremlin:int32","@value":277},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3276},"outV":{"@type":"gremlin:int32","@value":160},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3149},"outV":{"@type":"gremlin:int32","@value":104},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1358},"outV":{"@type":"gremlin:int32","@value":130},"properties":{"weight":{"@type":"gremlin:int32","@value":18}}},{"id":{"@type":"gremlin:int32","@value":4304},"outV":{"@type":"gremlin:in
 t32","@value":110},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1105},"outV":{"@type":"gremlin:int32","@value":59},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":722},"outV":{"@type":"gremlin:int32","@value":80},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4182},"outV":{"@type":"gremlin:int32","@value":54},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1499},"outV":{"@type":"gremlin:int32","@value":164},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":2397},"outV":{"@type":"gremlin:int32","@value":179},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":351},"outV":{"@type":"gremlin:int32","@value":178},"properties":{"weight":{"@type":"gremlin:int32","@value":1}
 }},{"id":{"@type":"gremlin:int32","@value":6623},"outV":{"@type":"gremlin:int32","@value":127},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":2018},"outV":{"@type":"gremlin:int32","@value":149},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":7011},"outV":{"@type":"gremlin:int32","@value":89},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5348},"outV":{"@type":"gremlin:int32","@value":165},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2278},"outV":{"@type":"gremlin:int32","@value":25},"properties":{"weight":{"@type":"gremlin:int32","@value":7}}},{"id":{"@type":"gremlin:int32","@value":1255},"outV":{"@type":"gremlin:int32","@value":27},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3048},"outV":{"@type":"gremlin:in
 t32","@value":153},"properties":{"weight":{"@type":"gremlin:int32","@value":13}}},{"id":{"@type":"gremlin:int32","@value":5867},"outV":{"@type":"gremlin:int32","@value":96},"properties":{"weight":{"@type":"gremlin:int32","@value":116}}},{"id":{"@type":"gremlin:int32","@value":364},"outV":{"@type":"gremlin:int32","@value":74},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":492},"outV":{"@type":"gremlin:int32","@value":98},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3948},"outV":{"@type":"gremlin:int32","@value":138},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":4335},"outV":{"@type":"gremlin:int32","@value":62},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3312},"outV":{"@type":"gremlin:int32","@value":252},"properties":{"weight":{"@type":"gremlin:int32","@value":
 1}}},{"id":{"@type":"gremlin:int32","@value":5745},"outV":{"@type":"gremlin:int32","@value":129},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4596},"outV":{"@type":"gremlin:int32","@value":85},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":5367},"outV":{"@type":"gremlin:int32","@value":132},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":633},"outV":{"@type":"gremlin:int32","@value":23},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":891},"outV":{"@type":"gremlin:int32","@value":140},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5375},"outV":{"@type":"gremlin:int32","@value":69},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":6143},"outV":{"@type":"gremlin:in
 t32","@value":289},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}}]},"outE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":3712},"inV":{"@type":"gremlin:int32","@value":27},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3713},"inV":{"@type":"gremlin:int32","@value":110},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":3714},"inV":{"@type":"gremlin:int32","@value":215},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":3715},"inV":{"@type":"gremlin:int32","@value":127},"properties":{"weight":{"@type":"gremlin:int32","@value":10}}},{"id":{"@type":"gremlin:int32","@value":3716},"inV":{"@type":"gremlin:int32","@value":83},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3717},"inV":{"@type":"gremlin:int32","@value":103},"properties":{"weight":{"@type":"grem
 lin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3718},"inV":{"@type":"gremlin:int32","@value":68},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3719},"inV":{"@type":"gremlin:int32","@value":134},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3720},"inV":{"@type":"gremlin:int32","@value":25},"properties":{"weight":{"@type":"gremlin:int32","@value":10}}},{"id":{"@type":"gremlin:int32","@value":3721},"inV":{"@type":"gremlin:int32","@value":125},"properties":{"weight":{"@type":"gremlin:int32","@value":54}}},{"id":{"@type":"gremlin:int32","@value":3722},"inV":{"@type":"gremlin:int32","@value":130},"properties":{"weight":{"@type":"gremlin:int32","@value":26}}},{"id":{"@type":"gremlin:int32","@value":3723},"inV":{"@type":"gremlin:int32","@value":141},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3724},"inV":{
 "@type":"gremlin:int32","@value":145},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3725},"inV":{"@type":"gremlin:int32","@value":319},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3726},"inV":{"@type":"gremlin:int32","@value":12},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3727},"inV":{"@type":"gremlin:int32","@value":160},"properties":{"weight":{"@type":"gremlin:int32","@value":37}}},{"id":{"@type":"gremlin:int32","@value":3728},"inV":{"@type":"gremlin:int32","@value":70},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3729},"inV":{"@type":"gremlin:int32","@value":123},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3730},"inV":{"@type":"gremlin:int32","@value":129},"properties":{"weight":{"@type":"gremlin:i
 nt32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3731},"inV":{"@type":"gremlin:int32","@value":30},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3732},"inV":{"@type":"gremlin:int32","@value":148},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3733},"inV":{"@type":"gremlin:int32","@value":211},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3734},"inV":{"@type":"gremlin:int32","@value":87},"properties":{"weight":{"@type":"gremlin:int32","@value":13}}},{"id":{"@type":"gremlin:int32","@value":3735},"inV":{"@type":"gremlin:int32","@value":164},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":3736},"inV":{"@type":"gremlin:int32","@value":64},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3737},"inV":{"@type":
 "gremlin:int32","@value":320},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3738},"inV":{"@type":"gremlin:int32","@value":61},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3739},"inV":{"@type":"gremlin:int32","@value":210},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3740},"inV":{"@type":"gremlin:int32","@value":50},"properties":{"weight":{"@type":"gremlin:int32","@value":7}}},{"id":{"@type":"gremlin:int32","@value":3741},"inV":{"@type":"gremlin:int32","@value":128},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3742},"inV":{"@type":"gremlin:int32","@value":315},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3743},"inV":{"@type":"gremlin:int32","@value":261},"properties":{"weight":{"@type":"gremlin:int32","@v
 alue":1}}},{"id":{"@type":"gremlin:int32","@value":3744},"inV":{"@type":"gremlin:int32","@value":213},"properties":{"weight":{"@type":"gremlin:int32","@value":13}}},{"id":{"@type":"gremlin:int32","@value":3745},"inV":{"@type":"gremlin:int32","@value":72},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3746},"inV":{"@type":"gremlin:int32","@value":38},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":3747},"inV":{"@type":"gremlin:int32","@value":204},"properties":{"weight":{"@type":"gremlin:int32","@value":14}}},{"id":{"@type":"gremlin:int32","@value":3748},"inV":{"@type":"gremlin:int32","@value":62},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3749},"inV":{"@type":"gremlin:int32","@value":150},"properties":{"weight":{"@type":"gremlin:int32","@value":8}}},{"id":{"@type":"gremlin:int32","@value":3750},"inV":{"@type":"gremlin
 :int32","@value":309},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3751},"inV":{"@type":"gremlin:int32","@value":131},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3752},"inV":{"@type":"gremlin:int32","@value":151},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3753},"inV":{"@type":"gremlin:int32","@value":321},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3754},"inV":{"@type":"gremlin:int32","@value":90},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3755},"inV":{"@type":"gremlin:int32","@value":82},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3756},"inV":{"@type":"gremlin:int32","@value":120},"properties":{"weight":{"@type":"gremlin:int32","@value":1}
 }},{"id":{"@type":"gremlin:int32","@value":3757},"inV":{"@type":"gremlin:int32","@value":46},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":3758},"inV":{"@type":"gremlin:int32","@value":157},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":3759},"inV":{"@type":"gremlin:int32","@value":59},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3760},"inV":{"@type":"gremlin:int32","@value":81},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3761},"inV":{"@type":"gremlin:int32","@value":86},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":3762},"inV":{"@type":"gremlin:int32","@value":140},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3763},"inV":{"@type":"gremlin:int32","@v
 alue":201},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3764},"inV":{"@type":"gremlin:int32","@value":214},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3765},"inV":{"@type":"gremlin:int32","@value":185},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3766},"inV":{"@type":"gremlin:int32","@value":216},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3767},"inV":{"@type":"gremlin:int32","@value":217},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3768},"inV":{"@type":"gremlin:int32","@value":236},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":3769},"inV":{"@type":"gremlin:int32","@value":193},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":
 {"@type":"gremlin:int32","@value":3770},"inV":{"@type":"gremlin:int32","@value":79},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3771},"inV":{"@type":"gremlin:int32","@value":84},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3772},"inV":{"@type":"gremlin:int32","@value":23},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3773},"inV":{"@type":"gremlin:int32","@value":31},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3774},"inV":{"@type":"gremlin:int32","@value":240},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3775},"inV":{"@type":"gremlin:int32","@value":292},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3776},"inV":{"@type":"gremlin:int32","@value":9},
 "properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3777},"inV":{"@type":"gremlin:int32","@value":259},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3694},"inV":{"@type":"gremlin:int32","@value":5},"properties":{"weight":{"@type":"gremlin:int32","@value":57}}},{"id":{"@type":"gremlin:int32","@value":3695},"inV":{"@type":"gremlin:int32","@value":114},"properties":{"weight":{"@type":"gremlin:int32","@value":30}}},{"id":{"@type":"gremlin:int32","@value":3696},"inV":{"@type":"gremlin:int32","@value":74},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3697},"inV":{"@type":"gremlin:int32","@value":78},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3698},"inV":{"@type":"gremlin:int32","@value":10},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"grem
 lin:int32","@value":3699},"inV":{"@type":"gremlin:int32","@value":26},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":3700},"inV":{"@type":"gremlin:int32","@value":153},"properties":{"weight":{"@type":"gremlin:int32","@value":7}}},{"id":{"@type":"gremlin:int32","@value":3701},"inV":{"@type":"gremlin:int32","@value":4},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":3702},"inV":{"@type":"gremlin:int32","@value":317},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3703},"inV":{"@type":"gremlin:int32","@value":13},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":3704},"inV":{"@type":"gremlin:int32","@value":1},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3705},"inV":{"@type":"gremlin:int32","@value":21},"properties":{"
 weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3706},"inV":{"@type":"gremlin:int32","@value":57},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3707},"inV":{"@type":"gremlin:int32","@value":122},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3708},"inV":{"@type":"gremlin:int32","@value":318},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3709},"inV":{"@type":"gremlin:int32","@value":94},"properties":{"weight":{"@type":"gremlin:int32","@value":26}}},{"id":{"@type":"gremlin:int32","@value":3710},"inV":{"@type":"gremlin:int32","@value":96},"properties":{"weight":{"@type":"gremlin:int32","@value":7}}},{"id":{"@type":"gremlin:int32","@value":3711},"inV":{"@type":"gremlin:int32","@value":124},"properties":{"weight":{"@type":"gremlin:int32","@value":15}}}],"sungBy":[{"id":{"@type":"gremli
 n:int32","@value":7808},"inV":{"@type":"gremlin:int32","@value":351}}],"writtenBy":[{"id":{"@type":"gremlin:int32","@value":7807},"inV":{"@type":"gremlin:int32","@value":671}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":6},"value":"NOT FADE AWAY"}],"songType":[{"id":{"@type":"gremlin:int64","@value":8},"value":"cover"}],"performances":[{"id":{"@type":"gremlin:int64","@value":7},"value":{"@type":"gremlin:int32","@value":531}}]}}
+{"id":{"@type":"gremlin:int32","@value":4},"label":"song","inE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":128},"outV":{"@type":"gremlin:int32","@value":97},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1664},"outV":{"@type":"gremlin:int32","@value":267},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":899},"outV":{"@type":"gremlin:int32","@value":140},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1667},"outV":{"@type":"gremlin:int32","@value":124},"properties":{"weight":{"@type":"gremlin:int32","@value":15}}},{"id":{"@type":"gremlin:int32","@value":4099},"outV":{"@type":"gremlin:int32","@value":48},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"
 id":{"@type":"gremlin:int32","@value":1156},"outV":{"@type":"gremlin:int32","@value":26},"properties":{"weight":{"@type":"gremlin:int32","@value":16}}},{"id":{"@type":"gremlin:int32","@value":773},"outV":{"@type":"gremlin:int32","@value":122},"properties":{"weight":{"@type":"gremlin:int32","@value":9}}},{"id":{"@type":"gremlin:int32","@value":6534},"outV":{"@type":"gremlin:int32","@value":242},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1032},"outV":{"@type":"gremlin:int32","@value":73},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":6664},"outV":{"@type":"gremlin:int32","@value":12},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":5129},"outV":{"@type":"gremlin:int32","@value":222},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5387},"outV":{"@type":"gremlin:int32",
 "@value":69},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5517},"outV":{"@type":"gremlin:int32","@value":43},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5006},"outV":{"@type":"gremlin:int32","@value":30},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":6030},"outV":{"@type":"gremlin:int32","@value":204},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":2063},"outV":{"@type":"gremlin:int32","@value":92},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":915},"outV":{"@type":"gremlin:int32","@value":91},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":6940},"outV":{"@type":"gremlin:int32","@value":84},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id
 ":{"@type":"gremlin:int32","@value":2464},"outV":{"@type":"gremlin:int32","@value":68},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5795},"outV":{"@type":"gremlin:int32","@value":76},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3620},"outV":{"@type":"gremlin:int32","@value":24},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":4772},"outV":{"@type":"gremlin:int32","@value":114},"properties":{"weight":{"@type":"gremlin:int32","@value":25}}},{"id":{"@type":"gremlin:int32","@value":2982},"outV":{"@type":"gremlin:int32","@value":14},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3367},"outV":{"@type":"gremlin:int32","@value":184},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}},{"id":{"@type":"gremlin:int32","@value":2345},"outV":{"@type":"gremlin:int32","@
 value":87},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":2861},"outV":{"@type":"gremlin:int32","@value":101},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}},{"id":{"@type":"gremlin:int32","@value":1840},"outV":{"@type":"gremlin:int32","@value":275},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5425},"outV":{"@type":"gremlin:int32","@value":102},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":180},"outV":{"@type":"gremlin:int32","@value":70},"properties":{"weight":{"@type":"gremlin:int32","@value":46}}},{"id":{"@type":"gremlin:int32","@value":2613},"outV":{"@type":"gremlin:int32","@value":158},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5434},"outV":{"@type":"gremlin:int32","@value":217},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{
 "id":{"@type":"gremlin:int32","@value":5562},"outV":{"@type":"gremlin:int32","@value":162},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":1469},"outV":{"@type":"gremlin:int32","@value":81},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":446},"outV":{"@type":"gremlin:int32","@value":38},"properties":{"weight":{"@type":"gremlin:int32","@value":7}}},{"id":{"@type":"gremlin:int32","@value":2494},"outV":{"@type":"gremlin:int32","@value":90},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3266},"outV":{"@type":"gremlin:int32","@value":160},"properties":{"weight":{"@type":"gremlin:int32","@value":10}}},{"id":{"@type":"gremlin:int32","@value":326},"outV":{"@type":"gremlin:int32","@value":34},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":583},"outV":{"@type":"gremlin:int32","@
 value":120},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":6855},"outV":{"@type":"gremlin:int32","@value":64},"properties":{"weight":{"@type":"gremlin:int32","@value":12}}},{"id":{"@type":"gremlin:int32","@value":73},"outV":{"@type":"gremlin:int32","@value":46},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":4425},"outV":{"@type":"gremlin:int32","@value":212},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1613},"outV":{"@type":"gremlin:int32","@value":210},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":4941},"outV":{"@type":"gremlin:int32","@value":86},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":6350},"outV":{"@type":"gremlin:int32","@value":21},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id
 ":{"@type":"gremlin:int32","@value":3535},"outV":{"@type":"gremlin:int32","@value":201},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":980},"outV":{"@type":"gremlin:int32","@value":11},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":1494},"outV":{"@type":"gremlin:int32","@value":164},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":5206},"outV":{"@type":"gremlin:int32","@value":99},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5847},"outV":{"@type":"gremlin:int32","@value":61},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":6490},"outV":{"@type":"gremlin:int32","@value":187},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2781},"outV":{"@type":"gremlin:int32","@v
 alue":15},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":5600},"outV":{"@type":"gremlin:int32","@value":42},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":353},"outV":{"@type":"gremlin:int32","@value":74},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}},{"id":{"@type":"gremlin:int32","@value":5474},"outV":{"@type":"gremlin:int32","@value":79},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1891},"outV":{"@type":"gremlin:int32","@value":103},"properties":{"weight":{"@type":"gremlin:int32","@value":19}}},{"id":{"@type":"gremlin:int32","@value":3811},"outV":{"@type":"gremlin:int32","@value":88},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5989},"outV":{"@type":"gremlin:int32","@value":50},"properties":{"weight":{"@type":"gremlin:int32","@value":12}}},{"id"
 :{"@type":"gremlin:int32","@value":4327},"outV":{"@type":"gremlin:int32","@value":110},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":2538},"outV":{"@type":"gremlin:int32","@value":57},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":3050},"outV":{"@type":"gremlin:int32","@value":153},"properties":{"weight":{"@type":"gremlin:int32","@value":13}}},{"id":{"@type":"gremlin:int32","@value":4970},"outV":{"@type":"gremlin:int32","@value":236},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2283},"outV":{"@type":"gremlin:int32","@value":25},"properties":{"weight":{"@type":"gremlin:int32","@value":9}}},{"id":{"@type":"gremlin:int32","@value":236},"outV":{"@type":"gremlin:int32","@value":145},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":6126},"outV":{"@type":"gremlin:int32","@
 value":72},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5232},"outV":{"@type":"gremlin:int32","@value":214},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":4594},"outV":{"@type":"gremlin:int32","@value":85},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1652},"outV":{"@type":"gremlin:int32","@value":213},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":4084},"outV":{"@type":"gremlin:int32","@value":109},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":629},"outV":{"@type":"gremlin:int32","@value":23},"properties":{"weight":{"@type":"gremlin:int32","@value":10}}},{"id":{"@type":"gremlin:int32","@value":3701},"outV":{"@type":"gremlin:int32","@value":3},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id
 ":{"@type":"gremlin:int32","@value":5621},"outV":{"@type":"gremlin:int32","@value":22},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":7029},"outV":{"@type":"gremlin:int32","@value":89},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5238},"outV":{"@type":"gremlin:int32","@value":32},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":2684},"outV":{"@type":"gremlin:int32","@value":13},"properties":{"weight":{"@type":"gremlin:int32","@value":9}}},{"id":{"@type":"gremlin:int32","@value":3325},"outV":{"@type":"gremlin:int32","@value":268},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}]},"outE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":5120},"inV":{"@type":"gremlin:int32","@value":40},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":5121},"inV":{"@type
 ":"gremlin:int32","@value":33},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":5122},"inV":{"@type":"gremlin:int32","@value":79},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5123},"inV":{"@type":"gremlin:int32","@value":292},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5071},"inV":{"@type":"gremlin:int32","@value":50},"properties":{"weight":{"@type":"gremlin:int32","@value":9}}},{"id":{"@type":"gremlin:int32","@value":5072},"inV":{"@type":"gremlin:int32","@value":12},"properties":{"weight":{"@type":"gremlin:int32","@value":26}}},{"id":{"@type":"gremlin:int32","@value":5073},"inV":{"@type":"gremlin:int32","@value":18},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":5074},"inV":{"@type":"gremlin:int32","@value":24},"properties":{"weight":{"@type":"gremlin:int32","@va
 lue":9}}},{"id":{"@type":"gremlin:int32","@value":5075},"inV":{"@type":"gremlin:int32","@value":23},"properties":{"weight":{"@type":"gremlin:int32","@value":63}}},{"id":{"@type":"gremlin:int32","@value":5076},"inV":{"@type":"gremlin:int32","@value":13},"properties":{"weight":{"@type":"gremlin:int32","@value":12}}},{"id":{"@type":"gremlin:int32","@value":5077},"inV":{"@type":"gremlin:int32","@value":10},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":5078},"inV":{"@type":"gremlin:int32","@value":11},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":5079},"inV":{"@type":"gremlin:int32","@value":26},"properties":{"weight":{"@type":"gremlin:int32","@value":18}}},{"id":{"@type":"gremlin:int32","@value":5080},"inV":{"@type":"gremlin:int32","@value":22},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5081},"inV":{"@type":"gremlin:in
 t32","@value":16},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5082},"inV":{"@type":"gremlin:int32","@value":49},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5083},"inV":{"@type":"gremlin:int32","@value":25},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5084},"inV":{"@type":"gremlin:int32","@value":51},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5085},"inV":{"@type":"gremlin:int32","@value":15},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5086},"inV":{"@type":"gremlin:int32","@value":112},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":5087},"inV":{"@type":"gremlin:int32","@value":121},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"i
 d":{"@type":"gremlin:int32","@value":5088},"inV":{"@type":"gremlin:int32","@value":32},"properties":{"weight":{"@type":"gremlin:int32","@value":7}}},{"id":{"@type":"gremlin:int32","@value":5089},"inV":{"@type":"gremlin:int32","@value":68},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5090},"inV":{"@type":"gremlin:int32","@value":120},"properties":{"weight":{"@type":"gremlin:int32","@value":77}}},{"id":{"@type":"gremlin:int32","@value":5091},"inV":{"@type":"gremlin:int32","@value":103},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5092},"inV":{"@type":"gremlin:int32","@value":42},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":5093},"inV":{"@type":"gremlin:int32","@value":85},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":5094},"inV":{"@type":"gremlin:int32","@value"
 :76},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":5095},"inV":{"@type":"gremlin:int32","@value":181},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5096},"inV":{"@type":"gremlin:int32","@value":14},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5097},"inV":{"@type":"gremlin:int32","@value":122},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5098},"inV":{"@type":"gremlin:int32","@value":153},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":5099},"inV":{"@type":"gremlin:int32","@value":96},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5100},"inV":{"@type":"gremlin:int32","@value":82},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":
 "gremlin:int32","@value":5101},"inV":{"@type":"gremlin:int32","@value":110},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5102},"inV":{"@type":"gremlin:int32","@value":19},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}},{"id":{"@type":"gremlin:int32","@value":5103},"inV":{"@type":"gremlin:int32","@value":129},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5104},"inV":{"@type":"gremlin:int32","@value":84},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5105},"inV":{"@type":"gremlin:int32","@value":88},"properties":{"weight":{"@type":"gremlin:int32","@value":9}}},{"id":{"@type":"gremlin:int32","@value":5106},"inV":{"@type":"gremlin:int32","@value":97},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5107},"inV":{"@type":"gremlin:int32","@value":114},"proper
 ties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5108},"inV":{"@type":"gremlin:int32","@value":30},"properties":{"weight":{"@type":"gremlin:int32","@value":8}}},{"id":{"@type":"gremlin:int32","@value":5109},"inV":{"@type":"gremlin:int32","@value":31},"properties":{"weight":{"@type":"gremlin:int32","@value":8}}},{"id":{"@type":"gremlin:int32","@value":5110},"inV":{"@type":"gremlin:int32","@value":69},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":5111},"inV":{"@type":"gremlin:int32","@value":127},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5112},"inV":{"@type":"gremlin:int32","@value":60},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5113},"inV":{"@type":"gremlin:int32","@value":39},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32
 ","@value":5114},"inV":{"@type":"gremlin:int32","@value":21},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5115},"inV":{"@type":"gremlin:int32","@value":117},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5116},"inV":{"@type":"gremlin:int32","@value":78},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5117},"inV":{"@type":"gremlin:int32","@value":38},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5118},"inV":{"@type":"gremlin:int32","@value":169},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5119},"inV":{"@type":"gremlin:int32","@value":118},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}],"sungBy":[{"id":{"@type":"gremlin:int32","@value":7064},"inV":{"@type":"gremlin:int32","@value":340}}],"writte
 nBy":[{"id":{"@type":"gremlin:int32","@value":7063},"inV":{"@type":"gremlin:int32","@value":339}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":9},"value":"BERTHA"}],"songType":[{"id":{"@type":"gremlin:int64","@value":11},"value":"original"}],"performances":[{"id":{"@type":"gremlin:int64","@value":10},"value":{"@type":"gremlin:int32","@value":394}}]}}
+{"id":{"@type":"gremlin:int32","@value":5},"label":"song","inE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":194},"outV":{"@type":"gremlin:int32","@value":70},"properties":{"weight":{"@type":"gremlin:int32","@value":8}}},{"id":{"@type":"gremlin:int32","@value":962},"outV":{"@type":"gremlin:int32","@value":67},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":3},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5446},"outV":{"@type":"gremlin:int32","@value":231},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":6344},"outV":{"@type":"gremlin:int32","@value":21},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}},{"id":{"@type":"gremlin:int32","@value":1738},"outV":{"@type":"gremlin:int32","@value":82},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id"
 :{"@type":"gremlin:int32","@value":6666},"outV":{"@type":"gremlin:int32","@value":12},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1867},"outV":{"@type":"gremlin:int32","@value":94},"properties":{"weight":{"@type":"gremlin:int32","@value":15}}},{"id":{"@type":"gremlin:int32","@value":4300},"outV":{"@type":"gremlin:int32","@value":110},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":847},"outV":{"@type":"gremlin:int32","@value":171},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2832},"outV":{"@type":"gremlin:int32","@value":101},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":6032},"outV":{"@type":"gremlin:int32","@value":115},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1170},"outV":{"@type":"gremlin:int32","@
 value":26},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5330},"outV":{"@type":"gremlin:int32","@value":238},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1491},"outV":{"@type":"gremlin:int32","@value":164},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":1429},"outV":{"@type":"gremlin:int32","@value":83},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3033},"outV":{"@type":"gremlin:int32","@value":14},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":6298},"outV":{"@type":"gremlin:int32","@value":49},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1373},"outV":{"@type":"gremlin:int32","@value":130},"properties":{"weight":{"@type":"gremlin:int32","@value":11}}},{"
 id":{"@type":"gremlin:int32","@value":4447},"outV":{"@type":"gremlin:int32","@value":113},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5151},"outV":{"@type":"gremlin:int32","@value":125},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}},{"id":{"@type":"gremlin:int32","@value":5343},"outV":{"@type":"gremlin:int32","@value":165},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":6431},"outV":{"@type":"gremlin:int32","@value":134},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":1953},"outV":{"@type":"gremlin:int32","@value":148},"properties":{"weight":{"@type":"gremlin:int32","@value":10}}},{"id":{"@type":"gremlin:int32","@value":1634},"outV":{"@type":"gremlin:int32","@value":210},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2274},"outV":{"@type":"gremlin:int
 32","@value":25},"properties":{"weight":{"@type":"gremlin:int32","@value":8}}},{"id":{"@type":"gremlin:int32","@value":100},"outV":{"@type":"gremlin:int32","@value":46},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":933},"outV":{"@type":"gremlin:int32","@value":91},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2021},"outV":{"@type":"gremlin:int32","@value":149},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":6694},"outV":{"@type":"gremlin:int32","@value":141},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":4009},"outV":{"@type":"gremlin:int32","@value":225},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":682},"outV":{"@type":"gremlin:int32","@value":219},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}
 ,{"id":{"@type":"gremlin:int32","@value":3694},"outV":{"@type":"gremlin:int32","@value":3},"properties":{"weight":{"@type":"gremlin:int32","@value":57}}},{"id":{"@type":"gremlin:int32","@value":4718},"outV":{"@type":"gremlin:int32","@value":186},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}},{"id":{"@type":"gremlin:int32","@value":3055},"outV":{"@type":"gremlin:int32","@value":153},"properties":{"weight":{"@type":"gremlin:int32","@value":9}}},{"id":{"@type":"gremlin:int32","@value":2480},"outV":{"@type":"gremlin:int32","@value":68},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2736},"outV":{"@type":"gremlin:int32","@value":13},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":5426},"outV":{"@type":"gremlin:int32","@value":102},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":6899},"outV":{"@type":"gremlin:int3
 2","@value":147},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5879},"outV":{"@type":"gremlin:int32","@value":96},"properties":{"weight":{"@type":"gremlin:int32","@value":22}}},{"id":{"@type":"gremlin:int32","@value":6201},"outV":{"@type":"gremlin:int32","@value":319},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5370},"outV":{"@type":"gremlin:int32","@value":132},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":700},"outV":{"@type":"gremlin:int32","@value":206},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2236},"outV":{"@type":"gremlin:int32","@value":29},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":4604},"outV":{"@type":"gremlin:int32","@value":85},"properties":{"weight":{"@type":"gremlin:int32","@value":2}
 }},{"id":{"@type":"gremlin:int32","@value":5759},"outV":{"@type":"gremlin:int32","@value":129},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}}]},"outE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":273},"inV":{"@type":"gremlin:int32","@value":3},"properties":{"weight":{"@type":"gremlin:int32","@value":40}}},{"id":{"@type":"gremlin:int32","@value":274},"inV":{"@type":"gremlin:int32","@value":26},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":275},"inV":{"@type":"gremlin:int32","@value":114},"properties":{"weight":{"@type":"gremlin:int32","@value":40}}},{"id":{"@type":"gremlin:int32","@value":276},"inV":{"@type":"gremlin:int32","@value":1},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":277},"inV":{"@type":"gremlin:int32","@value":74},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":278},"inV":{"@type":
 "gremlin:int32","@value":122},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":279},"inV":{"@type":"gremlin:int32","@value":133},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":280},"inV":{"@type":"gremlin:int32","@value":83},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":281},"inV":{"@type":"gremlin:int32","@value":153},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":282},"inV":{"@type":"gremlin:int32","@value":159},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":283},"inV":{"@type":"gremlin:int32","@value":13},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":284},"inV":{"@type":"gremlin:int32","@value":25},"properties":{"weight":{"@type":"gremlin:int32","@value":1
 9}}},{"id":{"@type":"gremlin:int32","@value":285},"inV":{"@type":"gremlin:int32","@value":96},"properties":{"weight":{"@type":"gremlin:int32","@value":10}}},{"id":{"@type":"gremlin:int32","@value":286},"inV":{"@type":"gremlin:int32","@value":160},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":287},"inV":{"@type":"gremlin:int32","@value":32},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":288},"inV":{"@type":"gremlin:int32","@value":120},"properties":{"weight":{"@type":"gremlin:int32","@value":16}}},{"id":{"@type":"gremlin:int32","@value":289},"inV":{"@type":"gremlin:int32","@value":50},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":290},"inV":{"@type":"gremlin:int32","@value":116},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":291},"inV":{"@type":"gremlin:int32","@val
 ue":127},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}},{"id":{"@type":"gremlin:int32","@value":292},"inV":{"@type":"gremlin:int32","@value":65},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":293},"inV":{"@type":"gremlin:int32","@value":130},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":294},"inV":{"@type":"gremlin:int32","@value":125},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":295},"inV":{"@type":"gremlin:int32","@value":70},"properties":{"weight":{"@type":"gremlin:int32","@value":13}}},{"id":{"@type":"gremlin:int32","@value":296},"inV":{"@type":"gremlin:int32","@value":134},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":297},"inV":{"@type":"gremlin:int32","@value":161},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":
 "gremlin:int32","@value":298},"inV":{"@type":"gremlin:int32","@value":162},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":299},"inV":{"@type":"gremlin:int32","@value":124},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":300},"inV":{"@type":"gremlin:int32","@value":38},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":301},"inV":{"@type":"gremlin:int32","@value":29},"properties":{"weight":{"@type":"gremlin:int32","@value":11}}},{"id":{"@type":"gremlin:int32","@value":302},"inV":{"@type":"gremlin:int32","@value":163},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":303},"inV":{"@type":"gremlin:int32","@value":94},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":304},"inV":{"@type":"gremlin:int32","@value":85},"properties":
 {"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":305},"inV":{"@type":"gremlin:int32","@value":164},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}},{"id":{"@type":"gremlin:int32","@value":306},"inV":{"@type":"gremlin:int32","@value":64},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":307},"inV":{"@type":"gremlin:int32","@value":150},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":308},"inV":{"@type":"gremlin:int32","@value":165},"properties":{"weight":{"@type":"gremlin:int32","@value":7}}},{"id":{"@type":"gremlin:int32","@value":309},"inV":{"@type":"gremlin:int32","@value":92},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":310},"inV":{"@type":"gremlin:int32","@value":140},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value
 ":311},"inV":{"@type":"gremlin:int32","@value":166},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}],"sungBy":[{"id":{"@type":"gremlin:int32","@value":7582},"inV":{"@type":"gremlin:int32","@value":340}}],"writtenBy":[{"id":{"@type":"gremlin:int32","@value":7581},"inV":{"@type":"gremlin:int32","@value":446}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":12},"value":"GOING DOWN THE ROAD FEELING BAD"}],"songType":[{"id":{"@type":"gremlin:int64","@value":14},"value":"cover"}],"performances":[{"id":{"@type":"gremlin:int64","@value":13},"value":{"@type":"gremlin:int32","@value":293}}]}}
+{"id":{"@type":"gremlin:int32","@value":6},"label":"song","inE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":4},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2023},"outV":{"@type":"gremlin:int32","@value":282},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}]},"outE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":2406},"inV":{"@type":"gremlin:int32","@value":293},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2407},"inV":{"@type":"gremlin:int32","@value":96},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}],"sungBy":[{"id":{"@type":"gremlin:int32","@value":7782},"inV":{"@type":"gremlin:int32","@value":351}}],"writtenBy":[{"id":{"@type":"gremlin:int32","@value":7781},"inV":{"@type":"gremlin:int32","@value":527}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":15},"value":"
 MONA"}],"songType":[{"id":{"@type":"gremlin:int64","@value":17},"value":"cover"}],"performances":[{"id":{"@type":"gremlin:int64","@value":16},"value":{"@type":"gremlin:int32","@value":1}}]}}
+{"id":{"@type":"gremlin:int32","@value":7},"label":"song","inE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":2607},"outV":{"@type":"gremlin:int32","@value":295},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}]},"outE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":5},"inV":{"@type":"gremlin:int32","@value":8},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":18},"value":"WHERE HAVE THE HEROES GONE"}],"songType":[{"id":{"@type":"gremlin:int64","@value":20},"value":""}],"performances":[{"id":{"@type":"gremlin:int64","@value":19},"value":{"@type":"gremlin:int32","@value":0}}]}}
+{"id":{"@type":"gremlin:int32","@value":8},"label":"song","inE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":4705},"outV":{"@type":"gremlin:int32","@value":111},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5},"outV":{"@type":"gremlin:int32","@value":7},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5901},"outV":{"@type":"gremlin:int32","@value":96},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}]},"outE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":2976},"inV":{"@type":"gremlin:int32","@value":302},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2977},"inV":{"@type":"gremlin:int32","@value":96},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2978},"inV":{"@type":"gremlin:int32","@value":72},"properties":{"weight":{"@type":"gremlin:in
 t32","@value":1}}}],"sungBy":[{"id":{"@type":"gremlin:int32","@value":7814},"inV":{"@type":"gremlin:int32","@value":351}}],"writtenBy":[{"id":{"@type":"gremlin:int32","@value":7813},"inV":{"@type":"gremlin:int32","@value":674}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":21},"value":"OH BOY"}],"songType":[{"id":{"@type":"gremlin:int64","@value":23},"value":"cover"}],"performances":[{"id":{"@type":"gremlin:int64","@value":22},"value":{"@type":"gremlin:int32","@value":2}}]}}
+{"id":{"@type":"gremlin:int32","@value":9},"label":"song","inE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":3776},"outV":{"@type":"gremlin:int32","@value":3},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":65},"outV":{"@type":"gremlin:int32","@value":46},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":1923},"outV":{"@type":"gremlin:int32","@value":103},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":5956},"outV":{"@type":"gremlin:int32","@value":50},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3077},"outV":{"@type":"gremlin:int32","@value":153},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5832},"outV":{"@type":"gremlin:int32","@value":76},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{
 "id":{"@type":"gremlin:int32","@value":1161},"outV":{"@type":"gremlin:int32","@value":26},"properties":{"weight":{"@type":"gremlin:int32","@value":8}}},{"id":{"@type":"gremlin:int32","@value":2699},"outV":{"@type":"gremlin:int32","@value":13},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":6539},"outV":{"@type":"gremlin:int32","@value":55},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":6667},"outV":{"@type":"gremlin:int32","@value":12},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":2578},"outV":{"@type":"gremlin:int32","@value":57},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":787},"outV":{"@type":"gremlin:int32","@value":122},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3542},"outV":{"@type":"gremlin:int32","@
 value":201},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2775},"outV":{"@type":"gremlin:int32","@value":15},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":2840},"outV":{"@type":"gremlin:int32","@value":101},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":4953},"outV":{"@type":"gremlin:int32","@value":86},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":1572},"outV":{"@type":"gremlin:int32","@value":18},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":229},"outV":{"@type":"gremlin:int32","@value":70},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4264},"outV":{"@type":"gremlin:int32","@value":10},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id"
 :{"@type":"gremlin:int32","@value":4969},"outV":{"@type":"gremlin:int32","@value":236},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3498},"outV":{"@type":"gremlin:int32","@value":58},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5226},"outV":{"@type":"gremlin:int32","@value":216},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5548},"outV":{"@type":"gremlin:int32","@value":166},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2990},"outV":{"@type":"gremlin:int32","@value":14},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":3950},"outV":{"@type":"gremlin:int32","@value":138},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2488},"outV":{"@type":"gremlin:int32","@
 value":68},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":6776},"outV":{"@type":"gremlin:int32","@value":39},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3641},"outV":{"@type":"gremlin:int32","@value":24},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":1532},"outV":{"@type":"gremlin:int32","@value":164},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":1853},"outV":{"@type":"gremlin:int32","@value":94},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":638},"outV":{"@type":"gremlin:int32","@value":23},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":6335},"outV":{"@type":"gremlin:int32","@value":21},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}]},"out
 E":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":6},"inV":{"@type":"gremlin:int32","@value":10},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":7},"inV":{"@type":"gremlin:int32","@value":11},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":8},"inV":{"@type":"gremlin:int32","@value":12},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":9},"inV":{"@type":"gremlin:int32","@value":13},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}},{"id":{"@type":"gremlin:int32","@value":10},"inV":{"@type":"gremlin:int32","@value":14},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":11},"inV":{"@type":"gremlin:int32","@value":15},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":12},"inV":{"@type":"gremlin:int32","@value"
 :16},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":13},"inV":{"@type":"gremlin:int32","@value":17},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":14},"inV":{"@type":"gremlin:int32","@value":18},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":15},"inV":{"@type":"gremlin:int32","@value":19},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":16},"inV":{"@type":"gremlin:int32","@value":20},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":17},"inV":{"@type":"gremlin:int32","@value":21},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":18},"inV":{"@type":"gremlin:int32","@value":22},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32"
 ,"@value":19},"inV":{"@type":"gremlin:int32","@value":23},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":20},"inV":{"@type":"gremlin:int32","@value":24},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":21},"inV":{"@type":"gremlin:int32","@value":25},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":22},"inV":{"@type":"gremlin:int32","@value":26},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":23},"inV":{"@type":"gremlin:int32","@value":27},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":24},"inV":{"@type":"gremlin:int32","@value":28},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":25},"inV":{"@type":"gremlin:int32","@value":29},"properties":{"weight":{"@type":"gremli
 n:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":26},"inV":{"@type":"gremlin:int32","@value":30},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":27},"inV":{"@type":"gremlin:int32","@value":31},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":28},"inV":{"@type":"gremlin:int32","@value":32},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":29},"inV":{"@type":"gremlin:int32","@value":33},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":30},"inV":{"@type":"gremlin:int32","@value":34},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":31},"inV":{"@type":"gremlin:int32","@value":35},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":32},"inV":{"@type":"gremlin:int32"
 ,"@value":36},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":33},"inV":{"@type":"gremlin:int32","@value":37},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":34},"inV":{"@type":"gremlin:int32","@value":38},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":35},"inV":{"@type":"gremlin:int32","@value":39},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":36},"inV":{"@type":"gremlin:int32","@value":40},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":37},"inV":{"@type":"gremlin:int32","@value":41},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":38},"inV":{"@type":"gremlin:int32","@value":42},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"greml
 in:int32","@value":39},"inV":{"@type":"gremlin:int32","@value":43},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}],"sungBy":[{"id":{"@type":"gremlin:int32","@value":7190},"inV":{"@type":"gremlin:int32","@value":340}}],"writtenBy":[{"id":{"@type":"gremlin:int32","@value":7189},"inV":{"@type":"gremlin:int32","@value":339}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":24},"value":"HERE COMES SUNSHINE"}],"songType":[{"id":{"@type":"gremlin:int64","@value":26},"value":"original"}],"performances":[{"id":{"@type":"gremlin:int64","@value":25},"value":{"@type":"gremlin:int32","@value":65}}]}}
+{"id":{"@type":"gremlin:int32","@value":10},"label":"song","inE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":3841},"outV":{"@type":"gremlin:int32","@value":60},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1027},"outV":{"@type":"gremlin:int32","@value":73},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":6},"outV":{"@type":"gremlin:int32","@value":9},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3335},"outV":{"@type":"gremlin:int32","@value":155},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4103},"outV":{"@type":"gremlin:int32","@value":48},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":6279},"outV":{"@type":"gremlin:int32","@value":49},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"
 id":{"@type":"gremlin:int32","@value":4233},"outV":{"@type":"gremlin:int32","@value":52},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4878},"outV":{"@type":"gremlin:int32","@value":100},"properties":{"weight":{"@type":"gremlin:int32","@value":19}}},{"id":{"@type":"gremlin:int32","@value":5264},"outV":{"@type":"gremlin:int32","@value":32},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":2196},"outV":{"@type":"gremlin:int32","@value":75},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":151},"outV":{"@type":"gremlin:int32","@value":108},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":1571},"outV":{"@type":"gremlin:int32","@value":18},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":3619},"outV":{"@type":"gremlin:int32","
 @value":24},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3237},"outV":{"@type":"gremlin:int32","@value":63},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":4647},"outV":{"@type":"gremlin:int32","@value":154},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4521},"outV":{"@type":"gremlin:int32","@value":105},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":1195},"outV":{"@type":"gremlin:int32","@value":26},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":6444},"outV":{"@type":"gremlin:int32","@value":187},"properties":{"weight":{"@type":"gremlin:int32","@value":9}}},{"id":{"@type":"gremlin:int32","@value":6956},"outV":{"@type":"gremlin:int32","@value":84},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"
 id":{"@type":"gremlin:int32","@value":687},"outV":{"@type":"gremlin:int32","@value":157},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4784},"outV":{"@type":"gremlin:int32","@value":114},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":6064},"outV":{"@type":"gremlin:int32","@value":115},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1714},"outV":{"@type":"gremlin:int32","@value":82},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3890},"outV":{"@type":"gremlin:int32","@value":51},"properties":{"weight":{"@type":"gremlin:int32","@value":9}}},{"id":{"@type":"gremlin:int32","@value":55},"outV":{"@type":"gremlin:int32","@value":46},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5175},"outV":{"@type":"gremlin:int32","@v
 alue":71},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1337},"outV":{"@type":"gremlin:int32","@value":31},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1083},"outV":{"@type":"gremlin:int32","@value":59},"properties":{"weight":{"@type":"gremlin:int32","@value":10}}},{"id":{"@type":"gremlin:int32","@value":4155},"outV":{"@type":"gremlin:int32","@value":54},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}},{"id":{"@type":"gremlin:int32","@value":6077},"outV":{"@type":"gremlin:int32","@value":72},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":5441},"outV":{"@type":"gremlin:int32","@value":239},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1987},"outV":{"@type":"gremlin:int32","@value":152},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id
 ":{"@type":"gremlin:int32","@value":1860},"outV":{"@type":"gremlin:int32","@value":94},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2116},"outV":{"@type":"gremlin:int32","@value":17},"properties":{"weight":{"@type":"gremlin:int32","@value":7}}},{"id":{"@type":"gremlin:int32","@value":3269},"outV":{"@type":"gremlin:int32","@value":160},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":454},"outV":{"@type":"gremlin:int32","@value":38},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3142},"outV":{"@type":"gremlin:int32","@value":104},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":2505},"outV":{"@type":"gremlin:int32","@value":57},"properties":{"weight":{"@type":"gremlin:int32","@value":12}}},{"id":{"@type":"gremlin:int32","@value":6603},"outV":{"@type":"gremlin:int32","@v
 alue":127},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":6859},"outV":{"@type":"gremlin:int32","@value":64},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":717},"outV":{"@type":"gremlin:int32","@value":80},"properties":{"weight":{"@type":"gremlin:int32","@value":9}}},{"id":{"@type":"gremlin:int32","@value":1360},"outV":{"@type":"gremlin:int32","@value":130},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3026},"outV":{"@type":"gremlin:int32","@value":14},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5972},"outV":{"@type":"gremlin:int32","@value":50},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5077},"outV":{"@type":"gremlin:int32","@value":4},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{
 "@type":"gremlin:int32","@value":2392},"outV":{"@type":"gremlin:int32","@value":87},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1250},"outV":{"@type":"gremlin:int32","@value":27},"properties":{"weight":{"@type":"gremlin:int32","@value":10}}},{"id":{"@type":"gremlin:int32","@value":4706},"outV":{"@type":"gremlin:int32","@value":111},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":6755},"outV":{"@type":"gremlin:int32","@value":53},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":485},"outV":{"@type":"gremlin:int32","@value":98},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":2917},"outV":{"@type":"gremlin:int32","@value":78},"properties":{"weight":{"@type":"gremlin:int32","@value":10}}},{"id":{"@type":"gremlin:int32","@value":3559},"outV":{"@type":"gremlin:int32","@valu
 e":56},"properties":{"weight":{"@type":"gremlin:int32","@value":16}}},{"id":{"@type":"gremlin:int32","@value":3436},"outV":{"@type":"gremlin:int32","@value":58},"properties":{"weight":{"@type":"gremlin:int32","@value":10}}},{"id":{"@type":"gremlin:int32","@value":3820},"outV":{"@type":"gremlin:int32","@value":88},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4463},"outV":{"@type":"gremlin:int32","@value":202},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":880},"outV":{"@type":"gremlin:int32","@value":189},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":6256},"outV":{"@type":"gremlin:int32","@value":117},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3698},"outV":{"@type":"gremlin:int32","@value":3},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{
 "@type":"gremlin:int32","@value":2035},"outV":{"@type":"gremlin:int32","@value":180},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2291},"outV":{"@type":"gremlin:int32","@value":25},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3317},"outV":{"@type":"gremlin:int32","@value":252},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2806},"outV":{"@type":"gremlin:int32","@value":15},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":2427},"outV":{"@type":"gremlin:int32","@value":68},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":6782},"outV":{"@type":"gremlin:int32","@value":39},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":4351},"outV":{"@type":"gremlin:int32","@valu
 e":62},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}}]},"outE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":4235},"inV":{"@type":"gremlin:int32","@value":56},"properties":{"weight":{"@type":"gremlin:int32","@value":13}}},{"id":{"@type":"gremlin:int32","@value":4236},"inV":{"@type":"gremlin:int32","@value":27},"properties":{"weight":{"@type":"gremlin:int32","@value":7}}},{"id":{"@type":"gremlin:int32","@value":4237},"inV":{"@type":"gremlin:int32","@value":58},"properties":{"weight":{"@type":"gremlin:int32","@value":11}}},{"id":{"@type":"gremlin:int32","@value":4238},"inV":{"@type":"gremlin:int32","@value":80},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}},{"id":{"@type":"gremlin:int32","@value":4239},"inV":{"@type":"gremlin:int32","@value":59},"properties":{"weight":{"@type":"gremlin:int32","@value":9}}},{"id":{"@type":"gremlin:int32","@value":4240},"inV":{"@type":"gremlin:int32","@value":100},"properties":{"weight":{"@type":"gremlin:int32","@v
 alue":21}}},{"id":{"@type":"gremlin:int32","@value":4241},"inV":{"@type":"gremlin:int32","@value":104},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":4242},"inV":{"@type":"gremlin:int32","@value":50},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":4243},"inV":{"@type":"gremlin:int32","@value":48},"properties":{"weight":{"@type":"gremlin:int32","@value":8}}},{"id":{"@type":"gremlin:int32","@value":4244},"inV":{"@type":"gremlin:int32","@value":54},"properties":{"weight":{"@type":"gremlin:int32","@value":13}}},{"id":{"@type":"gremlin:int32","@value":4245},"inV":{"@type":"gremlin:int32","@value":19},"properties":{"weight":{"@type":"gremlin:int32","@value":9}}},{"id":{"@type":"gremlin:int32","@value":4246},"inV":{"@type":"gremlin:int32","@value":72},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":4247},"inV":{"@type":"gremlin:i
 nt32","@value":14},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4248},"inV":{"@type":"gremlin:int32","@value":122},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":4249},"inV":{"@type":"gremlin:int32","@value":235},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4250},"inV":{"@type":"gremlin:int32","@value":218},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4251},"inV":{"@type":"gremlin:int32","@value":252},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4252},"inV":{"@type":"gremlin:int32","@value":89},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":4253},"inV":{"@type":"gremlin:int32","@value":57},"properties":{"weight":{"@type":"gremlin:int32","@value":12}}}
 ,{"id":{"@type":"gremlin:int32","@value":4254},"inV":{"@type":"gremlin:int32","@value":49},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":4255},"inV":{"@type":"gremlin:int32","@value":94},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":4256},"inV":{"@type":"gremlin:int32","@value":153},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4257},"inV":{"@type":"gremlin:int32","@value":13},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4258},"inV":{"@type":"gremlin:int32","@value":160},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4259},"inV":{"@type":"gremlin:int32","@value":51},"properties":{"weight":{"@type":"gremlin:int32","@value":10}}},{"id":{"@type":"gremlin:int32","@value":4260},"inV":{"@type":"gremlin:int32","@va
 lue":18},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":4261},"inV":{"@type":"gremlin:int32","@value":202},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":4262},"inV":{"@type":"gremlin:int32","@value":17},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":4263},"inV":{"@type":"gremlin:int32","@value":46},"pr

<TRUNCATED>

[22/48] tinkerpop git commit: Reduced the threshold for TraversalStrategyPerformanceTest passing again CTR

Posted by sp...@apache.org.
Reduced the threshold for TraversalStrategyPerformanceTest passing again CTR

This is still failing randomly - nost notably in Travis.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/f35f7336
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/f35f7336
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/f35f7336

Branch: refs/heads/TINKERPOP-1278
Commit: f35f733663029701af538fc527e1f5ab563eb07d
Parents: 6231f8d
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Thu Aug 18 16:26:05 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Thu Aug 18 16:26:05 2016 -0400

----------------------------------------------------------------------
 .../traversal/strategy/TraversalStrategyPerformanceTest.java       | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f35f7336/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/TraversalStrategyPerformanceTest.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/TraversalStrategyPerformanceTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/TraversalStrategyPerformanceTest.java
index 5b933b8..b89386c 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/TraversalStrategyPerformanceTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/TraversalStrategyPerformanceTest.java
@@ -51,7 +51,7 @@ public abstract class TraversalStrategyPerformanceTest {
      * original traversal. Default is 100.
      */
     protected double getAssertionPercentile() {
-        return 95.0;
+        return 75.0;
     }
 
     protected abstract Class<? extends TraversalStrategy> getStrategyUnderTest();


[23/48] tinkerpop git commit: Defaulted the gremlinPool setting to be Runtime.availableProcessors()

Posted by sp...@apache.org.
Defaulted the gremlinPool setting to be Runtime.availableProcessors()

That value is used when gremlinPool is set to zero in the YAML file. CTR


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/848e367e
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/848e367e
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/848e367e

Branch: refs/heads/TINKERPOP-1278
Commit: 848e367e24a4c046b3abaf34a95ec42f6b9af628
Parents: f35f733
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Fri Aug 19 07:20:35 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Fri Aug 19 07:21:30 2016 -0400

----------------------------------------------------------------------
 CHANGELOG.asciidoc                                        |  1 +
 docs/src/reference/gremlin-applications.asciidoc          |  6 ++----
 docs/src/upgrade/release-3.2.x-incubating.asciidoc        | 10 ++++++++++
 gremlin-server/conf/gremlin-server-classic.yaml           |  3 ---
 gremlin-server/conf/gremlin-server-min.yaml               |  3 ---
 gremlin-server/conf/gremlin-server-modern-readonly.yaml   |  3 ---
 gremlin-server/conf/gremlin-server-modern.yaml            |  3 ---
 gremlin-server/conf/gremlin-server-neo4j.yaml             |  3 ---
 gremlin-server/conf/gremlin-server-rest-modern.yaml       |  3 ---
 gremlin-server/conf/gremlin-server-rest-secure.yaml       |  3 ---
 gremlin-server/conf/gremlin-server-secure.yaml            |  3 ---
 gremlin-server/conf/gremlin-server-spark.yaml             |  3 ---
 gremlin-server/conf/gremlin-server.yaml                   |  3 ---
 .../apache/tinkerpop/gremlin/server/GremlinServer.java    |  6 ++++++
 .../org/apache/tinkerpop/gremlin/server/Settings.java     |  6 +++---
 .../gremlin/driver/remote/gremlin-server-integration.yaml |  3 ---
 .../gremlin/server/gremlin-server-integration.yaml        |  3 ---
 .../gremlin/server/gremlin-server-performance.yaml        |  3 ---
 18 files changed, 22 insertions(+), 46 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/848e367e/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index c6b8548..d4eff5d 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -26,6 +26,7 @@ image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima
 TinkerPop 3.2.2 (NOT OFFICIALLY RELEASED YET)
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
+* Defaulted the `gremlinPool` setting in Gremlin Server to be zero, which will instructs it to use `Runtime.availableProcessors()` for that settings.
 * Changed scope of log4j dependencies so that they would only be used in tests and the binary distributions of Gremlin Console and Server.
 * Deprecated `Io.Builder.registry()` in favor of the newly introduced `Io.Builder.onMapper()`.
 * Added new recipe for "Traversal Induced Values".

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/848e367e/docs/src/reference/gremlin-applications.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/reference/gremlin-applications.asciidoc b/docs/src/reference/gremlin-applications.asciidoc
index 2afbf15..7b84b43 100644
--- a/docs/src/reference/gremlin-applications.asciidoc
+++ b/docs/src/reference/gremlin-applications.asciidoc
@@ -923,7 +923,7 @@ The following table describes the various configuration options that Gremlin Ser
 |authentication.config |A `Map` of configuration settings to be passes to the `Authenticator` when it is constructed.  The settings available are dependent on the implementation. |_none_
 |channelizer |The fully qualified classname of the `Channelizer` implementation to use.  A `Channelizer` is a "channel initializer" which Gremlin Server uses to define the type of processing pipeline to use.  By allowing different `Channelizer` implementations, Gremlin Server can support different communication protocols (e.g. Websockets, Java NIO, etc.). |`WebSocketChannelizer`
 |graphs |A `Map` of `Graph` configuration files where the key of the `Map` becomes the name to which the `Graph` will be bound and the value is the file name of a `Graph` configuration file. |_none_
-|gremlinPool |The number of "Gremlin" threads available to execute actual scripts in a `ScriptEngine`. This pool represents the workers available to handle blocking operations in Gremlin Server. |8
+|gremlinPool |The number of "Gremlin" threads available to execute actual scripts in a `ScriptEngine`. This pool represents the workers available to handle blocking operations in Gremlin Server. When set to `0`, Gremlin Server will use the value provided by `Runtime.availableProcessors()`. |0
 |host |The name of the host to bind the server to. |localhost
 |useEpollEventLoop |try to use epoll event loops (works only on Linux os) instead of netty NIO. |false
 |maxAccumulationBufferComponents |Maximum number of request components that can be aggregated for a message. |1024
@@ -1388,8 +1388,6 @@ this pool.  When this pool is exhausted of threads, Gremlin Server will continue
 the queue will continue to grow.  If left to grow too large, the server will begin to slow.  When tuning around
 this setting, consider whether the bulk of the scripts being processed will be "fast" or "slow", where "fast"
 generally means being measured in the low hundreds of milliseconds and "slow" means anything longer than that.
-** If the bulk of the scripts being processed are expected to be "fast", then a good starting point for this setting is `2*threadPoolWorker`.
-** If the bulk of the scripts being processed are expected to be "slow", then a good starting point for this setting is `4*threadPoolWorker`.
 * Scripts that are "slow" can really hurt Gremlin Server if they are not properly accounted for.  `ScriptEngine`
 evaluations are blocking operations that aren't always easily interrupted, so once a "slow" script is being evaluated in
 the context of a `ScriptEngine` it must finish its work.  Lots of "slow" scripts will eventually consume the
@@ -1399,7 +1397,7 @@ In other words, test the traversals being sent to Gremlin Server and determine t
 and iterate over results, then set the timeout value accordingly.
 ** Note that `scriptEvaluationTimeout` can only attempt to interrupt the evaluation on timeout.  It allows Gremlin
 Server to "ignore" the result of that evaluation, which means the thread in the `gremlinPool` that did the evaluation
-may still be consumed after the timeout.
+may still be consumed after the timeout if interruption does not succeed on the thread.
 * Graph element serialization for `Vertex` and `Edge` can be expensive, as their data structures are complex given the
 possible existence of multi-properties and meta-properties. When returning data from Gremlin Server only return the
 data that is required. For example, if only two properties of a `Vertex` are needed then simply return the two rather

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/848e367e/docs/src/upgrade/release-3.2.x-incubating.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/upgrade/release-3.2.x-incubating.asciidoc b/docs/src/upgrade/release-3.2.x-incubating.asciidoc
index 235d228..bdcf69e 100644
--- a/docs/src/upgrade/release-3.2.x-incubating.asciidoc
+++ b/docs/src/upgrade/release-3.2.x-incubating.asciidoc
@@ -44,6 +44,16 @@ Note that Gremlin Server and Gremlin Console explicitly package Log4j in their r
 
 See: link:https://issues.apache.org/jira/browse/TINKERPOP-1151[TINKERPOP-1151]
 
+Default for gremlinPool
+^^^^^^^^^^^^^^^^^^^^^^^
+
+The `gremlinPool` setting in Gremlin Server is now defaulted to zero. When set to zero, Gremlin Server will use the
+value provided by `Runtime.availableProcessors()` to set the pool size. Note that the packaged YAML files no longer
+contain the thread pool settings as all are now driven by sensible defaults. Obviously these values can be added
+and overridden as needed.
+
+See: https://issues.apache.org/jira/browse/TINKERPOP-1373[TINKERPOP-1373]
+
 Upgrading for Providers
 ~~~~~~~~~~~~~~~~~~~~~~~
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/848e367e/gremlin-server/conf/gremlin-server-classic.yaml
----------------------------------------------------------------------
diff --git a/gremlin-server/conf/gremlin-server-classic.yaml b/gremlin-server/conf/gremlin-server-classic.yaml
index 388a27e..551e2c0 100644
--- a/gremlin-server/conf/gremlin-server-classic.yaml
+++ b/gremlin-server/conf/gremlin-server-classic.yaml
@@ -17,8 +17,6 @@
 
 host: localhost
 port: 8182
-threadPoolWorker: 1
-gremlinPool: 8
 scriptEvaluationTimeout: 30000
 graphs: {
   graph: conf/tinkergraph-empty.properties}
@@ -36,7 +34,6 @@ serializers:
 metrics: {
   slf4jReporter: {enabled: true, interval: 180000}}
 strictTransactionManagement: false
-threadPoolBoss: 1
 maxInitialLineLength: 4096
 maxHeaderSize: 8192
 maxChunkSize: 8192

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/848e367e/gremlin-server/conf/gremlin-server-min.yaml
----------------------------------------------------------------------
diff --git a/gremlin-server/conf/gremlin-server-min.yaml b/gremlin-server/conf/gremlin-server-min.yaml
index 243c41e..d4471f5 100644
--- a/gremlin-server/conf/gremlin-server-min.yaml
+++ b/gremlin-server/conf/gremlin-server-min.yaml
@@ -17,8 +17,6 @@
 
 host: localhost
 port: 8182
-threadPoolWorker: 1
-gremlinPool: 8
 scriptEvaluationTimeout: 30000
 graphs: {
   graph: conf/tinkergraph-empty.properties}
@@ -33,7 +31,6 @@ serializers:
 metrics: {
   slf4jReporter: {enabled: true, interval: 180000}}
 strictTransactionManagement: false
-threadPoolBoss: 1
 maxInitialLineLength: 4096
 maxHeaderSize: 8192
 maxChunkSize: 8192

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/848e367e/gremlin-server/conf/gremlin-server-modern-readonly.yaml
----------------------------------------------------------------------
diff --git a/gremlin-server/conf/gremlin-server-modern-readonly.yaml b/gremlin-server/conf/gremlin-server-modern-readonly.yaml
index 5214b50..2a81035 100644
--- a/gremlin-server/conf/gremlin-server-modern-readonly.yaml
+++ b/gremlin-server/conf/gremlin-server-modern-readonly.yaml
@@ -17,8 +17,6 @@
 
 host: localhost
 port: 8182
-threadPoolWorker: 1
-gremlinPool: 8
 scriptEvaluationTimeout: 30000
 graphs: {
   graph: conf/tinkergraph-empty.properties}
@@ -36,7 +34,6 @@ serializers:
 metrics: {
   slf4jReporter: {enabled: true, interval: 180000}}
 strictTransactionManagement: false
-threadPoolBoss: 1
 maxInitialLineLength: 4096
 maxHeaderSize: 8192
 maxChunkSize: 8192

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/848e367e/gremlin-server/conf/gremlin-server-modern.yaml
----------------------------------------------------------------------
diff --git a/gremlin-server/conf/gremlin-server-modern.yaml b/gremlin-server/conf/gremlin-server-modern.yaml
index cec7f81..3d686d3 100644
--- a/gremlin-server/conf/gremlin-server-modern.yaml
+++ b/gremlin-server/conf/gremlin-server-modern.yaml
@@ -17,8 +17,6 @@
 
 host: localhost
 port: 8182
-threadPoolWorker: 1
-gremlinPool: 8
 scriptEvaluationTimeout: 30000
 graphs: {
   graph: conf/tinkergraph-empty.properties}
@@ -36,7 +34,6 @@ serializers:
 metrics: {
   slf4jReporter: {enabled: true, interval: 180000}}
 strictTransactionManagement: false
-threadPoolBoss: 1
 maxInitialLineLength: 4096
 maxHeaderSize: 8192
 maxChunkSize: 8192

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/848e367e/gremlin-server/conf/gremlin-server-neo4j.yaml
----------------------------------------------------------------------
diff --git a/gremlin-server/conf/gremlin-server-neo4j.yaml b/gremlin-server/conf/gremlin-server-neo4j.yaml
index 258dafb..8b4f768 100644
--- a/gremlin-server/conf/gremlin-server-neo4j.yaml
+++ b/gremlin-server/conf/gremlin-server-neo4j.yaml
@@ -27,8 +27,6 @@
 
 host: localhost
 port: 8182
-threadPoolWorker: 1
-gremlinPool: 8
 scriptEvaluationTimeout: 30000
 channelizer: org.apache.tinkerpop.gremlin.server.channel.WebSocketChannelizer
 graphs: {
@@ -59,7 +57,6 @@ metrics: {
   gangliaReporter: {enabled: false, interval: 180000, addressingMode: MULTICAST},
   graphiteReporter: {enabled: false, interval: 180000}}
 strictTransactionManagement: false
-threadPoolBoss: 1
 maxInitialLineLength: 4096
 maxHeaderSize: 8192
 maxChunkSize: 8192

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/848e367e/gremlin-server/conf/gremlin-server-rest-modern.yaml
----------------------------------------------------------------------
diff --git a/gremlin-server/conf/gremlin-server-rest-modern.yaml b/gremlin-server/conf/gremlin-server-rest-modern.yaml
index dbfb1bb..a900204 100644
--- a/gremlin-server/conf/gremlin-server-rest-modern.yaml
+++ b/gremlin-server/conf/gremlin-server-rest-modern.yaml
@@ -17,8 +17,6 @@
 
 host: localhost
 port: 8182
-threadPoolWorker: 1
-gremlinPool: 8
 scriptEvaluationTimeout: 30000
 channelizer: org.apache.tinkerpop.gremlin.server.channel.HttpChannelizer
 graphs: {
@@ -36,7 +34,6 @@ serializers:
 metrics: {
   slf4jReporter: {enabled: true, interval: 180000}}
 strictTransactionManagement: false
-threadPoolBoss: 1
 maxInitialLineLength: 4096
 maxHeaderSize: 8192
 maxChunkSize: 8192

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/848e367e/gremlin-server/conf/gremlin-server-rest-secure.yaml
----------------------------------------------------------------------
diff --git a/gremlin-server/conf/gremlin-server-rest-secure.yaml b/gremlin-server/conf/gremlin-server-rest-secure.yaml
index 55d00ae..d017aa4 100644
--- a/gremlin-server/conf/gremlin-server-rest-secure.yaml
+++ b/gremlin-server/conf/gremlin-server-rest-secure.yaml
@@ -25,8 +25,6 @@
 
 host: localhost
 port: 8182
-threadPoolWorker: 1
-gremlinPool: 8
 scriptEvaluationTimeout: 30000
 channelizer: org.apache.tinkerpop.gremlin.server.channel.HttpChannelizer
 graphs: {
@@ -56,7 +54,6 @@ metrics: {
   gangliaReporter: {enabled: false, interval: 180000, addressingMode: MULTICAST},
   graphiteReporter: {enabled: false, interval: 180000}}
 strictTransactionManagement: false
-threadPoolBoss: 1
 maxInitialLineLength: 4096
 maxHeaderSize: 8192
 maxChunkSize: 8192

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/848e367e/gremlin-server/conf/gremlin-server-secure.yaml
----------------------------------------------------------------------
diff --git a/gremlin-server/conf/gremlin-server-secure.yaml b/gremlin-server/conf/gremlin-server-secure.yaml
index c61e59c..3c26bcf 100644
--- a/gremlin-server/conf/gremlin-server-secure.yaml
+++ b/gremlin-server/conf/gremlin-server-secure.yaml
@@ -25,8 +25,6 @@
 
 host: localhost
 port: 8182
-threadPoolWorker: 1
-gremlinPool: 8
 scriptEvaluationTimeout: 30000
 channelizer: org.apache.tinkerpop.gremlin.server.channel.WebSocketChannelizer
 graphs: {
@@ -59,7 +57,6 @@ metrics: {
   gangliaReporter: {enabled: false, interval: 180000, addressingMode: MULTICAST},
   graphiteReporter: {enabled: false, interval: 180000}}
 strictTransactionManagement: false
-threadPoolBoss: 1
 maxInitialLineLength: 4096
 maxHeaderSize: 8192
 maxChunkSize: 8192

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/848e367e/gremlin-server/conf/gremlin-server-spark.yaml
----------------------------------------------------------------------
diff --git a/gremlin-server/conf/gremlin-server-spark.yaml b/gremlin-server/conf/gremlin-server-spark.yaml
index d99cb87..3d339e8 100644
--- a/gremlin-server/conf/gremlin-server-spark.yaml
+++ b/gremlin-server/conf/gremlin-server-spark.yaml
@@ -40,8 +40,6 @@
 
 host: localhost
 port: 8182
-threadPoolWorker: 1
-gremlinPool: 8
 scriptEvaluationTimeout: 30000
 channelizer: org.apache.tinkerpop.gremlin.server.channel.WebSocketChannelizer
 graphs: {
@@ -72,7 +70,6 @@ metrics: {
   gangliaReporter: {enabled: false, interval: 180000, addressingMode: MULTICAST},
   graphiteReporter: {enabled: false, interval: 180000}}
 strictTransactionManagement: false
-threadPoolBoss: 1
 maxInitialLineLength: 4096
 maxHeaderSize: 8192
 maxChunkSize: 8192

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/848e367e/gremlin-server/conf/gremlin-server.yaml
----------------------------------------------------------------------
diff --git a/gremlin-server/conf/gremlin-server.yaml b/gremlin-server/conf/gremlin-server.yaml
index cf83ba7..2f4e4f4 100644
--- a/gremlin-server/conf/gremlin-server.yaml
+++ b/gremlin-server/conf/gremlin-server.yaml
@@ -17,8 +17,6 @@
 
 host: localhost
 port: 8182
-threadPoolWorker: 1
-gremlinPool: 8
 scriptEvaluationTimeout: 30000
 channelizer: org.apache.tinkerpop.gremlin.server.channel.WebSocketChannelizer
 graphs: {
@@ -49,7 +47,6 @@ metrics: {
   gangliaReporter: {enabled: false, interval: 180000, addressingMode: MULTICAST},
   graphiteReporter: {enabled: false, interval: 180000}}
 strictTransactionManagement: false
-threadPoolBoss: 1
 maxInitialLineLength: 4096
 maxHeaderSize: 8192
 maxChunkSize: 8192

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/848e367e/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/GremlinServer.java
----------------------------------------------------------------------
diff --git a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/GremlinServer.java b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/GremlinServer.java
index 4d76e30..7f84b0e 100644
--- a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/GremlinServer.java
+++ b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/GremlinServer.java
@@ -82,6 +82,7 @@ public class GremlinServer {
     public GremlinServer(final Settings settings) {
         settings.optionalMetrics().ifPresent(GremlinServer::configureMetrics);
         this.settings = settings;
+        provideDefaultForGremlinPoolSize(settings);
         this.isEpollEnabled = settings.useEpollEventLoop && SystemUtils.IS_OS_LINUX;
         if(settings.useEpollEventLoop && !SystemUtils.IS_OS_LINUX){
             logger.warn("cannot use epoll in non-linux env, falling back to NIO");
@@ -396,4 +397,9 @@ public class GremlinServer {
     private static void printHeader() {
         logger.info(getHeader());
     }
+
+    private static void provideDefaultForGremlinPoolSize(final Settings settings) {
+        if (settings.gremlinPool == 0)
+            settings.gremlinPool = Runtime.getRuntime().availableProcessors();
+    }
 }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/848e367e/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/Settings.java
----------------------------------------------------------------------
diff --git a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/Settings.java b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/Settings.java
index 112b43f..b36bd6a 100644
--- a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/Settings.java
+++ b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/Settings.java
@@ -88,10 +88,10 @@ public class Settings {
 
     /**
      * Size of the Gremlin thread pool. This pool handles Gremlin script execution and other related "long-run"
-     * processing.  This setting should be sufficiently large to ensure that requests processed by the non-blocking
-     * worker threads are processed with limited queuing.  Defaults to 8.
+     * processing. Defaults to a setting of 0 which indicates the value should be set to
+     * {@code Runtime#availableProcessors()}.
      */
-    public int gremlinPool = 8;
+    public int gremlinPool = 0;
 
     /**
      * Size of the boss thread pool.  Defaults to 1 and should likely stay at 1.  The bossy thread accepts incoming

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/848e367e/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/driver/remote/gremlin-server-integration.yaml
----------------------------------------------------------------------
diff --git a/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/driver/remote/gremlin-server-integration.yaml b/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/driver/remote/gremlin-server-integration.yaml
index 86245b5..8d20f54 100644
--- a/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/driver/remote/gremlin-server-integration.yaml
+++ b/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/driver/remote/gremlin-server-integration.yaml
@@ -17,8 +17,6 @@
 
 host: localhost
 port: 8182
-threadPoolWorker: 1
-gremlinPool: 8
 scriptEvaluationTimeout: 30000
 graphs: {
   graph: conf/tinkergraph-empty.properties,
@@ -52,7 +50,6 @@ metrics: {
   gangliaReporter: {enabled: false, interval: 180000, addressingMode: MULTICAST},
   graphiteReporter: {enabled: false, interval: 180000}}
 strictTransactionManagement: false
-threadPoolBoss: 1
 maxInitialLineLength: 4096
 maxHeaderSize: 8192
 maxChunkSize: 8192

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/848e367e/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/server/gremlin-server-integration.yaml
----------------------------------------------------------------------
diff --git a/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/server/gremlin-server-integration.yaml b/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/server/gremlin-server-integration.yaml
index 42b2899..9d92cd8 100644
--- a/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/server/gremlin-server-integration.yaml
+++ b/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/server/gremlin-server-integration.yaml
@@ -17,8 +17,6 @@
 
 host: localhost
 port: 8182
-threadPoolWorker: 1
-gremlinPool: 8
 scriptEvaluationTimeout: 30000
 graphs: {
   graph: conf/tinkergraph-empty.properties}
@@ -48,7 +46,6 @@ metrics: {
   gangliaReporter: {enabled: false, interval: 180000, addressingMode: MULTICAST},
   graphiteReporter: {enabled: false, interval: 180000}}
 strictTransactionManagement: false
-threadPoolBoss: 1
 maxInitialLineLength: 4096
 maxHeaderSize: 8192
 maxChunkSize: 8192

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/848e367e/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/server/gremlin-server-performance.yaml
----------------------------------------------------------------------
diff --git a/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/server/gremlin-server-performance.yaml b/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/server/gremlin-server-performance.yaml
index 177b55c..0c3a4a9 100644
--- a/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/server/gremlin-server-performance.yaml
+++ b/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/server/gremlin-server-performance.yaml
@@ -17,8 +17,6 @@
 
 host: localhost
 port: 8182
-threadPoolWorker: 1
-gremlinPool: 8
 scriptEvaluationTimeout: 30000
 graphs: {
   graph: conf/tinkergraph-empty.properties}
@@ -46,7 +44,6 @@ metrics: {
   gangliaReporter: {enabled: false, interval: 180000, addressingMode: MULTICAST},
   graphiteReporter: {enabled: false, interval: 180000}}
 strictTransactionManagement: false
-threadPoolBoss: 1
 maxInitialLineLength: 4096
 maxHeaderSize: 8192
 maxChunkSize: 8192


[02/48] tinkerpop git commit: TINKERPOP-1397 Fix StarGraph.addEdge

Posted by sp...@apache.org.
TINKERPOP-1397 Fix StarGraph.addEdge

For self-loops, StarGraph.addEdge used to put a single StarOutEdge
into both its inEdges and outEdges maps, potentially causing problems
in applyGraphFilter.

This change makes StarGraph.addEdge put the appropriate type of edge
(Star(Out/In)Edge) in the associated map.  The IDs for each edge
instance are kept in agreement.

This change is @okram's, who suggested it in PR #372.  I merely
reviewed it and added a couple of comments.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/0022b7f6
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/0022b7f6
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/0022b7f6

Branch: refs/heads/TINKERPOP-1278
Commit: 0022b7f6be25eb7d3c778b137beb6e8a7d2784ca
Parents: 4571061
Author: Dan LaRocque <da...@hopcount.org>
Authored: Wed Aug 10 18:52:13 2016 -0400
Committer: Dan LaRocque <da...@hopcount.org>
Committed: Wed Aug 10 19:10:39 2016 -0400

----------------------------------------------------------------------
 .../gremlin/structure/util/star/StarGraph.java     | 17 ++++++++++-------
 1 file changed, 10 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/0022b7f6/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/StarGraph.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/StarGraph.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/StarGraph.java
index f516630..2089c42 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/StarGraph.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/StarGraph.java
@@ -37,6 +37,7 @@ import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
 
 import java.io.Serializable;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.Iterator;
@@ -290,14 +291,16 @@ public final class StarGraph implements Graph, Serializable {
         public Edge addEdge(final String label, final Vertex inVertex, final Object... keyValues) {
             final Edge edge = this.addOutEdge(label, inVertex, keyValues);
             if (inVertex.equals(this)) {
-                if(null == this.inEdges)
-                    this.inEdges = new HashMap<>();
-                List<Edge> inE = this.inEdges.get(label);
-                if (null == inE) {
-                    inE = new ArrayList<>();
-                    this.inEdges.put(label, inE);
+                if (ElementHelper.getIdValue(keyValues).isPresent()) {
+                    // reuse edge ID from method params
+                    this.addInEdge(label, this, keyValues);
+                } else {
+                    // copy edge ID that we just allocated with addOutEdge
+                    final Object[] keyValuesWithId = Arrays.copyOf(keyValues, keyValues.length + 2);
+                    keyValuesWithId[keyValuesWithId.length - 2] = T.id;
+                    keyValuesWithId[keyValuesWithId.length - 1] = edge.id();
+                    this.addInEdge(label, this, keyValuesWithId);
                 }
-                inE.add(edge);
             }
             return edge;
         }


[46/48] tinkerpop git commit: Minor code cleanup.

Posted by sp...@apache.org.
Minor code cleanup.

Mostly finalizing variables where required. CTR


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/f929db03
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/f929db03
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/f929db03

Branch: refs/heads/TINKERPOP-1278
Commit: f929db03a9294c59f792e9c1b89a244203294d5a
Parents: 4710690
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Mon Aug 22 14:29:55 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Mon Aug 22 14:29:55 2016 -0400

----------------------------------------------------------------------
 .../traversal/util/DefaultTraversalMetrics.java |  11 +-
 .../process/traversal/util/MutableMetrics.java  |  10 +-
 .../structure/io/graphson/GraphSONMapper.java   |  31 +-
 .../io/graphson/GraphSONSerializersV2d0.java    |  47 +--
 .../io/graphson/GraphSONTypeDeserializer.java   |  42 ++-
 .../io/graphson/GraphSONTypeIdResolver.java     |  12 +-
 .../graphson/GraphSONTypeResolverBuilder.java   |  14 +-
 .../io/graphson/GraphSONTypeSerializer.java     |  37 +--
 .../structure/io/graphson/GraphSONUtil.java     |  10 +-
 .../structure/io/graphson/JsonParserConcat.java |   6 +-
 .../io/graphson/TinkerPopJacksonModule.java     |   2 +-
 .../io/graphson/ToStringGraphSONSerializer.java |   3 +-
 ...aphSONMapperV2d0PartialEmbeddedTypeTest.java |  26 +-
 .../AbstractGraphSONMessageSerializerV2d0.java  |   7 +-
 ...raphSONMessageSerializerGremlinTestV1d0.java |  14 +-
 ...raphSONMessageSerializerGremlinTestV2d0.java |  12 +-
 .../structure/TinkerIoRegistryV2d0.java         |   2 +-
 .../TinkerGraphGraphSONSerializerV2d0Test.java  | 286 ++++++++++---------
 18 files changed, 290 insertions(+), 282 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f929db03/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalMetrics.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalMetrics.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalMetrics.java
index 058386b..ce52ffc 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalMetrics.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalMetrics.java
@@ -39,7 +39,9 @@ import java.util.concurrent.TimeUnit;
  * @author Bob Briody (http://bobbriody.com)
  */
 public final class DefaultTraversalMetrics implements TraversalMetrics, Serializable {
-    // toString() specific headers
+    /**
+     * toString() specific headers
+     */
     private static final String[] HEADERS = {"Step", "Count", "Traversers", "Time (ms)", "% Dur"};
 
     private final Map<String, MutableMetrics> metrics = new HashMap<>();
@@ -54,9 +56,10 @@ public final class DefaultTraversalMetrics implements TraversalMetrics, Serializ
     public DefaultTraversalMetrics() {
     }
 
-    // This is only a convenient constructor needed for GraphSON deserialization.
-    // TODO: see if that's ok to add that.
-    public DefaultTraversalMetrics(long totalStepDurationNs, List<MutableMetrics> metricsMap) {
+    /**
+     * This is only a convenient constructor needed for GraphSON deserialization.
+     */
+    public DefaultTraversalMetrics(final long totalStepDurationNs, final List<MutableMetrics> metricsMap) {
         this.totalStepDuration = totalStepDurationNs;
         this.computedMetrics = new LinkedHashMap<>(metrics.size());
         metricsMap.forEach(m -> computedMetrics.put(m.getId(), m.getImmutableClone()));

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f929db03/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/MutableMetrics.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/MutableMetrics.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/MutableMetrics.java
index 3b0c886..19e2069 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/MutableMetrics.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/MutableMetrics.java
@@ -31,7 +31,7 @@ public class MutableMetrics extends ImmutableMetrics implements Cloneable {
 
     // Note: if you add new members then you probably need to add them to the copy constructor;
 
-    private long tempTime = -1l;
+    private long tempTime = -1L;
 
     protected MutableMetrics() {
         // necessary for gryo serialization
@@ -42,10 +42,10 @@ public class MutableMetrics extends ImmutableMetrics implements Cloneable {
         this.name = name;
     }
 
-    // create a MutableMetrics from an Immutable one.
-    // needed that for tests, don't know if it is worth keeping it public.
-    // TODO: see if it's ok to add this
-    public MutableMetrics(Metrics other) {
+    /**
+     * Create a {@code MutableMetrics} from an immutable one.
+     */
+    public MutableMetrics(final Metrics other) {
         this.id = other.getId();
         this.name = other.getName();
         this.annotations.putAll(other.getAnnotations());

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f929db03/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapper.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapper.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapper.java
index 2a000a3..06fe51c 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapper.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapper.java
@@ -90,7 +90,7 @@ public class GraphSONMapper implements Mapper<ObjectMapper> {
         final ObjectMapper om = new ObjectMapper();
         om.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
 
-        GraphSONModule graphSONModule = version.getBuilder().create(normalize);
+        final GraphSONModule graphSONModule = version.getBuilder().create(normalize);
         om.registerModule(graphSONModule);
         customModules.forEach(om::registerModule);
 
@@ -110,37 +110,33 @@ public class GraphSONMapper implements Mapper<ObjectMapper> {
             }
         } else if (version == GraphSONVersion.V2_0) {
             if (typeInfo != TypeInfo.NO_TYPES) {
-                GraphSONTypeIdResolver graphSONTypeIdResolver = new GraphSONTypeIdResolver();
+                final GraphSONTypeIdResolver graphSONTypeIdResolver = new GraphSONTypeIdResolver();
                 final TypeResolverBuilder typer = new GraphSONTypeResolverBuilder()
                         .typesEmbedding(getTypeInfo())
                         .valuePropertyName(GraphSONTokens.VALUEPROP)
                         .init(JsonTypeInfo.Id.CUSTOM, graphSONTypeIdResolver)
-                        .typeProperty(GraphSONTokens.VALUETYPE)
-                        ;
+                        .typeProperty(GraphSONTokens.VALUETYPE);
 
                 // Registers native Java types that are supported by Jackson
                 registerJavaBaseTypes(graphSONTypeIdResolver);
 
                 // Registers the GraphSON Module's types
-                graphSONModule.getTypeDefinitions()
-                        .forEach(
-                                (targetClass, typeId) -> graphSONTypeIdResolver.addCustomType(String.format("%s:%s", graphSONModule.getTypeNamespace(), typeId), targetClass)
-                        );
-
+                graphSONModule.getTypeDefinitions().forEach(
+                        (targetClass, typeId) -> graphSONTypeIdResolver.addCustomType(
+                                String.format("%s:%s", graphSONModule.getTypeNamespace(), typeId), targetClass));
 
                 // Register types to typeResolver for the Custom modules
                 customModules.forEach(e -> {
                     if (e instanceof TinkerPopJacksonModule) {
-                        TinkerPopJacksonModule mod = (TinkerPopJacksonModule) e;
-                        Map<Class, String> moduleTypeDefinitions = mod.getTypeDefinitions();
+                        final TinkerPopJacksonModule mod = (TinkerPopJacksonModule) e;
+                        final Map<Class, String> moduleTypeDefinitions = mod.getTypeDefinitions();
                         if (moduleTypeDefinitions != null) {
-                            if (mod.getTypeNamespace() == null || mod.getTypeNamespace().isEmpty()) {
+                            if (mod.getTypeNamespace() == null || mod.getTypeNamespace().isEmpty())
                                 throw new IllegalStateException("Cannot specify a module for GraphSON 2.0 with type definitions but without a type Domain. " +
                                         "If no specific type domain is required, use Gremlin's default domain, \"gremlin\" but there may be collisions.");
-                            }
-                            moduleTypeDefinitions.forEach(
-                                    (targetClass, typeId) -> graphSONTypeIdResolver.addCustomType(String.format("%s:%s", mod.getTypeNamespace(), typeId), targetClass)
-                            );
+
+                            moduleTypeDefinitions.forEach((targetClass, typeId) -> graphSONTypeIdResolver.addCustomType(
+                                            String.format("%s:%s", mod.getTypeNamespace(), typeId), targetClass));
                         }
                     }
                 });
@@ -277,7 +273,8 @@ public class GraphSONMapper implements Mapper<ObjectMapper> {
          * the value of {@link #embedTypes(boolean)} where {@link TypeInfo#PARTIAL_TYPES} will set it to true and
          * {@link TypeInfo#NO_TYPES} will set it to false.
          *
-         * The level can be NO_TYPES or PARTIAL_TYPES, and could be extended in the future.
+         * The level can be {@link TypeInfo#NO_TYPES} or {@link TypeInfo#PARTIAL_TYPES}, and could be extended in the
+         * future.
          */
         public Builder typeInfo(final TypeInfo typeInfo) {
             this.typeInfo = typeInfo;

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f929db03/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV2d0.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV2d0.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV2d0.java
index a689a11..f6a2f89 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV2d0.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV2d0.java
@@ -159,9 +159,7 @@ public class GraphSONSerializersV2d0 {
                 jsonGenerator.writeFieldName(GraphSONTokens.PROPERTIES);
 
                 jsonGenerator.writeStartObject();
-                elementProperties.forEachRemaining(
-                        prop -> safeWriteObjectField(jsonGenerator, prop.key(), prop)
-                );
+                elementProperties.forEachRemaining(prop -> safeWriteObjectField(jsonGenerator, prop.key(), prop));
                 jsonGenerator.writeEndObject();
             }
         }
@@ -271,7 +269,7 @@ public class GraphSONSerializersV2d0 {
         @Override
         public void serialize(final Tree tree, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider) throws IOException, JsonGenerationException {
             jsonGenerator.writeStartArray();
-            Set<Map.Entry<Element, Tree>> set = tree.entrySet();
+            final Set<Map.Entry<Element, Tree>> set = tree.entrySet();
             for (Map.Entry<Element, Tree> entry : set) {
                 jsonGenerator.writeStartObject();
                 jsonGenerator.writeObjectField(GraphSONTokens.KEY, entry.getKey());
@@ -326,7 +324,8 @@ public class GraphSONSerializersV2d0 {
         }
 
         @Override
-        public void serialize(Integer integer, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
+        public void serialize(final Integer integer, final JsonGenerator jsonGenerator,
+                              final SerializerProvider serializerProvider) throws IOException {
             jsonGenerator.writeNumber(((Integer) integer).intValue());
         }
     }
@@ -337,7 +336,8 @@ public class GraphSONSerializersV2d0 {
         }
 
         @Override
-        public void serialize(Double doubleValue, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
+        public void serialize(final Double doubleValue, final JsonGenerator jsonGenerator,
+                              final SerializerProvider serializerProvider) throws IOException {
             jsonGenerator.writeNumber(doubleValue);
         }
     }
@@ -367,7 +367,8 @@ public class GraphSONSerializersV2d0 {
         }
 
         @Override
-        public void serialize(Metrics metrics, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
+        public void serialize(final Metrics metrics, final JsonGenerator jsonGenerator,
+                              final SerializerProvider serializerProvider) throws IOException {
             final Map<String, Object> m = new HashMap<>();
             m.put(GraphSONTokens.ID, metrics.getId());
             m.put(GraphSONTokens.NAME, metrics.getName());
@@ -422,11 +423,11 @@ public class GraphSONSerializersV2d0 {
         }
 
         @Override
-        public T deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
+        public T deserialize(final JsonParser jsonParser, final DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
 
             jsonParser.nextToken();
             // This will automatically parse all typed stuff.
-            Map<String, Object> mapData = deserializationContext.readValue(jsonParser, Map.class);
+            final Map<String, Object> mapData = deserializationContext.readValue(jsonParser, Map.class);
 
             return createObject(mapData);
         }
@@ -442,7 +443,7 @@ public class GraphSONSerializersV2d0 {
         }
 
         @Override
-        Vertex createObject(Map<String, Object> vertexData) {
+        Vertex createObject(final Map<String, Object> vertexData) {
             return new DetachedVertex(
                     vertexData.get(GraphSONTokens.ID),
                     vertexData.get(GraphSONTokens.LABEL).toString(),
@@ -458,7 +459,7 @@ public class GraphSONSerializersV2d0 {
         }
 
         @Override
-        Edge createObject(Map<String, Object> edgeData) {
+        Edge createObject(final Map<String, Object> edgeData) {
             return new DetachedEdge(
                     edgeData.get(GraphSONTokens.ID),
                     edgeData.get(GraphSONTokens.LABEL).toString(),
@@ -476,7 +477,7 @@ public class GraphSONSerializersV2d0 {
         }
 
         @Override
-        Property createObject(Map<String, Object> propData) {
+        Property createObject(final Map<String, Object> propData) {
             return new DetachedProperty(
                     (String) propData.get(GraphSONTokens.KEY),
                     propData.get(GraphSONTokens.VALUE));
@@ -490,11 +491,11 @@ public class GraphSONSerializersV2d0 {
         }
 
         @Override
-        Path createObject(Map<String, Object> pathData) {
-            Path p = MutablePath.make();
+        Path createObject(final Map<String, Object> pathData) {
+            final Path p = MutablePath.make();
 
-            List labels = (List) pathData.get(GraphSONTokens.LABELS);
-            List objects = (List) pathData.get(GraphSONTokens.OBJECTS);
+            final List labels = (List) pathData.get(GraphSONTokens.LABELS);
+            final List objects = (List) pathData.get(GraphSONTokens.OBJECTS);
 
             for (int i = 0; i < objects.size(); i++) {
                 p.extend(objects.get(i), new HashSet((List) labels.get(i)));
@@ -510,7 +511,7 @@ public class GraphSONSerializersV2d0 {
         }
 
         @Override
-        VertexProperty createObject(Map<String, Object> propData) {
+        VertexProperty createObject(final Map<String, Object> propData) {
             return new DetachedVertexProperty(
                     propData.get(GraphSONTokens.ID),
                     (String) propData.get(GraphSONTokens.LABEL),
@@ -526,8 +527,8 @@ public class GraphSONSerializersV2d0 {
         }
 
         @Override
-        Metrics createObject(Map<String, Object> metricsData) {
-            MutableMetrics m = new MutableMetrics((String)metricsData.get(GraphSONTokens.ID), (String)metricsData.get(GraphSONTokens.NAME));
+        Metrics createObject(final Map<String, Object> metricsData) {
+            final MutableMetrics m = new MutableMetrics((String)metricsData.get(GraphSONTokens.ID), (String)metricsData.get(GraphSONTokens.NAME));
 
             m.setDuration(Math.round((Double) metricsData.get(GraphSONTokens.DURATION) * 1000000), TimeUnit.NANOSECONDS);
             for (Map.Entry<String, Long> count : ((Map<String, Long>)metricsData.getOrDefault(GraphSONTokens.COUNTS, new HashMap<>(0))).entrySet()) {
@@ -550,7 +551,7 @@ public class GraphSONSerializersV2d0 {
         }
 
         @Override
-        TraversalMetrics createObject(Map<String, Object> traversalMetricsData) {
+        TraversalMetrics createObject(final Map<String, Object> traversalMetricsData) {
             return new DefaultTraversalMetrics(
                     Math.round((Double) traversalMetricsData.get(GraphSONTokens.DURATION) * 1000000),
                     (List<MutableMetrics>) traversalMetricsData.get(GraphSONTokens.METRICS)
@@ -565,9 +566,9 @@ public class GraphSONSerializersV2d0 {
         }
 
         @Override
-        public Tree deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
-            List<Map> data = deserializationContext.readValue(jsonParser, List.class);
-            Tree t = new Tree();
+        public Tree deserialize(final JsonParser jsonParser, final DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
+            final List<Map> data = deserializationContext.readValue(jsonParser, List.class);
+            final Tree t = new Tree();
             for (Map<String, Object> entry : data) {
                 t.put(entry.get(GraphSONTokens.KEY), entry.get(GraphSONTokens.VALUE));
             }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f929db03/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeDeserializer.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeDeserializer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeDeserializer.java
index e614a7a..1950834 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeDeserializer.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeDeserializer.java
@@ -51,8 +51,8 @@ public class GraphSONTypeDeserializer extends TypeDeserializerBase {
     private static final JavaType arrayJavaType = TypeFactory.defaultInstance().constructType(List.class);
 
 
-    GraphSONTypeDeserializer(JavaType baseType, TypeIdResolver idRes, String typePropertyName,
-                             TypeInfo typeInfo, String valuePropertyName){
+    GraphSONTypeDeserializer(final JavaType baseType, final TypeIdResolver idRes, final String typePropertyName,
+                             final TypeInfo typeInfo, final String valuePropertyName){
         super(baseType, idRes, typePropertyName, false, null);
         this.baseType = baseType;
         this.idRes = idRes;
@@ -83,31 +83,31 @@ public class GraphSONTypeDeserializer extends TypeDeserializerBase {
     }
 
     @Override
-    public Object deserializeTypedFromObject(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException {
+    public Object deserializeTypedFromObject(final JsonParser jsonParser, final DeserializationContext deserializationContext) throws IOException {
         return deserialize(jsonParser, deserializationContext);
     }
 
     @Override
-    public Object deserializeTypedFromArray(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException {
+    public Object deserializeTypedFromArray(final JsonParser jsonParser, final DeserializationContext deserializationContext) throws IOException {
         return deserialize(jsonParser, deserializationContext);
     }
 
     @Override
-    public Object deserializeTypedFromScalar(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException {
+    public Object deserializeTypedFromScalar(final JsonParser jsonParser, final DeserializationContext deserializationContext) throws IOException {
         return deserialize(jsonParser, deserializationContext);
     }
 
     @Override
-    public Object deserializeTypedFromAny(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException {
+    public Object deserializeTypedFromAny(final JsonParser jsonParser, final DeserializationContext deserializationContext) throws IOException {
         return deserialize(jsonParser, deserializationContext);
     }
 
     /**
      * Main logic for the deserialization.
      */
-    private Object deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException {
-        TokenBuffer buf = new TokenBuffer(jsonParser.getCodec(), false);
-        TokenBuffer localCopy = new TokenBuffer(jsonParser.getCodec(), false);
+    private Object deserialize(final JsonParser jsonParser, final DeserializationContext deserializationContext) throws IOException {
+        final TokenBuffer buf = new TokenBuffer(jsonParser.getCodec(), false);
+        final TokenBuffer localCopy = new TokenBuffer(jsonParser.getCodec(), false);
 
         // Detect type
         try {
@@ -148,7 +148,7 @@ public class GraphSONTypeDeserializer extends TypeDeserializerBase {
 
                 if (typeName != null && valueCalled) {
                     // Type pattern detected.
-                    JavaType typeFromId = idRes.typeFromId(typeName);
+                    final JavaType typeFromId = idRes.typeFromId(typeName);
 
                     if (!baseType.isJavaLangObject() && baseType != typeFromId) {
                         throw new InstantiationException(
@@ -158,13 +158,13 @@ public class GraphSONTypeDeserializer extends TypeDeserializerBase {
                         );
                     }
 
-                    JsonDeserializer jsonDeserializer = deserializationContext.findContextualValueDeserializer(typeFromId, null);
+                    final JsonDeserializer jsonDeserializer = deserializationContext.findContextualValueDeserializer(typeFromId, null);
 
-                    JsonParser tokenParser = localCopy.asParser();
+                    final JsonParser tokenParser = localCopy.asParser();
                     tokenParser.nextToken();
-                    Object value = jsonDeserializer.deserialize(tokenParser, deserializationContext);
+                    final Object value = jsonDeserializer.deserialize(tokenParser, deserializationContext);
 
-                    JsonToken t = jsonParser.nextToken();
+                    final JsonToken t = jsonParser.nextToken();
                     if (t == JsonToken.END_OBJECT) {
                         // we're good to go
                         return value;
@@ -191,19 +191,17 @@ public class GraphSONTypeDeserializer extends TypeDeserializerBase {
 
         // Concatenate buf + localCopy + end of original content
 
-        JsonParser toUseParser;
-        JsonParser bufferParser = buf.asParser();
-        JsonParser localCopyParser = localCopy.asParser();
+        final JsonParser bufferParser = buf.asParser();
+        final JsonParser localCopyParser = localCopy.asParser();
 
+        final JsonParser[] array = {bufferParser, localCopyParser, jsonParser};
 
-        JsonParser[] array = {bufferParser, localCopyParser, jsonParser};
-
-        toUseParser = new JsonParserConcat(array);
+        final JsonParser toUseParser = new JsonParserConcat(array);
         toUseParser.nextToken();
 
         // If a type has been specified in parameter :
         if (!baseType.isJavaLangObject()) {
-            JsonDeserializer jsonDeserializer = deserializationContext.findContextualValueDeserializer(baseType, null);
+            final JsonDeserializer jsonDeserializer = deserializationContext.findContextualValueDeserializer(baseType, null);
             return jsonDeserializer.deserialize(toUseParser, deserializationContext);
         }
         // Otherwise, detect the current structure :
@@ -217,7 +215,7 @@ public class GraphSONTypeDeserializer extends TypeDeserializerBase {
                 // then consider it a simple type, even though we shouldn't be here if it was a simple type.
                 // TODO : maybe throw an error instead?
                 // throw deserializationContext.mappingException("Roger, we have a problem deserializing");
-                JsonDeserializer jsonDeserializer = deserializationContext.findContextualValueDeserializer(baseType, null);
+                final JsonDeserializer jsonDeserializer = deserializationContext.findContextualValueDeserializer(baseType, null);
                 return jsonDeserializer.deserialize(toUseParser, deserializationContext);
             }
         }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f929db03/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeIdResolver.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeIdResolver.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeIdResolver.java
index 3edff73..5ad7265 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeIdResolver.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeIdResolver.java
@@ -48,7 +48,7 @@ public class GraphSONTypeIdResolver implements TypeIdResolver {
     }
 
     // Override manually a type definition.
-    public GraphSONTypeIdResolver addCustomType(String name, Class clasz) {
+    public GraphSONTypeIdResolver addCustomType(final String name, final Class clasz) {
         // May override types already registered, that's wanted.
         getIdToType().put(name, TypeFactory.defaultInstance().constructType(clasz));
         getTypeToId().put(clasz, name);
@@ -56,16 +56,16 @@ public class GraphSONTypeIdResolver implements TypeIdResolver {
     }
 
     @Override
-    public void init(JavaType javaType) {
+    public void init(final JavaType javaType) {
     }
 
     @Override
-    public String idFromValue(Object o) {
+    public String idFromValue(final Object o) {
         return idFromValueAndType(o, o.getClass());
     }
 
     @Override
-    public String idFromValueAndType(Object o, Class<?> aClass) {
+    public String idFromValueAndType(final Object o, final Class<?> aClass) {
         if (!getTypeToId().containsKey(aClass)) {
             // If one wants to serialize an object with a type, but hasn't registered
             // a typeID for that class, fail.
@@ -82,12 +82,12 @@ public class GraphSONTypeIdResolver implements TypeIdResolver {
     }
 
     @Override
-    public JavaType typeFromId(String s) {
+    public JavaType typeFromId(final String s) {
         return typeFromId(null, s);
     }
 
     @Override
-    public JavaType typeFromId(DatabindContext databindContext, String s) {
+    public JavaType typeFromId(final DatabindContext databindContext, final String s) {
         // Get the type from the string from the stored Map. If not found, default to deserialize as a String.
         return getIdToType().containsKey(s)
                 ? getIdToType().get(s)

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f929db03/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeResolverBuilder.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeResolverBuilder.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeResolverBuilder.java
index 001dd02..7d3d03c 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeResolverBuilder.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeResolverBuilder.java
@@ -41,24 +41,26 @@ public class GraphSONTypeResolverBuilder extends StdTypeResolverBuilder {
     private String valuePropertyName;
 
     @Override
-    public TypeDeserializer buildTypeDeserializer(DeserializationConfig config, JavaType baseType, Collection<NamedType> subtypes) {
-        TypeIdResolver idRes = this.idResolver(config, baseType, subtypes, false, true);
+    public TypeDeserializer buildTypeDeserializer(final DeserializationConfig config, final JavaType baseType,
+                                                  final Collection<NamedType> subtypes) {
+        final TypeIdResolver idRes = this.idResolver(config, baseType, subtypes, false, true);
         return new GraphSONTypeDeserializer(baseType, idRes, this.getTypeProperty(), typeInfo, valuePropertyName);
     }
 
 
     @Override
-    public TypeSerializer buildTypeSerializer(SerializationConfig config, JavaType baseType, Collection<NamedType> subtypes) {
-        TypeIdResolver idRes = this.idResolver(config, baseType, subtypes, true, false);
+    public TypeSerializer buildTypeSerializer(final SerializationConfig config, final JavaType baseType,
+                                              final Collection<NamedType> subtypes) {
+        final TypeIdResolver idRes = this.idResolver(config, baseType, subtypes, true, false);
         return new GraphSONTypeSerializer(idRes, this.getTypeProperty(), typeInfo, valuePropertyName);
     }
 
-    public GraphSONTypeResolverBuilder valuePropertyName(String valuePropertyName) {
+    public GraphSONTypeResolverBuilder valuePropertyName(final String valuePropertyName) {
         this.valuePropertyName = valuePropertyName;
         return this;
     }
 
-    public GraphSONTypeResolverBuilder typesEmbedding(TypeInfo typeInfo) {
+    public GraphSONTypeResolverBuilder typesEmbedding(final TypeInfo typeInfo) {
         this.typeInfo = typeInfo;
         return this;
     }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f929db03/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeSerializer.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeSerializer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeSerializer.java
index 98cf16a..01e5a79 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeSerializer.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeSerializer.java
@@ -48,7 +48,8 @@ public class GraphSONTypeSerializer extends TypeSerializer {
     private final TypeInfo typeInfo;
     private final String valuePropertyName;
 
-    GraphSONTypeSerializer(TypeIdResolver idRes, String propertyName, TypeInfo typeInfo, String valuePropertyName) {
+    GraphSONTypeSerializer(final TypeIdResolver idRes, final String propertyName, final TypeInfo typeInfo,
+                           final String valuePropertyName) {
         this.idRes = idRes;
         this.propertyName = propertyName;
         this.typeInfo = typeInfo;
@@ -56,7 +57,7 @@ public class GraphSONTypeSerializer extends TypeSerializer {
     }
 
     @Override
-    public TypeSerializer forProperty(BeanProperty beanProperty) {
+    public TypeSerializer forProperty(final BeanProperty beanProperty) {
         return this;
     }
 
@@ -76,77 +77,77 @@ public class GraphSONTypeSerializer extends TypeSerializer {
     }
 
     @Override
-    public void writeTypePrefixForScalar(Object o, JsonGenerator jsonGenerator) throws IOException {
+    public void writeTypePrefixForScalar(final Object o, final JsonGenerator jsonGenerator) throws IOException {
         if (canWriteTypeId()) {
             writeTypePrefix(jsonGenerator, getTypeIdResolver().idFromValueAndType(o, getClassFromObject(o)));
         }
     }
 
     @Override
-    public void writeTypePrefixForObject(Object o, JsonGenerator jsonGenerator) throws IOException {
+    public void writeTypePrefixForObject(final Object o, final JsonGenerator jsonGenerator) throws IOException {
         jsonGenerator.writeStartObject();
         // TODO: FULL_TYPES should be implemented here as : if (fullTypesModeEnabled()) writeTypePrefix(Map);
     }
 
     @Override
-    public void writeTypePrefixForArray(Object o, JsonGenerator jsonGenerator) throws IOException {
+    public void writeTypePrefixForArray(final Object o, final JsonGenerator jsonGenerator) throws IOException {
         jsonGenerator.writeStartArray();
         // TODO: FULL_TYPES should be implemented here as : if (fullTypesModeEnabled()) writeTypePrefix(List);
     }
 
     @Override
-    public void writeTypeSuffixForScalar(Object o, JsonGenerator jsonGenerator) throws IOException {
+    public void writeTypeSuffixForScalar(final Object o, final JsonGenerator jsonGenerator) throws IOException {
         if (canWriteTypeId()) {
             writeTypeSuffix(jsonGenerator);
         }
     }
 
     @Override
-    public void writeTypeSuffixForObject(Object o, JsonGenerator jsonGenerator) throws IOException {
+    public void writeTypeSuffixForObject(final Object o, final JsonGenerator jsonGenerator) throws IOException {
         jsonGenerator.writeEndObject();
         // TODO: FULL_TYPES should be implemented here as : if (fullTypesModeEnabled()) writeTypeSuffix(Map);
     }
 
     @Override
-    public void writeTypeSuffixForArray(Object o, JsonGenerator jsonGenerator) throws IOException {
+    public void writeTypeSuffixForArray(final Object o, final JsonGenerator jsonGenerator) throws IOException {
         jsonGenerator.writeEndArray();
         // TODO: FULL_TYPES should be implemented here as : if (fullTypesModeEnabled()) writeTypeSuffix(List);
     }
 
     @Override
-    public void writeCustomTypePrefixForScalar(Object o, JsonGenerator jsonGenerator, String s) throws IOException {
+    public void writeCustomTypePrefixForScalar(final Object o, final JsonGenerator jsonGenerator, final String s) throws IOException {
         if (canWriteTypeId()) {
             writeTypePrefix(jsonGenerator, s);
         }
     }
 
     @Override
-    public void writeCustomTypePrefixForObject(Object o, JsonGenerator jsonGenerator, String s) throws IOException {
+    public void writeCustomTypePrefixForObject(final Object o, final JsonGenerator jsonGenerator, final String s) throws IOException {
         jsonGenerator.writeStartObject();
         // TODO: FULL_TYPES should be implemented here as : if (fullTypesModeEnabled()) writeTypePrefix(s);
     }
 
     @Override
-    public void writeCustomTypePrefixForArray(Object o, JsonGenerator jsonGenerator, String s) throws IOException {
+    public void writeCustomTypePrefixForArray(final Object o, final JsonGenerator jsonGenerator, final String s) throws IOException {
         jsonGenerator.writeStartArray();
         // TODO: FULL_TYPES should be implemented here as : if (fullTypesModeEnabled()) writeTypePrefix(s);
     }
 
     @Override
-    public void writeCustomTypeSuffixForScalar(Object o, JsonGenerator jsonGenerator, String s) throws IOException {
+    public void writeCustomTypeSuffixForScalar(final Object o, final JsonGenerator jsonGenerator, final String s) throws IOException {
         if (canWriteTypeId()) {
             writeTypeSuffix(jsonGenerator);
         }
     }
 
     @Override
-    public void writeCustomTypeSuffixForObject(Object o, JsonGenerator jsonGenerator, String s) throws IOException {
+    public void writeCustomTypeSuffixForObject(final Object o, final JsonGenerator jsonGenerator, final String s) throws IOException {
         jsonGenerator.writeEndObject();
         // TODO: FULL_TYPES should be implemented here as : if (fullTypesModeEnabled()) writeTypeSuffix(s);
     }
 
     @Override
-    public void writeCustomTypeSuffixForArray(Object o, JsonGenerator jsonGenerator, String s) throws IOException {
+    public void writeCustomTypeSuffixForArray(final Object o, final JsonGenerator jsonGenerator,final  String s) throws IOException {
         jsonGenerator.writeEndArray();
         // TODO: FULL_TYPES should be implemented here as : if (fullTypesModeEnabled()) writeTypeSuffix(s);
     }
@@ -156,13 +157,13 @@ public class GraphSONTypeSerializer extends TypeSerializer {
                 && typeInfo == TypeInfo.PARTIAL_TYPES;
     }
 
-    private void writeTypePrefix(JsonGenerator jsonGenerator, String s) throws IOException {
+    private void writeTypePrefix(final JsonGenerator jsonGenerator, final String s) throws IOException {
         jsonGenerator.writeStartObject();
         jsonGenerator.writeStringField(this.getPropertyName(), s);
         jsonGenerator.writeFieldName(this.valuePropertyName);
     }
 
-    private void writeTypeSuffix(JsonGenerator jsonGenerator) throws IOException {
+    private void writeTypeSuffix(final JsonGenerator jsonGenerator) throws IOException {
         jsonGenerator.writeEndObject();
     }
 
@@ -172,9 +173,9 @@ public class GraphSONTypeSerializer extends TypeSerializer {
      **not** their implementations (TinkerGraph, DetachedVertex, TinkerEdge,
      etc..)
     */
-    private Class getClassFromObject(Object o) {
+    private Class getClassFromObject(final Object o) {
         // not the most efficient
-        Class c = o.getClass();
+        final  Class c = o.getClass();
         if (Vertex.class.isAssignableFrom(c)) {
             return Vertex.class;
         } else if (Edge.class.isAssignableFrom(c)) {

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f929db03/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONUtil.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONUtil.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONUtil.java
index 548bca1..9b90c78 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONUtil.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONUtil.java
@@ -56,21 +56,21 @@ public final class GraphSONUtil {
         }
     }
 
-    public static void writeStartObject(Object o, JsonGenerator jsonGenerator, TypeSerializer typeSerializer) throws IOException {
+    public static void writeStartObject(final Object o, final JsonGenerator jsonGenerator, final TypeSerializer typeSerializer) throws IOException {
         if (typeSerializer != null)
             typeSerializer.writeTypePrefixForObject(o, jsonGenerator);
         else
             jsonGenerator.writeStartObject();
     }
 
-    public static void writeEndObject(Object o, JsonGenerator jsonGenerator, TypeSerializer typeSerializer) throws IOException {
+    public static void writeEndObject(final Object o, final JsonGenerator jsonGenerator, final TypeSerializer typeSerializer) throws IOException {
         if (typeSerializer != null)
             typeSerializer.writeTypeSuffixForObject(o, jsonGenerator);
         else
             jsonGenerator.writeEndObject();
     }
 
-    public static void writeStartArray(Object o, JsonGenerator jsonGenerator, TypeSerializer typeSerializer) throws IOException {
+    public static void writeStartArray(final Object o, final JsonGenerator jsonGenerator, final TypeSerializer typeSerializer) throws IOException {
         if (typeSerializer != null)
             typeSerializer.writeTypePrefixForArray(o, jsonGenerator);
         else
@@ -78,14 +78,14 @@ public final class GraphSONUtil {
     }
 
 
-    public static void writeEndArray(Object o, JsonGenerator jsonGenerator, TypeSerializer typeSerializer) throws IOException {
+    public static void writeEndArray(final Object o, final JsonGenerator jsonGenerator, final TypeSerializer typeSerializer) throws IOException {
         if (typeSerializer != null)
             typeSerializer.writeTypeSuffixForArray(o, jsonGenerator);
         else
             jsonGenerator.writeEndArray();
     }
 
-    static void safeWriteObjectField(JsonGenerator jsonGenerator, String key, Object value) {
+    static void safeWriteObjectField(final JsonGenerator jsonGenerator, final String key, final Object value) {
         try {
             jsonGenerator.writeObjectField(key, value);
         } catch (IOException e) {

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f929db03/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/JsonParserConcat.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/JsonParserConcat.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/JsonParserConcat.java
index 6b19e48..d285f73 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/JsonParserConcat.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/JsonParserConcat.java
@@ -37,15 +37,15 @@ import java.util.ArrayList;
  * @author Kevin Gallardo (https://kgdo.me)
  */
 public class JsonParserConcat extends JsonParserSequence {
-    protected JsonParserConcat(JsonParser[] parsers) {
+    protected JsonParserConcat(final JsonParser[] parsers) {
         super(parsers);
     }
 
-    public static JsonParserConcat createFlattened(JsonParser first, JsonParser second) {
+    public static JsonParserConcat createFlattened(final JsonParser first, final JsonParser second) {
         if (!(first instanceof JsonParserConcat) && !(second instanceof JsonParserConcat)) {
             return new JsonParserConcat(new JsonParser[]{first, second});
         } else {
-            ArrayList p = new ArrayList();
+            final ArrayList p = new ArrayList();
             if (first instanceof JsonParserConcat) {
                 ((JsonParserConcat) first).addFlattenedActiveParsers(p);
             } else {

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f929db03/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TinkerPopJacksonModule.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TinkerPopJacksonModule.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TinkerPopJacksonModule.java
index 847027c..d15afcd 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TinkerPopJacksonModule.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TinkerPopJacksonModule.java
@@ -38,7 +38,7 @@ import java.util.Map;
  */
 public abstract class TinkerPopJacksonModule extends SimpleModule {
 
-    public TinkerPopJacksonModule(String name) {
+    public TinkerPopJacksonModule(final String name) {
         super(name);
     }
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f929db03/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/ToStringGraphSONSerializer.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/ToStringGraphSONSerializer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/ToStringGraphSONSerializer.java
index fbd9e00..3f155fe 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/ToStringGraphSONSerializer.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/ToStringGraphSONSerializer.java
@@ -34,7 +34,8 @@ import java.io.IOException;
  */
 public class ToStringGraphSONSerializer extends ToStringSerializer {
     @Override
-    public void serializeWithType(Object value, JsonGenerator gen, SerializerProvider provider, TypeSerializer typeSer) throws IOException {
+    public void serializeWithType(final Object value, final JsonGenerator gen, final SerializerProvider provider,
+                                  final TypeSerializer typeSer) throws IOException {
         this.serialize(value, gen, provider);
     }
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f929db03/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperV2d0PartialEmbeddedTypeTest.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperV2d0PartialEmbeddedTypeTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperV2d0PartialEmbeddedTypeTest.java
index c2ad05e..e02588f 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperV2d0PartialEmbeddedTypeTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperV2d0PartialEmbeddedTypeTest.java
@@ -143,19 +143,19 @@ public class GraphSONMapperV2d0PartialEmbeddedTypeTest {
     @Test
     // Trying to fail the TypeDeserializer type detection
     public void shouldSerializeDeserializeNestedCollectionsAndMapAndTypedValuesCorrectly() throws Exception {
-        UUID uuid = UUID.randomUUID();
-        List myList = new ArrayList<>();
+        final UUID uuid = UUID.randomUUID();
+        final List myList = new ArrayList<>();
 
-        List myList2 = new ArrayList<>();
+        final List myList2 = new ArrayList<>();
         myList2.add(UUID.randomUUID());
         myList2.add(33L);
         myList2.add(84);
-        Map map2 = new HashMap<>();
+        final Map map2 = new HashMap<>();
         map2.put("eheh", UUID.randomUUID());
         map2.put("normal", "normal");
         myList2.add(map2);
 
-        Map<String, Object> map1 = new HashMap<>();
+        final Map<String, Object> map1 = new HashMap<>();
         map1.put("hello", "world");
         map1.put("test", uuid);
         map1.put("hehe", myList2);
@@ -265,25 +265,25 @@ public class GraphSONMapperV2d0PartialEmbeddedTypeTest {
 
     @Test
     public void shouldLooseTypesInfoWithGraphSONNoType() throws Exception {
-        ObjectMapper mapper = GraphSONMapper.build()
+        final ObjectMapper mapper = GraphSONMapper.build()
                 .version(GraphSONVersion.V2_0)
                 .typeInfo(TypeInfo.NO_TYPES)
                 .create()
                 .createMapper();
 
-        UUID uuid = UUID.randomUUID();
-        List myList = new ArrayList<>();
+        final UUID uuid = UUID.randomUUID();
+        final List myList = new ArrayList<>();
 
-        List myList2 = new ArrayList<>();
+        final List myList2 = new ArrayList<>();
         myList2.add(UUID.randomUUID());
         myList2.add(33L);
         myList2.add(84);
-        Map map2 = new HashMap<>();
+        final Map map2 = new HashMap<>();
         map2.put("eheh", UUID.randomUUID());
         map2.put("normal", "normal");
         myList2.add(map2);
 
-        Map<String, Object> map1 = new HashMap<>();
+        final Map<String, Object> map1 = new HashMap<>();
         map1.put("hello", "world");
         map1.put("test", uuid);
         map1.put("hehe", myList2);
@@ -292,8 +292,8 @@ public class GraphSONMapperV2d0PartialEmbeddedTypeTest {
         myList.add("kjkj");
         myList.add(UUID.randomUUID());
 
-        String json = mapper.writeValueAsString(myList);
-        Object read = mapper.readValue(json, Object.class);
+        final String json = mapper.writeValueAsString(myList);
+        final Object read = mapper.readValue(json, Object.class);
 
         // Not equals because of type loss
         assertNotEquals(myList, read);

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f929db03/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/AbstractGraphSONMessageSerializerV2d0.java
----------------------------------------------------------------------
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/AbstractGraphSONMessageSerializerV2d0.java b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/AbstractGraphSONMessageSerializerV2d0.java
index d0303eb..d846a69 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/AbstractGraphSONMessageSerializerV2d0.java
+++ b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/AbstractGraphSONMessageSerializerV2d0.java
@@ -228,12 +228,9 @@ public abstract class AbstractGraphSONMessageSerializerV2d0 extends AbstractMess
 
             GraphSONUtil.writeStartObject(responseMessage, jsonGenerator, typeSerializer);
 
-            if (null == responseMessage.getResult().getData())
-            {
+            if (null == responseMessage.getResult().getData()){
                 jsonGenerator.writeNullField(SerTokens.TOKEN_DATA);
-            }
-            else
-            {
+            } else {
                 jsonGenerator.writeFieldName(SerTokens.TOKEN_DATA);
                 Object result = responseMessage.getResult().getData();
                 serializerProvider.findTypedValueSerializer(result.getClass(), true, null).serialize(result, jsonGenerator, serializerProvider);

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f929db03/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerGremlinTestV1d0.java
----------------------------------------------------------------------
diff --git a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerGremlinTestV1d0.java b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerGremlinTestV1d0.java
index 95907f9..c18aca7 100644
--- a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerGremlinTestV1d0.java
+++ b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerGremlinTestV1d0.java
@@ -269,22 +269,22 @@ public class GraphSONMessageSerializerGremlinTestV1d0 {
         assertEquals(1, deserializedMap.size());
 
         //check the first object and it's properties
-        Map<String,Object> vertex = deserializedMap.get("1").get("key");
-        Map<String,List<Map>> vertexProperties = (Map<String, List<Map>>)vertex.get("properties");
+        final Map<String,Object> vertex = deserializedMap.get("1").get("key");
+        final Map<String,List<Map>> vertexProperties = (Map<String, List<Map>>)vertex.get("properties");
         assertEquals(1, (int)vertex.get("id"));
         assertEquals("marko", vertexProperties.get("name").get(0).get("value"));
 
         //check objects tree structure
         //check Vertex property
-        Map<String, Map<String, Map>> subTreeMap =  deserializedMap.get("1").get("value");
-        Map<String, Map<String, Map>> subTreeMap2 = subTreeMap.get("2").get("value");
-        Map<String, String> vertexPropertiesDeep = subTreeMap2.get("3").get("key");
+        final Map<String, Map<String, Map>> subTreeMap =  deserializedMap.get("1").get("value");
+        final Map<String, Map<String, Map>> subTreeMap2 = subTreeMap.get("2").get("value");
+        final Map<String, String> vertexPropertiesDeep = subTreeMap2.get("3").get("key");
         assertEquals("vadas", vertexPropertiesDeep.get("value"));
         assertEquals("name", vertexPropertiesDeep.get("label"));
 
         // check subitem
-        Map<String,Object> vertex2 = subTreeMap.get("3").get("key");
-        Map<String,List<Map>> vertexProperties2 = (Map<String, List<Map>>)vertex2.get("properties");
+        final Map<String,Object> vertex2 = subTreeMap.get("3").get("key");
+        final Map<String,List<Map>> vertexProperties2 = (Map<String, List<Map>>)vertex2.get("properties");
 
         assertEquals("lop", vertexProperties2.get("name").get(0).get("value"));
     }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f929db03/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerGremlinTestV2d0.java
----------------------------------------------------------------------
diff --git a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerGremlinTestV2d0.java b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerGremlinTestV2d0.java
index a7f8389..b85a45f 100644
--- a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerGremlinTestV2d0.java
+++ b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerGremlinTestV2d0.java
@@ -57,11 +57,11 @@ import static org.junit.Assert.fail;
  */
 public class GraphSONMessageSerializerGremlinTestV2d0 {
 
-    private UUID requestId = UUID.fromString("6457272A-4018-4538-B9AE-08DD5DDC0AA1");
-    private ResponseMessage.Builder responseMessageBuilder = ResponseMessage.build(requestId);
-    private static ByteBufAllocator allocator = UnpooledByteBufAllocator.DEFAULT;
+    private final UUID requestId = UUID.fromString("6457272A-4018-4538-B9AE-08DD5DDC0AA1");
+    private final ResponseMessage.Builder responseMessageBuilder = ResponseMessage.build(requestId);
+    private final static ByteBufAllocator allocator = UnpooledByteBufAllocator.DEFAULT;
 
-    public MessageSerializer serializer = new GraphSONMessageSerializerGremlinV2d0();
+    public final MessageSerializer serializer = new GraphSONMessageSerializerGremlinV2d0();
 
     @Test
     public void shouldSerializeIterable() throws Exception {
@@ -272,11 +272,11 @@ public class GraphSONMessageSerializerGremlinTestV2d0 {
 
         //check the first object and its key's properties
         assertEquals(1, deserializedTree.size());
-        Vertex v = ((Vertex) deserializedTree.keySet().iterator().next());
+        final Vertex v = ((Vertex) deserializedTree.keySet().iterator().next());
         assertEquals(1, v.id());
         assertEquals("marko", v.property("name").value());
 
-        Tree firstTree = (Tree)deserializedTree.get(v);
+        final Tree firstTree = (Tree)deserializedTree.get(v);
         assertEquals(3, firstTree.size());
         Iterator<Vertex> vertexKeys = firstTree.keySet().iterator();
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f929db03/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerIoRegistryV2d0.java
----------------------------------------------------------------------
diff --git a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerIoRegistryV2d0.java b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerIoRegistryV2d0.java
index 97c1cba..da9edb5 100644
--- a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerIoRegistryV2d0.java
+++ b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerIoRegistryV2d0.java
@@ -183,7 +183,7 @@ public final class TinkerIoRegistryV2d0 extends AbstractIoRegistry {
         }
 
         @Override
-        public TinkerGraph deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
+        public TinkerGraph deserialize(final JsonParser jsonParser, final DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
             final TinkerGraph graph = TinkerGraph.open();
 
             final List<? extends Edge> edges;

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f929db03/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphGraphSONSerializerV2d0Test.java
----------------------------------------------------------------------
diff --git a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphGraphSONSerializerV2d0Test.java b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphGraphSONSerializerV2d0Test.java
index 907aaed..9005233 100644
--- a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphGraphSONSerializerV2d0Test.java
+++ b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphGraphSONSerializerV2d0Test.java
@@ -54,17 +54,18 @@ import java.util.UUID;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
 
 
 public class TinkerGraphGraphSONSerializerV2d0Test {
 
     // As of TinkerPop 3.2.1 default for GraphSON 2.0 means types enabled.
-    Mapper defaultMapperV2d0 = GraphSONMapper.build()
+    private final Mapper defaultMapperV2d0 = GraphSONMapper.build()
             .version(GraphSONVersion.V2_0)
             .addRegistry(TinkerIoRegistryV2d0.getInstance())
             .create();
 
-    Mapper noTypesMapperV2d0 = GraphSONMapper.build()
+    private final Mapper noTypesMapperV2d0 = GraphSONMapper.build()
             .version(GraphSONVersion.V2_0)
             .typeInfo(TypeInfo.NO_TYPES)
             .addRegistry(TinkerIoRegistryV2d0.getInstance())
@@ -75,14 +76,14 @@ public class TinkerGraphGraphSONSerializerV2d0Test {
      */
     @Test
     public void shouldDeserializeGraphSONIntoTinkerGraphWithPartialTypes() throws IOException {
-        GraphWriter writer = getWriter(defaultMapperV2d0);
-        GraphReader reader = getReader(defaultMapperV2d0);
-        TinkerGraph baseModern = TinkerFactory.createModern();
+        final GraphWriter writer = getWriter(defaultMapperV2d0);
+        final GraphReader reader = getReader(defaultMapperV2d0);
+        final  TinkerGraph baseModern = TinkerFactory.createModern();
 
         try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
             writer.writeGraph(out, baseModern);
-            String json = out.toString();
-            TinkerGraph read = TinkerGraph.open();
+            final String json = out.toString();
+            final TinkerGraph read = TinkerGraph.open();
             reader.readGraph(new ByteArrayInputStream(json.getBytes()), read);
             IoTest.assertModernGraph(read, true, false);
         }
@@ -93,14 +94,14 @@ public class TinkerGraphGraphSONSerializerV2d0Test {
      */
     @Test
     public void shouldDeserializeGraphSONIntoTinkerGraphWithoutTypes() throws IOException {
-        GraphWriter writer = getWriter(noTypesMapperV2d0);
-        GraphReader reader = getReader(noTypesMapperV2d0);
-        TinkerGraph baseModern = TinkerFactory.createModern();
+        final GraphWriter writer = getWriter(noTypesMapperV2d0);
+        final GraphReader reader = getReader(noTypesMapperV2d0);
+        final TinkerGraph baseModern = TinkerFactory.createModern();
 
         try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
             writer.writeGraph(out, baseModern);
-            String json = out.toString();
-            TinkerGraph read = TinkerGraph.open();
+            final String json = out.toString();
+            final TinkerGraph read = TinkerGraph.open();
             reader.readGraph(new ByteArrayInputStream(json.getBytes()), read);
             IoTest.assertModernGraph(read, true, false);
         }
@@ -111,20 +112,20 @@ public class TinkerGraphGraphSONSerializerV2d0Test {
      */
     @Test
     public void shouldDeserializeGraphSONIntoTinkerGraphKeepingTypes() throws IOException {
-        GraphWriter writer = getWriter(defaultMapperV2d0);
-        GraphReader reader = getReader(defaultMapperV2d0);
+        final GraphWriter writer = getWriter(defaultMapperV2d0);
+        final GraphReader reader = getReader(defaultMapperV2d0);
 
-        Graph sampleGraph1 = TinkerFactory.createModern();
-        Vertex v1 = sampleGraph1.addVertex(T.id, 100, "name", "kevin", "theUUID", UUID.randomUUID());
-        Vertex v2 = sampleGraph1.addVertex(T.id, 101L, "name", "henri", "theUUID", UUID.randomUUID());
+        final Graph sampleGraph1 = TinkerFactory.createModern();
+        final Vertex v1 = sampleGraph1.addVertex(T.id, 100, "name", "kevin", "theUUID", UUID.randomUUID());
+        final Vertex v2 = sampleGraph1.addVertex(T.id, 101L, "name", "henri", "theUUID", UUID.randomUUID());
         v1.addEdge("hello", v2, T.id, 101L,
                 "uuid", UUID.randomUUID());
 
         try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
             writer.writeObject(out, sampleGraph1);
-            String json = out.toString();
+            final String json = out.toString();
 
-            TinkerGraph read = reader.readObject(new ByteArrayInputStream(json.getBytes()), TinkerGraph.class);
+            final TinkerGraph read = reader.readObject(new ByteArrayInputStream(json.getBytes()), TinkerGraph.class);
             assertTrue(approximateGraphsCheck(sampleGraph1, read));
         }
     }
@@ -134,14 +135,14 @@ public class TinkerGraphGraphSONSerializerV2d0Test {
      */
     @Test
     public void shouldLooseTypesWithGraphSONNoTypesForVertexIds() throws IOException {
-        GraphWriter writer = getWriter(noTypesMapperV2d0);
-        GraphReader reader = getReader(noTypesMapperV2d0);
-        Graph sampleGraph1 = TinkerFactory.createModern();
+        final GraphWriter writer = getWriter(noTypesMapperV2d0);
+        final GraphReader reader = getReader(noTypesMapperV2d0);
+        final Graph sampleGraph1 = TinkerFactory.createModern();
         sampleGraph1.addVertex(T.id, 100L, "name", "kevin");
         try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
             writer.writeGraph(out, sampleGraph1);
-            String json = out.toString();
-            TinkerGraph read = TinkerGraph.open();
+            final String json = out.toString();
+            final TinkerGraph read = TinkerGraph.open();
             reader.readGraph(new ByteArrayInputStream(json.getBytes()), read);
             // Should fail on deserialized vertex Id.
             assertFalse(approximateGraphsCheck(sampleGraph1, read));
@@ -153,15 +154,15 @@ public class TinkerGraphGraphSONSerializerV2d0Test {
      */
     @Test
     public void shouldLooseTypesWithGraphSONNoTypesForVertexProps() throws IOException {
-        GraphWriter writer = getWriter(noTypesMapperV2d0);
-        GraphReader reader = getReader(noTypesMapperV2d0);
-        Graph sampleGraph1 = TinkerFactory.createModern();
+        final GraphWriter writer = getWriter(noTypesMapperV2d0);
+        final GraphReader reader = getReader(noTypesMapperV2d0);
+        final Graph sampleGraph1 = TinkerFactory.createModern();
 
         sampleGraph1.addVertex(T.id, 100, "name", "kevin", "uuid", UUID.randomUUID());
         try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
             writer.writeGraph(out, sampleGraph1);
-            String json = out.toString();
-            TinkerGraph read = TinkerGraph.open();
+            final String json = out.toString();
+            final TinkerGraph read = TinkerGraph.open();
             reader.readGraph(new ByteArrayInputStream(json.getBytes()), read);
             // Should fail on deserialized vertex prop.
             assertFalse(approximateGraphsCheck(sampleGraph1, read));
@@ -173,15 +174,15 @@ public class TinkerGraphGraphSONSerializerV2d0Test {
      */
     @Test
     public void shouldLooseTypesWithGraphSONNoTypesForEdgeIds() throws IOException {
-        GraphWriter writer = getWriter(noTypesMapperV2d0);
-        GraphReader reader = getReader(noTypesMapperV2d0);
-        Graph sampleGraph1 = TinkerFactory.createModern();
-        Vertex v1 = sampleGraph1.addVertex(T.id, 100, "name", "kevin");
+        final GraphWriter writer = getWriter(noTypesMapperV2d0);
+        final  GraphReader reader = getReader(noTypesMapperV2d0);
+        final Graph sampleGraph1 = TinkerFactory.createModern();
+        final  Vertex v1 = sampleGraph1.addVertex(T.id, 100, "name", "kevin");
         v1.addEdge("hello", sampleGraph1.traversal().V().has("name", "marko").next(), T.id, 101L);
         try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
             writer.writeGraph(out, sampleGraph1);
-            String json = out.toString();
-            TinkerGraph read = TinkerGraph.open();
+            final String json = out.toString();
+            final TinkerGraph read = TinkerGraph.open();
             reader.readGraph(new ByteArrayInputStream(json.getBytes()), read);
             // Should fail on deserialized edge Id.
             assertFalse(approximateGraphsCheck(sampleGraph1, read));
@@ -193,17 +194,17 @@ public class TinkerGraphGraphSONSerializerV2d0Test {
      */
     @Test
     public void shouldLooseTypesWithGraphSONNoTypesForEdgeProps() throws IOException {
-        GraphWriter writer = getWriter(noTypesMapperV2d0);
-        GraphReader reader = getReader(noTypesMapperV2d0);
-        Graph sampleGraph1 = TinkerFactory.createModern();
+        final GraphWriter writer = getWriter(noTypesMapperV2d0);
+        final GraphReader reader = getReader(noTypesMapperV2d0);
+        final Graph sampleGraph1 = TinkerFactory.createModern();
 
-        Vertex v1 = sampleGraph1.addVertex(T.id, 100, "name", "kevin");
+        final Vertex v1 = sampleGraph1.addVertex(T.id, 100, "name", "kevin");
         v1.addEdge("hello", sampleGraph1.traversal().V().has("name", "marko").next(), T.id, 101,
                 "uuid", UUID.randomUUID());
         try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
             writer.writeGraph(out, sampleGraph1);
-            String json = out.toString();
-            TinkerGraph read = TinkerGraph.open();
+            final String json = out.toString();
+            final TinkerGraph read = TinkerGraph.open();
             reader.readGraph(new ByteArrayInputStream(json.getBytes()), read);
             // Should fail on deserialized edge prop.
             assertFalse(approximateGraphsCheck(sampleGraph1, read));
@@ -216,13 +217,13 @@ public class TinkerGraphGraphSONSerializerV2d0Test {
      */
     @Test
     public void shouldKeepTypesWhenDeserializingSerializedTinkerGraph() throws IOException {
-        TinkerGraph tg = TinkerGraph.open();
+        final TinkerGraph tg = TinkerGraph.open();
 
-        Vertex v = tg.addVertex("vertexTest");
-        UUID uuidProp = UUID.randomUUID();
-        Duration durationProp = Duration.ofHours(3);
-        Long longProp = 2L;
-        ByteBuffer byteBufferProp = ByteBuffer.wrap("testbb".getBytes());
+        final Vertex v = tg.addVertex("vertexTest");
+        final UUID uuidProp = UUID.randomUUID();
+        final Duration durationProp = Duration.ofHours(3);
+        final Long longProp = 2L;
+        final ByteBuffer byteBufferProp = ByteBuffer.wrap("testbb".getBytes());
 
         // One Java util type natively supported by Jackson
         v.property("uuid", uuidProp);
@@ -233,14 +234,14 @@ public class TinkerGraphGraphSONSerializerV2d0Test {
         // One Java util type added by GraphSON
         v.property("bytebuffer", byteBufferProp);
 
-        GraphWriter writer = getWriter(defaultMapperV2d0);
-        GraphReader reader = getReader(defaultMapperV2d0);
+        final GraphWriter writer = getWriter(defaultMapperV2d0);
+        final GraphReader reader = getReader(defaultMapperV2d0);
         try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
             writer.writeGraph(out, tg);
-            String json = out.toString();
-            TinkerGraph read = TinkerGraph.open();
+            final String json = out.toString();
+            final TinkerGraph read = TinkerGraph.open();
             reader.readGraph(new ByteArrayInputStream(json.getBytes()), read);
-            Vertex vRead = read.traversal().V().hasLabel("vertexTest").next();
+            final Vertex vRead = read.traversal().V().hasLabel("vertexTest").next();
             assertEquals(vRead.property("uuid").value(), uuidProp);
             assertEquals(vRead.property("duration").value(), durationProp);
             assertEquals(vRead.property("long").value(), longProp);
@@ -251,233 +252,241 @@ public class TinkerGraphGraphSONSerializerV2d0Test {
 
     @Test
     public void deserializersTestsVertex() {
-        TinkerGraph tg = TinkerGraph.open();
+        final TinkerGraph tg = TinkerGraph.open();
 
-        Vertex v = tg.addVertex("vertexTest");
+        final Vertex v = tg.addVertex("vertexTest");
         v.property("born", LocalDateTime.of(1971, 1, 2, 20, 50));
         v.property("dead", LocalDateTime.of(1971, 1, 7, 20, 50));
 
-        GraphWriter writer = getWriter(defaultMapperV2d0);
-        GraphReader reader = getReader(defaultMapperV2d0);
+        final GraphWriter writer = getWriter(defaultMapperV2d0);
+        final GraphReader reader = getReader(defaultMapperV2d0);
 
         try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
             writer.writeObject(out, v);
-            String json = out.toString();
+            final String json = out.toString();
 
             // Object works, because there's a type in the payload now
             // Vertex.class would work as well
             // Anything else would not because we check the type in param here with what's in the JSON, for safety.
-            Vertex vRead = (Vertex)reader.readObject(new ByteArrayInputStream(json.getBytes()), Object.class);
+            final Vertex vRead = (Vertex)reader.readObject(new ByteArrayInputStream(json.getBytes()), Object.class);
             assertEquals(v, vRead);
         } catch (IOException e) {
             e.printStackTrace();
+            fail("Should not have thrown exception: " + e.getMessage());
         }
     }
 
     @Test
     public void deserializersTestsEdge() {
-        TinkerGraph tg = TinkerGraph.open();
+        final TinkerGraph tg = TinkerGraph.open();
 
-        Vertex v = tg.addVertex("vertexTest");
-        Vertex v2 = tg.addVertex("vertexTest");
+        final Vertex v = tg.addVertex("vertexTest");
+        final Vertex v2 = tg.addVertex("vertexTest");
 
-        Edge ed = v.addEdge("knows", v2, "time", LocalDateTime.now());
+        final Edge ed = v.addEdge("knows", v2, "time", LocalDateTime.now());
 
-        GraphWriter writer = getWriter(defaultMapperV2d0);
-        GraphReader reader = getReader(defaultMapperV2d0);
+        final GraphWriter writer = getWriter(defaultMapperV2d0);
+        final GraphReader reader = getReader(defaultMapperV2d0);
 
         try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
             writer.writeObject(out, ed);
-            String json = out.toString();
+            final String json = out.toString();
 
             // Object works, because there's a type in the payload now
             // Edge.class would work as well
             // Anything else would not because we check the type in param here with what's in the JSON, for safety.
-            Edge eRead = (Edge)reader.readObject(new ByteArrayInputStream(json.getBytes()), Object.class);
+            final Edge eRead = (Edge)reader.readObject(new ByteArrayInputStream(json.getBytes()), Object.class);
             assertEquals(ed, eRead);
         } catch (IOException e) {
             e.printStackTrace();
+            fail("Should not have thrown exception: " + e.getMessage());
         }
     }
 
     @Test
     public void deserializersTestsTinkerGraph() {
-        TinkerGraph tg = TinkerGraph.open();
+        final TinkerGraph tg = TinkerGraph.open();
 
-        Vertex v = tg.addVertex("vertexTest");
-        Vertex v2 = tg.addVertex("vertexTest");
+        final Vertex v = tg.addVertex("vertexTest");
+        final Vertex v2 = tg.addVertex("vertexTest");
 
-        Edge ed = v.addEdge("knows", v2);
+        v.addEdge("knows", v2);
 
-        GraphWriter writer = getWriter(defaultMapperV2d0);
-        GraphReader reader = getReader(defaultMapperV2d0);
+        final GraphWriter writer = getWriter(defaultMapperV2d0);
+        final GraphReader reader = getReader(defaultMapperV2d0);
 
         try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
             writer.writeObject(out, tg);
-            String json = out.toString();
+            final String json = out.toString();
 
-            Graph gRead = (Graph)reader.readObject(new ByteArrayInputStream(json.getBytes()), Object.class);
+            final Graph gRead = (Graph)reader.readObject(new ByteArrayInputStream(json.getBytes()), Object.class);
             assertTrue(approximateGraphsCheck(tg, gRead));
         } catch (IOException e) {
             e.printStackTrace();
+            fail("Should not have thrown exception: " + e.getMessage());
         }
     }
 
     @Test
     public void deserializersTestsProperty() {
-        TinkerGraph tg = TinkerGraph.open();
+        final TinkerGraph tg = TinkerGraph.open();
 
-        Vertex v = tg.addVertex("vertexTest");
-        Vertex v2 = tg.addVertex("vertexTest");
+        final Vertex v = tg.addVertex("vertexTest");
+        final Vertex v2 = tg.addVertex("vertexTest");
 
-        Edge ed = v.addEdge("knows", v2);
+        final Edge ed = v.addEdge("knows", v2);
 
-        GraphWriter writer = getWriter(defaultMapperV2d0);
-        GraphReader reader = getReader(defaultMapperV2d0);
+        final GraphWriter writer = getWriter(defaultMapperV2d0);
+        final GraphReader reader = getReader(defaultMapperV2d0);
 
-        Property prop = ed.property("since", Year.parse("1993"));
+        final Property prop = ed.property("since", Year.parse("1993"));
 
         try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
             writer.writeObject(out, prop);
-            String json = out.toString();
+            final String json = out.toString();
 
-            Property pRead = (Property)reader.readObject(new ByteArrayInputStream(json.getBytes()), Object.class);
+            final Property pRead = (Property)reader.readObject(new ByteArrayInputStream(json.getBytes()), Object.class);
             //can't use equals here, because pRead is detached, its parent element has not been intentionally
             //serialized and "equals()" checks that.
             assertTrue(prop.key().equals(pRead.key()) && prop.value().equals(pRead.value()));
         } catch (IOException e) {
             e.printStackTrace();
+            fail("Should not have thrown exception: " + e.getMessage());
         }
     }
 
     @Test
     public void deserializersTestsVertexProperty() {
-        TinkerGraph tg = TinkerGraph.open();
+        final TinkerGraph tg = TinkerGraph.open();
 
-        Vertex v = tg.addVertex("vertexTest");
+        final Vertex v = tg.addVertex("vertexTest");
 
-        GraphWriter writer = getWriter(defaultMapperV2d0);
-        GraphReader reader = getReader(defaultMapperV2d0);
+        final GraphWriter writer = getWriter(defaultMapperV2d0);
+        final GraphReader reader = getReader(defaultMapperV2d0);
 
-        VertexProperty prop = v.property("born", LocalDateTime.of(1971, 1, 2, 20, 50));
+        final VertexProperty prop = v.property("born", LocalDateTime.of(1971, 1, 2, 20, 50));
 
         try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
             writer.writeObject(out, prop);
-            String json = out.toString();
+            final String json = out.toString();
 
-            VertexProperty vPropRead = (VertexProperty)reader.readObject(new ByteArrayInputStream(json.getBytes()), Object.class);
+            final VertexProperty vPropRead = (VertexProperty)reader.readObject(new ByteArrayInputStream(json.getBytes()), Object.class);
             //only classes and ids are checked, that's ok, full vertex property ser/de
             //is checked elsewhere.
             assertEquals(prop, vPropRead);
         } catch (IOException e) {
             e.printStackTrace();
+            fail("Should not have thrown exception: " + e.getMessage());
         }
     }
 
     @Test
     public void deserializersTestsPath() {
-        TinkerGraph tg = TinkerFactory.createModern();
+        final TinkerGraph tg = TinkerFactory.createModern();
 
-        GraphWriter writer = getWriter(defaultMapperV2d0);
-        GraphReader reader = getReader(defaultMapperV2d0);
+        final GraphWriter writer = getWriter(defaultMapperV2d0);
+        final GraphReader reader = getReader(defaultMapperV2d0);
 
-        Path p = tg.traversal().V(1).as("a").has("name").as("b").
+        final Path p = tg.traversal().V(1).as("a").has("name").as("b").
                 out("knows").out("created").as("c").
                 has("name", "ripple").values("name").as("d").
                 identity().as("e").path().next();
 
         try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
             writer.writeObject(out, p);
-            String json = out.toString();
+            final String json = out.toString();
 
-            Path pathRead = (Path)reader.readObject(new ByteArrayInputStream(json.getBytes()), Object.class);
+            final Path pathRead = (Path)reader.readObject(new ByteArrayInputStream(json.getBytes()), Object.class);
 
             for (int i = 0; i < p.objects().size(); i++) {
-                Object o = p.objects().get(i);
-                Object oRead = pathRead.objects().get(i);
+                final Object o = p.objects().get(i);
+                final Object oRead = pathRead.objects().get(i);
                 assertEquals(o, oRead);
             }
             for (int i = 0; i < p.labels().size(); i++) {
-                Set<String> o = p.labels().get(i);
-                Set<String> oRead = pathRead.labels().get(i);
+                final Set<String> o = p.labels().get(i);
+                final Set<String> oRead = pathRead.labels().get(i);
                 assertEquals(o, oRead);
             }
         } catch (IOException e) {
             e.printStackTrace();
+            fail("Should not have thrown exception: " + e.getMessage());
         }
     }
 
     @Test
     public void deserializersTestsMetrics() {
-        TinkerGraph tg = TinkerFactory.createModern();
+        final TinkerGraph tg = TinkerFactory.createModern();
 
-        GraphWriter writer = getWriter(defaultMapperV2d0);
-        GraphReader reader = getReader(defaultMapperV2d0);
+        final GraphWriter writer = getWriter(defaultMapperV2d0);
+        final GraphReader reader = getReader(defaultMapperV2d0);
 
-        TraversalMetrics tm = tg.traversal().V(1).as("a").has("name").as("b").
+        final TraversalMetrics tm = tg.traversal().V(1).as("a").has("name").as("b").
                 out("knows").out("created").as("c").
                 has("name", "ripple").values("name").as("d").
                 identity().as("e").profile().next();
 
-        MutableMetrics m = new MutableMetrics(tm.getMetrics(0));
+        final MutableMetrics m = new MutableMetrics(tm.getMetrics(0));
         // making sure nested metrics are included in serde
         m.addNested(new MutableMetrics(tm.getMetrics(1)));
 
         try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
             writer.writeObject(out, m);
-            String json = out.toString();
+            final String json = out.toString();
 
-            Metrics metricsRead = (Metrics)reader.readObject(new ByteArrayInputStream(json.getBytes()), Object.class);
+            final Metrics metricsRead = (Metrics)reader.readObject(new ByteArrayInputStream(json.getBytes()), Object.class);
             // toString should be enough to compare Metrics
             assertTrue(m.toString().equals(metricsRead.toString()));
         } catch (IOException e) {
             e.printStackTrace();
+            fail("Should not have thrown exception: " + e.getMessage());
         }
     }
 
     @Test
     public void deserializersTestsTraversalMetrics() {
-        TinkerGraph tg = TinkerFactory.createModern();
+        final TinkerGraph tg = TinkerFactory.createModern();
 
-        GraphWriter writer = getWriter(defaultMapperV2d0);
-        GraphReader reader = getReader(defaultMapperV2d0);
+        final GraphWriter writer = getWriter(defaultMapperV2d0);
+        final GraphReader reader = getReader(defaultMapperV2d0);
 
-        TraversalMetrics tm = tg.traversal().V(1).as("a").has("name").as("b").
+        final TraversalMetrics tm = tg.traversal().V(1).as("a").has("name").as("b").
                 out("knows").out("created").as("c").
                 has("name", "ripple").values("name").as("d").
                 identity().as("e").profile().next();
 
         try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
             writer.writeObject(out, tm);
-            String json = out.toString();
+            final String json = out.toString();
 
-            TraversalMetrics traversalMetricsRead = (TraversalMetrics)reader.readObject(new ByteArrayInputStream(json.getBytes()), Object.class);
+            final TraversalMetrics traversalMetricsRead = (TraversalMetrics)reader.readObject(new ByteArrayInputStream(json.getBytes()), Object.class);
             // toString should be enough to compare TraversalMetrics
             assertTrue(tm.toString().equals(traversalMetricsRead.toString()));
         } catch (IOException e) {
             e.printStackTrace();
+            fail("Should not have thrown exception: " + e.getMessage());
         }
     }
 
     @Test
     public void deserializersTree() {
-        TinkerGraph tg = TinkerFactory.createModern();
+        final TinkerGraph tg = TinkerFactory.createModern();
 
-        GraphWriter writer = getWriter(noTypesMapperV2d0);
-        GraphReader reader = getReader(noTypesMapperV2d0);
+        final GraphWriter writer = getWriter(noTypesMapperV2d0);
+        final GraphReader reader = getReader(noTypesMapperV2d0);
 
-        Tree t = tg.traversal().V().out().out().tree().next();
+        final Tree t = tg.traversal().V().out().out().tree().next();
 
         try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
-            Vertex v = tg.traversal().V(1).next();
+            final Vertex v = tg.traversal().V(1).next();
                      v.property("myUUIDprop", UUID.randomUUID());
             writer.writeObject(out, v);
 
 
 //            writer.writeObject(out, t);
-            String json = out.toString();
+            final String json = out.toString();
 
-            System.out.println("json = " + json);
+            //System.out.println("json = " + json);
 
 //            Tree treeRead = (Tree)reader.readObject(new ByteArrayInputStream(json.getBytes()), Object.class);
             //Map's equals should check each component of the tree recursively
@@ -485,10 +494,9 @@ public class TinkerGraphGraphSONSerializerV2d0Test {
             //is ok. Complete vertex deser is checked elsewhere.
 //            assertEquals(t, treeRead);
 
-
-
         } catch (IOException e) {
             e.printStackTrace();
+            fail("Should not have thrown exception: " + e.getMessage());
         }
     }
 
@@ -501,28 +509,28 @@ public class TinkerGraphGraphSONSerializerV2d0Test {
     }
 
     /**
-     * Checks sequentially vertices and egdes of both graphs. Will check sequentially Vertex IDs, Vertex Properties IDs
+     * Checks sequentially vertices and edges of both graphs. Will check sequentially Vertex IDs, Vertex Properties IDs
      * and values and classes. Then same for edges. To use when serializing a Graph and deserializing the supposedly
      * same Graph.
      */
     private boolean approximateGraphsCheck(Graph g1, Graph g2) {
-        Iterator<Vertex> itV = g1.vertices();
-        Iterator<Vertex> itVRead = g2.vertices();
+        final Iterator<Vertex> itV = g1.vertices();
+        final Iterator<Vertex> itVRead = g2.vertices();
 
         while (itV.hasNext()) {
-            Vertex v = itV.next();
-            Vertex vRead = itVRead.next();
+            final Vertex v = itV.next();
+            final Vertex vRead = itVRead.next();
 
             // Will only check IDs but that's 'good' enough.
             if (!v.equals(vRead)) {
                 return false;
             }
 
-            Iterator itVP = v.properties();
-            Iterator itVPRead = vRead.properties();
+            final Iterator itVP = v.properties();
+            final Iterator itVPRead = vRead.properties();
             while (itVP.hasNext()) {
-                VertexProperty vp = (VertexProperty) itVP.next();
-                VertexProperty vpRead = (VertexProperty) itVPRead.next();
+                final VertexProperty vp = (VertexProperty) itVP.next();
+                final VertexProperty vpRead = (VertexProperty) itVPRead.next();
                 if (!vp.value().equals(vpRead.value())
                         || !vp.equals(vpRead)) {
                     return false;
@@ -530,22 +538,22 @@ public class TinkerGraphGraphSONSerializerV2d0Test {
             }
         }
 
-        Iterator<Edge> itE = g1.edges();
-        Iterator<Edge> itERead = g2.edges();
+        final Iterator<Edge> itE = g1.edges();
+        final Iterator<Edge> itERead = g2.edges();
 
         while (itE.hasNext()) {
-            Edge e = itE.next();
-            Edge eRead = itERead.next();
+            final Edge e = itE.next();
+            final Edge eRead = itERead.next();
             // Will only check IDs but that's good enough.
             if (!e.equals(eRead)) {
                 return false;
             }
 
-            Iterator itEP = e.properties();
-            Iterator itEPRead = eRead.properties();
+            final Iterator itEP = e.properties();
+            final Iterator itEPRead = eRead.properties();
             while (itEP.hasNext()) {
-                Property ep = (Property) itEP.next();
-                Property epRead = (Property) itEPRead.next();
+                final Property ep = (Property) itEP.next();
+                final Property epRead = (Property) itEPRead.next();
                 if (!ep.value().equals(epRead.value())
                         || !ep.equals(epRead)) {
                     return false;


[33/48] tinkerpop git commit: TINKERPOP-1274: GraphSON 2.0.

Posted by sp...@apache.org.
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeDeserializer.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeDeserializer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeDeserializer.java
new file mode 100644
index 0000000..e614a7a
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeDeserializer.java
@@ -0,0 +1,229 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.structure.io.graphson;
+
+import org.apache.tinkerpop.shaded.jackson.annotation.JsonTypeInfo;
+import org.apache.tinkerpop.shaded.jackson.core.JsonParser;
+import org.apache.tinkerpop.shaded.jackson.core.JsonToken;
+import org.apache.tinkerpop.shaded.jackson.databind.BeanProperty;
+import org.apache.tinkerpop.shaded.jackson.databind.DeserializationContext;
+import org.apache.tinkerpop.shaded.jackson.databind.JavaType;
+import org.apache.tinkerpop.shaded.jackson.databind.JsonDeserializer;
+import org.apache.tinkerpop.shaded.jackson.databind.jsontype.TypeDeserializer;
+import org.apache.tinkerpop.shaded.jackson.databind.jsontype.TypeIdResolver;
+import org.apache.tinkerpop.shaded.jackson.databind.jsontype.impl.TypeDeserializerBase;
+import org.apache.tinkerpop.shaded.jackson.databind.type.TypeFactory;
+import org.apache.tinkerpop.shaded.jackson.databind.util.TokenBuffer;
+
+import java.io.IOException;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Contains main logic for the whole JSON to Java deserialization. Handles types embedded with the version 2.0 of GraphSON.
+ *
+ * @author Kevin Gallardo (https://kgdo.me)
+ */
+public class GraphSONTypeDeserializer extends TypeDeserializerBase {
+    private final TypeIdResolver idRes;
+    private final String propertyName;
+    private final String valuePropertyName;
+    private final JavaType baseType;
+    private final TypeInfo typeInfo;
+
+    private static final JavaType mapJavaType = TypeFactory.defaultInstance().constructType(Map.class);
+    private static final JavaType arrayJavaType = TypeFactory.defaultInstance().constructType(List.class);
+
+
+    GraphSONTypeDeserializer(JavaType baseType, TypeIdResolver idRes, String typePropertyName,
+                             TypeInfo typeInfo, String valuePropertyName){
+        super(baseType, idRes, typePropertyName, false, null);
+        this.baseType = baseType;
+        this.idRes = idRes;
+        this.propertyName = typePropertyName;
+        this.typeInfo = typeInfo;
+        this.valuePropertyName = valuePropertyName;
+    }
+
+    @Override
+    public TypeDeserializer forProperty(BeanProperty beanProperty) {
+        return this;
+    }
+
+    @Override
+    public JsonTypeInfo.As getTypeInclusion() {
+        return JsonTypeInfo.As.WRAPPER_ARRAY;
+    }
+
+
+    @Override
+    public TypeIdResolver getTypeIdResolver() {
+        return idRes;
+    }
+
+    @Override
+    public Class<?> getDefaultImpl() {
+        return null;
+    }
+
+    @Override
+    public Object deserializeTypedFromObject(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException {
+        return deserialize(jsonParser, deserializationContext);
+    }
+
+    @Override
+    public Object deserializeTypedFromArray(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException {
+        return deserialize(jsonParser, deserializationContext);
+    }
+
+    @Override
+    public Object deserializeTypedFromScalar(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException {
+        return deserialize(jsonParser, deserializationContext);
+    }
+
+    @Override
+    public Object deserializeTypedFromAny(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException {
+        return deserialize(jsonParser, deserializationContext);
+    }
+
+    /**
+     * Main logic for the deserialization.
+     */
+    private Object deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException {
+        TokenBuffer buf = new TokenBuffer(jsonParser.getCodec(), false);
+        TokenBuffer localCopy = new TokenBuffer(jsonParser.getCodec(), false);
+
+        // Detect type
+        try {
+            // The Type pattern is START_OBJECT -> TEXT_FIELD(propertyName) && TEXT_FIELD(valueProp).
+            if (jsonParser.getCurrentToken() == JsonToken.START_OBJECT) {
+                buf.writeStartObject();
+                String typeName = null;
+                boolean valueCalled = false;
+
+                for (int i = 0; i < 2; i++) {
+                    String nextFieldName = jsonParser.nextFieldName();
+                    if (nextFieldName == null) {
+                        // empty map or less than 2 fields.
+                        break;
+                    }
+                    if (!nextFieldName.equals(this.propertyName) && !nextFieldName.equals(this.valuePropertyName)) {
+                        // no type, go out.
+                        break;
+                    }
+
+                    if (nextFieldName.equals(this.propertyName)) {
+                        typeName = jsonParser.nextTextValue();
+                        // keeping the spare buffer up to date in case it's a false detection (only the "@type" property)
+                        buf.writeStringField(this.propertyName, typeName);
+                        continue;
+                    }
+                    if (nextFieldName.equals(this.valuePropertyName)) {
+                        jsonParser.nextValue();
+                        // keeping the spare buffer up to date in case it's a false detection (only the "@value" property)
+                        buf.writeFieldName(this.valuePropertyName);
+                        // this is not greatly efficient, would need to find better
+                        // but the problem is that the fields "@value" and "@type" could be in any order
+                        localCopy.copyCurrentStructure(jsonParser);
+                        valueCalled = true;
+                        continue;
+                    }
+                }
+
+                if (typeName != null && valueCalled) {
+                    // Type pattern detected.
+                    JavaType typeFromId = idRes.typeFromId(typeName);
+
+                    if (!baseType.isJavaLangObject() && baseType != typeFromId) {
+                        throw new InstantiationException(
+                                String.format("Cannot deserialize the value with the detected type contained in the JSON ('%s') " +
+                                        "to the type specified in parameter to the object mapper (%s). " +
+                                        "Those types are incompatible.", typeName, baseType.getRawClass().toString())
+                        );
+                    }
+
+                    JsonDeserializer jsonDeserializer = deserializationContext.findContextualValueDeserializer(typeFromId, null);
+
+                    JsonParser tokenParser = localCopy.asParser();
+                    tokenParser.nextToken();
+                    Object value = jsonDeserializer.deserialize(tokenParser, deserializationContext);
+
+                    JsonToken t = jsonParser.nextToken();
+                    if (t == JsonToken.END_OBJECT) {
+                        // we're good to go
+                        return value;
+                    } else {
+                        // detected the type pattern entirely but the Map contained other properties
+                        // For now we error out because we assume that pattern is *only* reserved to
+                        // typed values.
+                        throw deserializationContext.mappingException("Detected the type pattern in the JSON payload " +
+                                "but the map containing the types and values contains other fields. This is not " +
+                                "allowed by the deserializer.");
+                    }
+                }
+            }
+        } catch (Exception e) {
+            throw deserializationContext.mappingException("Could not deserialize the JSON value as required. Nested exception: " + e.toString());
+        }
+
+        // While searching for the type pattern, we may have moved the cursor of the original JsonParser in param.
+        // To compensate, we have filled consistently a TokenBuffer that should contain the equivalent of
+        // what we skipped while searching for the pattern.
+        // This has a huge positive impact on performances, since JsonParser does not have a 'rewind()',
+        // the only other solution would have been to copy the whole original JsonParser. Which we avoid here and use
+        // an efficient structure made of TokenBuffer + JsonParserSequence/Concat.
+
+        // Concatenate buf + localCopy + end of original content
+
+        JsonParser toUseParser;
+        JsonParser bufferParser = buf.asParser();
+        JsonParser localCopyParser = localCopy.asParser();
+
+
+        JsonParser[] array = {bufferParser, localCopyParser, jsonParser};
+
+        toUseParser = new JsonParserConcat(array);
+        toUseParser.nextToken();
+
+        // If a type has been specified in parameter :
+        if (!baseType.isJavaLangObject()) {
+            JsonDeserializer jsonDeserializer = deserializationContext.findContextualValueDeserializer(baseType, null);
+            return jsonDeserializer.deserialize(toUseParser, deserializationContext);
+        }
+        // Otherwise, detect the current structure :
+        else {
+            if (toUseParser.isExpectedStartArrayToken()) {
+                return deserializationContext.findContextualValueDeserializer(arrayJavaType, null).deserialize(toUseParser, deserializationContext);
+            } else if (toUseParser.isExpectedStartObjectToken()) {
+                return deserializationContext.findContextualValueDeserializer(mapJavaType, null).deserialize(toUseParser, deserializationContext);
+            } else {
+                // There's JavaLangObject in param, there's no type detected in the payload, the payload isn't a JSON Map or JSON List
+                // then consider it a simple type, even though we shouldn't be here if it was a simple type.
+                // TODO : maybe throw an error instead?
+                // throw deserializationContext.mappingException("Roger, we have a problem deserializing");
+                JsonDeserializer jsonDeserializer = deserializationContext.findContextualValueDeserializer(baseType, null);
+                return jsonDeserializer.deserialize(toUseParser, deserializationContext);
+            }
+        }
+    }
+
+    private boolean canReadTypeId() {
+        return this.typeInfo == TypeInfo.PARTIAL_TYPES;
+    }
+}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeIdResolver.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeIdResolver.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeIdResolver.java
new file mode 100644
index 0000000..3edff73
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeIdResolver.java
@@ -0,0 +1,108 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.structure.io.graphson;
+
+import org.apache.tinkerpop.shaded.jackson.annotation.JsonTypeInfo;
+import org.apache.tinkerpop.shaded.jackson.databind.DatabindContext;
+import org.apache.tinkerpop.shaded.jackson.databind.JavaType;
+import org.apache.tinkerpop.shaded.jackson.databind.jsontype.TypeIdResolver;
+import org.apache.tinkerpop.shaded.jackson.databind.type.TypeFactory;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Provides quick lookup for Type deserialization extracted from the JSON payload. As well as the Java Object to types
+ * compatible for the version 2.0 of GraphSON.
+ *
+ * @author Kevin Gallardo (https://kgdo.me)
+ */
+public class GraphSONTypeIdResolver implements TypeIdResolver {
+
+    private final Map<String, JavaType> idToType = new HashMap<>();
+
+    private final Map<Class, String> typeToId = new HashMap<>();
+
+    public Map<String, JavaType> getIdToType() {
+        return idToType;
+    }
+
+    public Map<Class, String> getTypeToId() {
+        return typeToId;
+    }
+
+    // Override manually a type definition.
+    public GraphSONTypeIdResolver addCustomType(String name, Class clasz) {
+        // May override types already registered, that's wanted.
+        getIdToType().put(name, TypeFactory.defaultInstance().constructType(clasz));
+        getTypeToId().put(clasz, name);
+        return this;
+    }
+
+    @Override
+    public void init(JavaType javaType) {
+    }
+
+    @Override
+    public String idFromValue(Object o) {
+        return idFromValueAndType(o, o.getClass());
+    }
+
+    @Override
+    public String idFromValueAndType(Object o, Class<?> aClass) {
+        if (!getTypeToId().containsKey(aClass)) {
+            // If one wants to serialize an object with a type, but hasn't registered
+            // a typeID for that class, fail.
+            throw new IllegalArgumentException(String.format("Could not find a type identifier for the class : %s. " +
+                    "Make sure the value to serialize has a type identifier registered for its class.", aClass));
+        } else {
+            return getTypeToId().get(aClass);
+        }
+    }
+
+    @Override
+    public String idFromBaseType() {
+        return null;
+    }
+
+    @Override
+    public JavaType typeFromId(String s) {
+        return typeFromId(null, s);
+    }
+
+    @Override
+    public JavaType typeFromId(DatabindContext databindContext, String s) {
+        // Get the type from the string from the stored Map. If not found, default to deserialize as a String.
+        return getIdToType().containsKey(s)
+                ? getIdToType().get(s)
+                // TODO: shouldn't we fail instead, if the type is not found? Or log something?
+                : TypeFactory.defaultInstance().constructType(String.class);
+    }
+
+    @Override
+    public String getDescForKnownTypeIds() {
+        // TODO: Not sure what to put here.
+        return "GraphSON advanced typing system";
+    }
+
+    @Override
+    public JsonTypeInfo.Id getMechanism() {
+        return JsonTypeInfo.Id.CUSTOM;
+    }
+}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeResolverBuilder.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeResolverBuilder.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeResolverBuilder.java
new file mode 100644
index 0000000..001dd02
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeResolverBuilder.java
@@ -0,0 +1,65 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.structure.io.graphson;
+
+import org.apache.tinkerpop.shaded.jackson.databind.DeserializationConfig;
+import org.apache.tinkerpop.shaded.jackson.databind.JavaType;
+import org.apache.tinkerpop.shaded.jackson.databind.SerializationConfig;
+import org.apache.tinkerpop.shaded.jackson.databind.jsontype.NamedType;
+import org.apache.tinkerpop.shaded.jackson.databind.jsontype.TypeDeserializer;
+import org.apache.tinkerpop.shaded.jackson.databind.jsontype.TypeIdResolver;
+import org.apache.tinkerpop.shaded.jackson.databind.jsontype.TypeSerializer;
+import org.apache.tinkerpop.shaded.jackson.databind.jsontype.impl.StdTypeResolverBuilder;
+
+import java.util.Collection;
+
+/**
+ * Creates the Type serializers as well as the Typed deserializers that will be provided to the serializers and
+ * deserializers. Contains the typeInfo level that should be provided by the GraphSONMapper.
+ *
+ * @author Kevin Gallardo (https://kgdo.me)
+ */
+public class GraphSONTypeResolverBuilder extends StdTypeResolverBuilder {
+
+    private TypeInfo typeInfo;
+    private String valuePropertyName;
+
+    @Override
+    public TypeDeserializer buildTypeDeserializer(DeserializationConfig config, JavaType baseType, Collection<NamedType> subtypes) {
+        TypeIdResolver idRes = this.idResolver(config, baseType, subtypes, false, true);
+        return new GraphSONTypeDeserializer(baseType, idRes, this.getTypeProperty(), typeInfo, valuePropertyName);
+    }
+
+
+    @Override
+    public TypeSerializer buildTypeSerializer(SerializationConfig config, JavaType baseType, Collection<NamedType> subtypes) {
+        TypeIdResolver idRes = this.idResolver(config, baseType, subtypes, true, false);
+        return new GraphSONTypeSerializer(idRes, this.getTypeProperty(), typeInfo, valuePropertyName);
+    }
+
+    public GraphSONTypeResolverBuilder valuePropertyName(String valuePropertyName) {
+        this.valuePropertyName = valuePropertyName;
+        return this;
+    }
+
+    public GraphSONTypeResolverBuilder typesEmbedding(TypeInfo typeInfo) {
+        this.typeInfo = typeInfo;
+        return this;
+    }
+}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeSerializer.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeSerializer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeSerializer.java
new file mode 100644
index 0000000..98cf16a
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeSerializer.java
@@ -0,0 +1,197 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.structure.io.graphson;
+
+import org.apache.tinkerpop.gremlin.process.traversal.Path;
+import org.apache.tinkerpop.gremlin.process.traversal.util.Metrics;
+import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalMetrics;
+import org.apache.tinkerpop.gremlin.structure.Edge;
+import org.apache.tinkerpop.gremlin.structure.Property;
+import org.apache.tinkerpop.gremlin.structure.Vertex;
+import org.apache.tinkerpop.gremlin.structure.VertexProperty;
+import org.apache.tinkerpop.shaded.jackson.annotation.JsonTypeInfo;
+import org.apache.tinkerpop.shaded.jackson.core.JsonGenerator;
+import org.apache.tinkerpop.shaded.jackson.databind.BeanProperty;
+import org.apache.tinkerpop.shaded.jackson.databind.jsontype.TypeIdResolver;
+import org.apache.tinkerpop.shaded.jackson.databind.jsontype.TypeSerializer;
+
+import java.io.IOException;
+import java.nio.ByteBuffer;
+
+/**
+ * Extension of the Jackson's default TypeSerializer. An instance of this object will be passed to the serializers
+ * on which they can safely call the utility methods to serialize types and making it compatible with the version
+ * 2.0 of GraphSON.
+ *
+ * @author Kevin Gallardo (https://kgdo.me)
+ */
+public class GraphSONTypeSerializer extends TypeSerializer {
+
+    private final TypeIdResolver idRes;
+    private final String propertyName;
+    private final TypeInfo typeInfo;
+    private final String valuePropertyName;
+
+    GraphSONTypeSerializer(TypeIdResolver idRes, String propertyName, TypeInfo typeInfo, String valuePropertyName) {
+        this.idRes = idRes;
+        this.propertyName = propertyName;
+        this.typeInfo = typeInfo;
+        this.valuePropertyName = valuePropertyName;
+    }
+
+    @Override
+    public TypeSerializer forProperty(BeanProperty beanProperty) {
+        return this;
+    }
+
+    @Override
+    public JsonTypeInfo.As getTypeInclusion() {
+        return null;
+    }
+
+    @Override
+    public String getPropertyName() {
+        return propertyName;
+    }
+
+    @Override
+    public TypeIdResolver getTypeIdResolver() {
+        return idRes;
+    }
+
+    @Override
+    public void writeTypePrefixForScalar(Object o, JsonGenerator jsonGenerator) throws IOException {
+        if (canWriteTypeId()) {
+            writeTypePrefix(jsonGenerator, getTypeIdResolver().idFromValueAndType(o, getClassFromObject(o)));
+        }
+    }
+
+    @Override
+    public void writeTypePrefixForObject(Object o, JsonGenerator jsonGenerator) throws IOException {
+        jsonGenerator.writeStartObject();
+        // TODO: FULL_TYPES should be implemented here as : if (fullTypesModeEnabled()) writeTypePrefix(Map);
+    }
+
+    @Override
+    public void writeTypePrefixForArray(Object o, JsonGenerator jsonGenerator) throws IOException {
+        jsonGenerator.writeStartArray();
+        // TODO: FULL_TYPES should be implemented here as : if (fullTypesModeEnabled()) writeTypePrefix(List);
+    }
+
+    @Override
+    public void writeTypeSuffixForScalar(Object o, JsonGenerator jsonGenerator) throws IOException {
+        if (canWriteTypeId()) {
+            writeTypeSuffix(jsonGenerator);
+        }
+    }
+
+    @Override
+    public void writeTypeSuffixForObject(Object o, JsonGenerator jsonGenerator) throws IOException {
+        jsonGenerator.writeEndObject();
+        // TODO: FULL_TYPES should be implemented here as : if (fullTypesModeEnabled()) writeTypeSuffix(Map);
+    }
+
+    @Override
+    public void writeTypeSuffixForArray(Object o, JsonGenerator jsonGenerator) throws IOException {
+        jsonGenerator.writeEndArray();
+        // TODO: FULL_TYPES should be implemented here as : if (fullTypesModeEnabled()) writeTypeSuffix(List);
+    }
+
+    @Override
+    public void writeCustomTypePrefixForScalar(Object o, JsonGenerator jsonGenerator, String s) throws IOException {
+        if (canWriteTypeId()) {
+            writeTypePrefix(jsonGenerator, s);
+        }
+    }
+
+    @Override
+    public void writeCustomTypePrefixForObject(Object o, JsonGenerator jsonGenerator, String s) throws IOException {
+        jsonGenerator.writeStartObject();
+        // TODO: FULL_TYPES should be implemented here as : if (fullTypesModeEnabled()) writeTypePrefix(s);
+    }
+
+    @Override
+    public void writeCustomTypePrefixForArray(Object o, JsonGenerator jsonGenerator, String s) throws IOException {
+        jsonGenerator.writeStartArray();
+        // TODO: FULL_TYPES should be implemented here as : if (fullTypesModeEnabled()) writeTypePrefix(s);
+    }
+
+    @Override
+    public void writeCustomTypeSuffixForScalar(Object o, JsonGenerator jsonGenerator, String s) throws IOException {
+        if (canWriteTypeId()) {
+            writeTypeSuffix(jsonGenerator);
+        }
+    }
+
+    @Override
+    public void writeCustomTypeSuffixForObject(Object o, JsonGenerator jsonGenerator, String s) throws IOException {
+        jsonGenerator.writeEndObject();
+        // TODO: FULL_TYPES should be implemented here as : if (fullTypesModeEnabled()) writeTypeSuffix(s);
+    }
+
+    @Override
+    public void writeCustomTypeSuffixForArray(Object o, JsonGenerator jsonGenerator, String s) throws IOException {
+        jsonGenerator.writeEndArray();
+        // TODO: FULL_TYPES should be implemented here as : if (fullTypesModeEnabled()) writeTypeSuffix(s);
+    }
+
+    private boolean canWriteTypeId() {
+        return typeInfo != null
+                && typeInfo == TypeInfo.PARTIAL_TYPES;
+    }
+
+    private void writeTypePrefix(JsonGenerator jsonGenerator, String s) throws IOException {
+        jsonGenerator.writeStartObject();
+        jsonGenerator.writeStringField(this.getPropertyName(), s);
+        jsonGenerator.writeFieldName(this.valuePropertyName);
+    }
+
+    private void writeTypeSuffix(JsonGenerator jsonGenerator) throws IOException {
+        jsonGenerator.writeEndObject();
+    }
+
+    /* We force only **one** translation of a Java object to a domain specific object.
+     i.e. users register typeIDs and serializers/deserializers for the predefined
+     types we have in the spec. Graph, Vertex, Edge, VertexProperty, etc... And
+     **not** their implementations (TinkerGraph, DetachedVertex, TinkerEdge,
+     etc..)
+    */
+    private Class getClassFromObject(Object o) {
+        // not the most efficient
+        Class c = o.getClass();
+        if (Vertex.class.isAssignableFrom(c)) {
+            return Vertex.class;
+        } else if (Edge.class.isAssignableFrom(c)) {
+            return Edge.class;
+        } else if (Path.class.isAssignableFrom(c)) {
+            return Path.class;
+        } else if (VertexProperty.class.isAssignableFrom(c)) {
+            return VertexProperty.class;
+        } else if (Metrics.class.isAssignableFrom(c)) {
+            return Metrics.class;
+        } else if (TraversalMetrics.class.isAssignableFrom(c)) {
+            return TraversalMetrics.class;
+        } else if (Property.class.isAssignableFrom(c)) {
+            return Property.class;
+        } else if (ByteBuffer.class.isAssignableFrom(c)) {
+            return ByteBuffer.class;
+        }
+        return c;
+    }
+}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONUtil.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONUtil.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONUtil.java
index 9ff427c..548bca1 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONUtil.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONUtil.java
@@ -55,4 +55,41 @@ public final class GraphSONUtil {
             serializer.serialize(object, jsonGenerator, serializerProvider);
         }
     }
+
+    public static void writeStartObject(Object o, JsonGenerator jsonGenerator, TypeSerializer typeSerializer) throws IOException {
+        if (typeSerializer != null)
+            typeSerializer.writeTypePrefixForObject(o, jsonGenerator);
+        else
+            jsonGenerator.writeStartObject();
+    }
+
+    public static void writeEndObject(Object o, JsonGenerator jsonGenerator, TypeSerializer typeSerializer) throws IOException {
+        if (typeSerializer != null)
+            typeSerializer.writeTypeSuffixForObject(o, jsonGenerator);
+        else
+            jsonGenerator.writeEndObject();
+    }
+
+    public static void writeStartArray(Object o, JsonGenerator jsonGenerator, TypeSerializer typeSerializer) throws IOException {
+        if (typeSerializer != null)
+            typeSerializer.writeTypePrefixForArray(o, jsonGenerator);
+        else
+            jsonGenerator.writeStartArray();
+    }
+
+
+    public static void writeEndArray(Object o, JsonGenerator jsonGenerator, TypeSerializer typeSerializer) throws IOException {
+        if (typeSerializer != null)
+            typeSerializer.writeTypeSuffixForArray(o, jsonGenerator);
+        else
+            jsonGenerator.writeEndArray();
+    }
+
+    static void safeWriteObjectField(JsonGenerator jsonGenerator, String key, Object value) {
+        try {
+            jsonGenerator.writeObjectField(key, value);
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONVersion.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONVersion.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONVersion.java
index 628ea22..7740b06 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONVersion.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONVersion.java
@@ -24,7 +24,8 @@ package org.apache.tinkerpop.gremlin.structure.io.graphson;
  * @author Stephen Mallette (http://stephen.genoprime.com)
  */
 public enum GraphSONVersion {
-    V1_0(GraphSONModule.GraphSONModuleV1d0.build(), "1.0");
+    V1_0(GraphSONModule.GraphSONModuleV1d0.build(), "1.0"),
+    V2_0(GraphSONModule.GraphSONModuleV2d0.build(), "2.0");
 
     private final GraphSONModule.GraphSONModuleBuilder builder;
     private final String versionNumber;

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONWriter.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONWriter.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONWriter.java
index 37ed9a0..6980b48 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONWriter.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONWriter.java
@@ -27,11 +27,16 @@ import org.apache.tinkerpop.gremlin.structure.Vertex;
 import org.apache.tinkerpop.gremlin.structure.VertexProperty;
 import org.apache.tinkerpop.gremlin.structure.io.GraphWriter;
 import org.apache.tinkerpop.gremlin.structure.io.Mapper;
+import org.apache.tinkerpop.gremlin.structure.util.star.DirectionalStarGraph;
 import org.apache.tinkerpop.gremlin.structure.util.star.StarGraph;
-import org.apache.tinkerpop.gremlin.structure.util.star.StarGraphGraphSONSerializer;
 import org.apache.tinkerpop.shaded.jackson.databind.ObjectMapper;
 
-import java.io.*;
+import java.io.BufferedWriter;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
 import java.util.Iterator;
 import java.util.function.Function;
 
@@ -74,7 +79,7 @@ public final class GraphSONWriter implements GraphWriter {
      */
     @Override
     public void writeVertex(final OutputStream outputStream, final Vertex v, final Direction direction) throws IOException {
-        mapper.writeValue(outputStream, new StarGraphGraphSONSerializer.DirectionalStarGraph(StarGraph.of(v), direction));
+        mapper.writeValue(outputStream, new DirectionalStarGraph(StarGraph.of(v), direction));
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/JavaTimeSerializers.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/JavaTimeSerializers.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/JavaTimeSerializers.java
deleted file mode 100644
index 7ceae94..0000000
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/JavaTimeSerializers.java
+++ /dev/null
@@ -1,326 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.tinkerpop.gremlin.structure.io.graphson;
-
-import org.apache.tinkerpop.shaded.jackson.core.JsonGenerator;
-import org.apache.tinkerpop.shaded.jackson.core.JsonParser;
-import org.apache.tinkerpop.shaded.jackson.databind.DeserializationContext;
-import org.apache.tinkerpop.shaded.jackson.databind.SerializerProvider;
-import org.apache.tinkerpop.shaded.jackson.databind.deser.std.StdDeserializer;
-import org.apache.tinkerpop.shaded.jackson.databind.jsontype.TypeSerializer;
-import org.apache.tinkerpop.shaded.jackson.databind.ser.std.StdSerializer;
-
-import java.io.IOException;
-import java.time.Duration;
-import java.time.Instant;
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-import java.time.LocalTime;
-import java.time.MonthDay;
-import java.time.OffsetDateTime;
-import java.time.OffsetTime;
-import java.time.Period;
-import java.time.Year;
-import java.time.YearMonth;
-import java.time.ZoneOffset;
-import java.time.ZonedDateTime;
-
-/**
- * GraphSON serializers for classes in {@code java.time.*}.
- */
-final class JavaTimeSerializers {
-
-    private JavaTimeSerializers() {}
-
-    /**
-     * Base class for serializing the {@code java.time.*} to ISO-8061 formats.
-     */
-    static abstract class AbstractJavaTimeSerializer<T> extends StdSerializer<T> {
-
-        public AbstractJavaTimeSerializer(final Class<T> clazz) {
-            super(clazz);
-        }
-
-        @Override
-        public void serialize(final T value, final JsonGenerator gen,
-                              final SerializerProvider serializerProvider) throws IOException {
-            gen.writeString(value.toString());
-        }
-
-        @Override
-        public void serializeWithType(final T value, final JsonGenerator gen,
-                                      final SerializerProvider serializers, final TypeSerializer typeSer) throws IOException {
-            typeSer.writeTypePrefixForObject(value, gen);
-            gen.writeStringField(GraphSONTokens.VALUE, value.toString());
-            typeSer.writeTypeSuffixForObject(value, gen);
-        }
-    }
-    /**
-     * Base class for serializing the {@code java.time.*} from ISO-8061 formats.
-     */
-    abstract static class AbstractJavaTimeJacksonDeserializer<T> extends StdDeserializer<T> {
-        public AbstractJavaTimeJacksonDeserializer(final Class<T> clazz) {
-            super(clazz);
-        }
-
-        public abstract T parse(final String val);
-
-        @Override
-        public T deserialize(final JsonParser jsonParser, final DeserializationContext deserializationContext) throws IOException {
-            if (!jsonParser.getText().equals(GraphSONTokens.VALUE))
-                throw new IOException(String.format("Invalid format for %s - expecting '%s' with a text value in ISO-8061 format", _valueClass.getSimpleName(), GraphSONTokens.VALUE));
-
-            return parse(jsonParser.nextTextValue());
-        }
-    }
-
-    final static class DurationJacksonSerializer extends AbstractJavaTimeSerializer<Duration> {
-
-        public DurationJacksonSerializer() {
-            super(Duration.class);
-        }
-    }
-
-    final static class DurationJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<Duration> {
-        public DurationJacksonDeserializer() {
-            super(Duration.class);
-        }
-
-        @Override
-        public Duration parse(final String val) {
-            return Duration.parse(val);
-        }
-    }
-
-    final static class InstantJacksonSerializer extends AbstractJavaTimeSerializer<Instant> {
-
-        public InstantJacksonSerializer() {
-            super(Instant.class);
-        }
-    }
-
-    final static class InstantJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<Instant> {
-        public InstantJacksonDeserializer() {
-            super(Instant.class);
-        }
-
-        @Override
-        public Instant parse(final String val) {
-            return Instant.parse(val);
-        }
-    }
-
-    final static class LocalDateJacksonSerializer extends AbstractJavaTimeSerializer<LocalDate> {
-
-        public LocalDateJacksonSerializer() {
-            super(LocalDate.class);
-        }
-    }
-
-    final static class LocalDateJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<LocalDate> {
-        public LocalDateJacksonDeserializer() {
-            super(LocalDate.class);
-        }
-
-        @Override
-        public LocalDate parse(final String val) {
-            return LocalDate.parse(val);
-        }
-    }
-
-    final static class LocalDateTimeJacksonSerializer extends AbstractJavaTimeSerializer<LocalDateTime> {
-
-        public LocalDateTimeJacksonSerializer() {
-            super(LocalDateTime.class);
-        }
-    }
-
-    final static class LocalDateTimeJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<LocalDateTime> {
-        public LocalDateTimeJacksonDeserializer() {
-            super(LocalDateTime.class);
-        }
-
-        @Override
-        public LocalDateTime parse(final String val) {
-            return LocalDateTime.parse(val);
-        }
-    }
-
-    final static class LocalTimeJacksonSerializer extends AbstractJavaTimeSerializer<LocalTime> {
-
-        public LocalTimeJacksonSerializer() {
-            super(LocalTime.class);
-        }
-    }
-
-    final static class LocalTimeJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<LocalTime> {
-        public LocalTimeJacksonDeserializer() {
-            super(LocalTime.class);
-        }
-
-        @Override
-        public LocalTime parse(final String val) {
-            return LocalTime.parse(val);
-        }
-    }
-
-    final static class MonthDayJacksonSerializer extends AbstractJavaTimeSerializer<MonthDay> {
-
-        public MonthDayJacksonSerializer() {
-            super(MonthDay.class);
-        }
-    }
-
-    final static class MonthDayJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<MonthDay> {
-        public MonthDayJacksonDeserializer() {
-            super(MonthDay.class);
-        }
-
-        @Override
-        public MonthDay parse(final String val) {
-            return MonthDay.parse(val);
-        }
-    }
-
-    final static class OffsetDateTimeJacksonSerializer extends AbstractJavaTimeSerializer<OffsetDateTime> {
-
-        public OffsetDateTimeJacksonSerializer() {
-            super(OffsetDateTime.class);
-        }
-    }
-
-    final static class OffsetDateTimeJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<OffsetDateTime> {
-        public OffsetDateTimeJacksonDeserializer() {
-            super(OffsetDateTime.class);
-        }
-
-        @Override
-        public OffsetDateTime parse(final String val) {
-            return OffsetDateTime.parse(val);
-        }
-    }
-
-    final static class OffsetTimeJacksonSerializer extends AbstractJavaTimeSerializer<OffsetTime> {
-
-        public OffsetTimeJacksonSerializer() {
-            super(OffsetTime.class);
-        }
-    }
-
-    final static class OffsetTimeJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<OffsetTime> {
-        public OffsetTimeJacksonDeserializer() {
-            super(OffsetTime.class);
-        }
-
-        @Override
-        public OffsetTime parse(final String val) {
-            return OffsetTime.parse(val);
-        }
-    }
-
-    final static class PeriodJacksonSerializer extends AbstractJavaTimeSerializer<Period> {
-
-        public PeriodJacksonSerializer() {
-            super(Period.class);
-        }
-    }
-
-    final static class PeriodJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<Period> {
-        public PeriodJacksonDeserializer() {
-            super(Period.class);
-        }
-
-        @Override
-        public Period parse(final String val) {
-            return Period.parse(val);
-        }
-    }
-
-    final static class YearJacksonSerializer extends AbstractJavaTimeSerializer<Year> {
-
-        public YearJacksonSerializer() {
-            super(Year.class);
-        }
-    }
-
-    final static class YearJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<Year> {
-        public YearJacksonDeserializer() {
-            super(Year.class);
-        }
-
-        @Override
-        public Year parse(final String val) {
-            return Year.parse(val);
-        }
-    }
-
-    final static class YearMonthJacksonSerializer extends AbstractJavaTimeSerializer<YearMonth> {
-
-        public YearMonthJacksonSerializer() {
-            super(YearMonth.class);
-        }
-    }
-
-    final static class YearMonthJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<YearMonth> {
-        public YearMonthJacksonDeserializer() {
-            super(YearMonth.class);
-        }
-
-        @Override
-        public YearMonth parse(final String val) {
-            return YearMonth.parse(val);
-        }
-    }
-
-    final static class ZonedDateTimeJacksonSerializer extends AbstractJavaTimeSerializer<ZonedDateTime> {
-
-        public ZonedDateTimeJacksonSerializer() {
-            super(ZonedDateTime.class);
-        }
-    }
-
-    final static class ZonedDateTimeJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<ZonedDateTime> {
-        public ZonedDateTimeJacksonDeserializer() {
-            super(ZonedDateTime.class);
-        }
-
-        @Override
-        public ZonedDateTime parse(final String val) {
-            return ZonedDateTime.parse(val);
-        }
-    }
-
-    final static class ZoneOffsetJacksonSerializer extends AbstractJavaTimeSerializer<ZoneOffset> {
-
-        public ZoneOffsetJacksonSerializer() {
-            super(ZoneOffset.class);
-        }
-    }
-
-    final static class ZoneOffsetJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<ZoneOffset> {
-        public ZoneOffsetJacksonDeserializer() {
-            super(ZoneOffset.class);
-        }
-
-        @Override
-        public ZoneOffset parse(final String val) {
-            return ZoneOffset.of(val);
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/JavaTimeSerializersV1d0.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/JavaTimeSerializersV1d0.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/JavaTimeSerializersV1d0.java
new file mode 100644
index 0000000..763c1d9
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/JavaTimeSerializersV1d0.java
@@ -0,0 +1,326 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.structure.io.graphson;
+
+import org.apache.tinkerpop.shaded.jackson.core.JsonGenerator;
+import org.apache.tinkerpop.shaded.jackson.core.JsonParser;
+import org.apache.tinkerpop.shaded.jackson.databind.DeserializationContext;
+import org.apache.tinkerpop.shaded.jackson.databind.SerializerProvider;
+import org.apache.tinkerpop.shaded.jackson.databind.deser.std.StdDeserializer;
+import org.apache.tinkerpop.shaded.jackson.databind.jsontype.TypeSerializer;
+import org.apache.tinkerpop.shaded.jackson.databind.ser.std.StdSerializer;
+
+import java.io.IOException;
+import java.time.Duration;
+import java.time.Instant;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.MonthDay;
+import java.time.OffsetDateTime;
+import java.time.OffsetTime;
+import java.time.Period;
+import java.time.Year;
+import java.time.YearMonth;
+import java.time.ZoneOffset;
+import java.time.ZonedDateTime;
+
+/**
+ * GraphSON serializers for classes in {@code java.time.*}.
+ */
+final class JavaTimeSerializersV1d0 {
+
+    private JavaTimeSerializersV1d0() {}
+
+    /**
+     * Base class for serializing the {@code java.time.*} to ISO-8061 formats.
+     */
+    static abstract class AbstractJavaTimeSerializer<T> extends StdSerializer<T> {
+
+        public AbstractJavaTimeSerializer(final Class<T> clazz) {
+            super(clazz);
+        }
+
+        @Override
+        public void serialize(final T value, final JsonGenerator gen,
+                              final SerializerProvider serializerProvider) throws IOException {
+            gen.writeString(value.toString());
+        }
+
+        @Override
+        public void serializeWithType(final T value, final JsonGenerator gen,
+                                      final SerializerProvider serializers, final TypeSerializer typeSer) throws IOException {
+            typeSer.writeTypePrefixForObject(value, gen);
+            gen.writeStringField(GraphSONTokens.VALUE, value.toString());
+            typeSer.writeTypeSuffixForObject(value, gen);
+        }
+    }
+    /**
+     * Base class for serializing the {@code java.time.*} from ISO-8061 formats.
+     */
+    abstract static class AbstractJavaTimeJacksonDeserializer<T> extends StdDeserializer<T> {
+        public AbstractJavaTimeJacksonDeserializer(final Class<T> clazz) {
+            super(clazz);
+        }
+
+        public abstract T parse(final String val);
+
+        @Override
+        public T deserialize(final JsonParser jsonParser, final DeserializationContext deserializationContext) throws IOException {
+            if (!jsonParser.getText().equals(GraphSONTokens.VALUE))
+                throw new IOException(String.format("Invalid format for %s - expecting '%s' with a text value in ISO-8061 format", _valueClass.getSimpleName(), GraphSONTokens.VALUE));
+
+            return parse(jsonParser.nextTextValue());
+        }
+    }
+
+    final static class DurationJacksonSerializer extends AbstractJavaTimeSerializer<Duration> {
+
+        public DurationJacksonSerializer() {
+            super(Duration.class);
+        }
+    }
+
+    final static class DurationJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<Duration> {
+        public DurationJacksonDeserializer() {
+            super(Duration.class);
+        }
+
+        @Override
+        public Duration parse(final String val) {
+            return Duration.parse(val);
+        }
+    }
+
+    final static class InstantJacksonSerializer extends AbstractJavaTimeSerializer<Instant> {
+
+        public InstantJacksonSerializer() {
+            super(Instant.class);
+        }
+    }
+
+    final static class InstantJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<Instant> {
+        public InstantJacksonDeserializer() {
+            super(Instant.class);
+        }
+
+        @Override
+        public Instant parse(final String val) {
+            return Instant.parse(val);
+        }
+    }
+
+    final static class LocalDateJacksonSerializer extends AbstractJavaTimeSerializer<LocalDate> {
+
+        public LocalDateJacksonSerializer() {
+            super(LocalDate.class);
+        }
+    }
+
+    final static class LocalDateJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<LocalDate> {
+        public LocalDateJacksonDeserializer() {
+            super(LocalDate.class);
+        }
+
+        @Override
+        public LocalDate parse(final String val) {
+            return LocalDate.parse(val);
+        }
+    }
+
+    final static class LocalDateTimeJacksonSerializer extends AbstractJavaTimeSerializer<LocalDateTime> {
+
+        public LocalDateTimeJacksonSerializer() {
+            super(LocalDateTime.class);
+        }
+    }
+
+    final static class LocalDateTimeJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<LocalDateTime> {
+        public LocalDateTimeJacksonDeserializer() {
+            super(LocalDateTime.class);
+        }
+
+        @Override
+        public LocalDateTime parse(final String val) {
+            return LocalDateTime.parse(val);
+        }
+    }
+
+    final static class LocalTimeJacksonSerializer extends AbstractJavaTimeSerializer<LocalTime> {
+
+        public LocalTimeJacksonSerializer() {
+            super(LocalTime.class);
+        }
+    }
+
+    final static class LocalTimeJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<LocalTime> {
+        public LocalTimeJacksonDeserializer() {
+            super(LocalTime.class);
+        }
+
+        @Override
+        public LocalTime parse(final String val) {
+            return LocalTime.parse(val);
+        }
+    }
+
+    final static class MonthDayJacksonSerializer extends AbstractJavaTimeSerializer<MonthDay> {
+
+        public MonthDayJacksonSerializer() {
+            super(MonthDay.class);
+        }
+    }
+
+    final static class MonthDayJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<MonthDay> {
+        public MonthDayJacksonDeserializer() {
+            super(MonthDay.class);
+        }
+
+        @Override
+        public MonthDay parse(final String val) {
+            return MonthDay.parse(val);
+        }
+    }
+
+    final static class OffsetDateTimeJacksonSerializer extends AbstractJavaTimeSerializer<OffsetDateTime> {
+
+        public OffsetDateTimeJacksonSerializer() {
+            super(OffsetDateTime.class);
+        }
+    }
+
+    final static class OffsetDateTimeJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<OffsetDateTime> {
+        public OffsetDateTimeJacksonDeserializer() {
+            super(OffsetDateTime.class);
+        }
+
+        @Override
+        public OffsetDateTime parse(final String val) {
+            return OffsetDateTime.parse(val);
+        }
+    }
+
+    final static class OffsetTimeJacksonSerializer extends AbstractJavaTimeSerializer<OffsetTime> {
+
+        public OffsetTimeJacksonSerializer() {
+            super(OffsetTime.class);
+        }
+    }
+
+    final static class OffsetTimeJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<OffsetTime> {
+        public OffsetTimeJacksonDeserializer() {
+            super(OffsetTime.class);
+        }
+
+        @Override
+        public OffsetTime parse(final String val) {
+            return OffsetTime.parse(val);
+        }
+    }
+
+    final static class PeriodJacksonSerializer extends AbstractJavaTimeSerializer<Period> {
+
+        public PeriodJacksonSerializer() {
+            super(Period.class);
+        }
+    }
+
+    final static class PeriodJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<Period> {
+        public PeriodJacksonDeserializer() {
+            super(Period.class);
+        }
+
+        @Override
+        public Period parse(final String val) {
+            return Period.parse(val);
+        }
+    }
+
+    final static class YearJacksonSerializer extends AbstractJavaTimeSerializer<Year> {
+
+        public YearJacksonSerializer() {
+            super(Year.class);
+        }
+    }
+
+    final static class YearJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<Year> {
+        public YearJacksonDeserializer() {
+            super(Year.class);
+        }
+
+        @Override
+        public Year parse(final String val) {
+            return Year.parse(val);
+        }
+    }
+
+    final static class YearMonthJacksonSerializer extends AbstractJavaTimeSerializer<YearMonth> {
+
+        public YearMonthJacksonSerializer() {
+            super(YearMonth.class);
+        }
+    }
+
+    final static class YearMonthJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<YearMonth> {
+        public YearMonthJacksonDeserializer() {
+            super(YearMonth.class);
+        }
+
+        @Override
+        public YearMonth parse(final String val) {
+            return YearMonth.parse(val);
+        }
+    }
+
+    final static class ZonedDateTimeJacksonSerializer extends AbstractJavaTimeSerializer<ZonedDateTime> {
+
+        public ZonedDateTimeJacksonSerializer() {
+            super(ZonedDateTime.class);
+        }
+    }
+
+    final static class ZonedDateTimeJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<ZonedDateTime> {
+        public ZonedDateTimeJacksonDeserializer() {
+            super(ZonedDateTime.class);
+        }
+
+        @Override
+        public ZonedDateTime parse(final String val) {
+            return ZonedDateTime.parse(val);
+        }
+    }
+
+    final static class ZoneOffsetJacksonSerializer extends AbstractJavaTimeSerializer<ZoneOffset> {
+
+        public ZoneOffsetJacksonSerializer() {
+            super(ZoneOffset.class);
+        }
+    }
+
+    final static class ZoneOffsetJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<ZoneOffset> {
+        public ZoneOffsetJacksonDeserializer() {
+            super(ZoneOffset.class);
+        }
+
+        @Override
+        public ZoneOffset parse(final String val) {
+            return ZoneOffset.of(val);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/JavaTimeSerializersV2d0.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/JavaTimeSerializersV2d0.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/JavaTimeSerializersV2d0.java
new file mode 100644
index 0000000..2950a33
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/JavaTimeSerializersV2d0.java
@@ -0,0 +1,323 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.structure.io.graphson;
+
+import org.apache.tinkerpop.shaded.jackson.core.JsonGenerator;
+import org.apache.tinkerpop.shaded.jackson.core.JsonParser;
+import org.apache.tinkerpop.shaded.jackson.databind.DeserializationContext;
+import org.apache.tinkerpop.shaded.jackson.databind.SerializerProvider;
+import org.apache.tinkerpop.shaded.jackson.databind.deser.std.StdDeserializer;
+import org.apache.tinkerpop.shaded.jackson.databind.jsontype.TypeSerializer;
+import org.apache.tinkerpop.shaded.jackson.databind.ser.std.StdSerializer;
+
+import java.io.IOException;
+import java.time.Duration;
+import java.time.Instant;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.MonthDay;
+import java.time.OffsetDateTime;
+import java.time.OffsetTime;
+import java.time.Period;
+import java.time.Year;
+import java.time.YearMonth;
+import java.time.ZoneOffset;
+import java.time.ZonedDateTime;
+
+/**
+ * GraphSON serializers for classes in {@code java.time.*} for the version 2.0 of GraphSON.
+ */
+final class JavaTimeSerializersV2d0 {
+
+    private JavaTimeSerializersV2d0() {}
+
+    /**
+     * Base class for serializing the {@code java.time.*} to ISO-8061 formats.
+     */
+    static abstract class AbstractJavaTimeSerializer<T> extends StdSerializer<T> {
+
+        public AbstractJavaTimeSerializer(final Class<T> clazz) {
+            super(clazz);
+        }
+
+        @Override
+        public void serialize(final T value, final JsonGenerator gen,
+                              final SerializerProvider serializerProvider) throws IOException {
+            gen.writeString(value.toString());
+        }
+
+        @Override
+        public void serializeWithType(final T value, final JsonGenerator gen,
+                                      final SerializerProvider serializers, final TypeSerializer typeSer) throws IOException {
+            typeSer.writeTypePrefixForScalar(value, gen);
+            gen.writeString(value.toString());
+            typeSer.writeTypeSuffixForScalar(value, gen);
+        }
+    }
+    /**
+     * Base class for serializing the {@code java.time.*} from ISO-8061 formats.
+     */
+    abstract static class AbstractJavaTimeJacksonDeserializer<T> extends StdDeserializer<T> {
+        public AbstractJavaTimeJacksonDeserializer(final Class<T> clazz) {
+            super(clazz);
+        }
+
+        public abstract T parse(final String val);
+
+        @Override
+        public T deserialize(final JsonParser jsonParser, final DeserializationContext deserializationContext) throws IOException {
+            return parse(jsonParser.getText());
+        }
+    }
+
+    final static class DurationJacksonSerializer extends AbstractJavaTimeSerializer<Duration> {
+
+        public DurationJacksonSerializer() {
+            super(Duration.class);
+        }
+    }
+
+    final static class DurationJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<Duration> {
+        public DurationJacksonDeserializer() {
+            super(Duration.class);
+        }
+
+        @Override
+        public Duration parse(final String val) {
+            return Duration.parse(val);
+        }
+    }
+
+    final static class InstantJacksonSerializer extends AbstractJavaTimeSerializer<Instant> {
+
+        public InstantJacksonSerializer() {
+            super(Instant.class);
+        }
+    }
+
+    final static class InstantJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<Instant> {
+        public InstantJacksonDeserializer() {
+            super(Instant.class);
+        }
+
+        @Override
+        public Instant parse(final String val) {
+            return Instant.parse(val);
+        }
+    }
+
+    final static class LocalDateJacksonSerializer extends AbstractJavaTimeSerializer<LocalDate> {
+
+        public LocalDateJacksonSerializer() {
+            super(LocalDate.class);
+        }
+    }
+
+    final static class LocalDateJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<LocalDate> {
+        public LocalDateJacksonDeserializer() {
+            super(LocalDate.class);
+        }
+
+        @Override
+        public LocalDate parse(final String val) {
+            return LocalDate.parse(val);
+        }
+    }
+
+    final static class LocalDateTimeJacksonSerializer extends AbstractJavaTimeSerializer<LocalDateTime> {
+
+        public LocalDateTimeJacksonSerializer() {
+            super(LocalDateTime.class);
+        }
+    }
+
+    final static class LocalDateTimeJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<LocalDateTime> {
+        public LocalDateTimeJacksonDeserializer() {
+            super(LocalDateTime.class);
+        }
+
+        @Override
+        public LocalDateTime parse(final String val) {
+            return LocalDateTime.parse(val);
+        }
+    }
+
+    final static class LocalTimeJacksonSerializer extends AbstractJavaTimeSerializer<LocalTime> {
+
+        public LocalTimeJacksonSerializer() {
+            super(LocalTime.class);
+        }
+    }
+
+    final static class LocalTimeJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<LocalTime> {
+        public LocalTimeJacksonDeserializer() {
+            super(LocalTime.class);
+        }
+
+        @Override
+        public LocalTime parse(final String val) {
+            return LocalTime.parse(val);
+        }
+    }
+
+    final static class MonthDayJacksonSerializer extends AbstractJavaTimeSerializer<MonthDay> {
+
+        public MonthDayJacksonSerializer() {
+            super(MonthDay.class);
+        }
+    }
+
+    final static class MonthDayJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<MonthDay> {
+        public MonthDayJacksonDeserializer() {
+            super(MonthDay.class);
+        }
+
+        @Override
+        public MonthDay parse(final String val) {
+            return MonthDay.parse(val);
+        }
+    }
+
+    final static class OffsetDateTimeJacksonSerializer extends AbstractJavaTimeSerializer<OffsetDateTime> {
+
+        public OffsetDateTimeJacksonSerializer() {
+            super(OffsetDateTime.class);
+        }
+    }
+
+    final static class OffsetDateTimeJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<OffsetDateTime> {
+        public OffsetDateTimeJacksonDeserializer() {
+            super(OffsetDateTime.class);
+        }
+
+        @Override
+        public OffsetDateTime parse(final String val) {
+            return OffsetDateTime.parse(val);
+        }
+    }
+
+    final static class OffsetTimeJacksonSerializer extends AbstractJavaTimeSerializer<OffsetTime> {
+
+        public OffsetTimeJacksonSerializer() {
+            super(OffsetTime.class);
+        }
+    }
+
+    final static class OffsetTimeJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<OffsetTime> {
+        public OffsetTimeJacksonDeserializer() {
+            super(OffsetTime.class);
+        }
+
+        @Override
+        public OffsetTime parse(final String val) {
+            return OffsetTime.parse(val);
+        }
+    }
+
+    final static class PeriodJacksonSerializer extends AbstractJavaTimeSerializer<Period> {
+
+        public PeriodJacksonSerializer() {
+            super(Period.class);
+        }
+    }
+
+    final static class PeriodJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<Period> {
+        public PeriodJacksonDeserializer() {
+            super(Period.class);
+        }
+
+        @Override
+        public Period parse(final String val) {
+            return Period.parse(val);
+        }
+    }
+
+    final static class YearJacksonSerializer extends AbstractJavaTimeSerializer<Year> {
+
+        public YearJacksonSerializer() {
+            super(Year.class);
+        }
+    }
+
+    final static class YearJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<Year> {
+        public YearJacksonDeserializer() {
+            super(Year.class);
+        }
+
+        @Override
+        public Year parse(final String val) {
+            return Year.parse(val);
+        }
+    }
+
+    final static class YearMonthJacksonSerializer extends AbstractJavaTimeSerializer<YearMonth> {
+
+        public YearMonthJacksonSerializer() {
+            super(YearMonth.class);
+        }
+    }
+
+    final static class YearMonthJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<YearMonth> {
+        public YearMonthJacksonDeserializer() {
+            super(YearMonth.class);
+        }
+
+        @Override
+        public YearMonth parse(final String val) {
+            return YearMonth.parse(val);
+        }
+    }
+
+    final static class ZonedDateTimeJacksonSerializer extends AbstractJavaTimeSerializer<ZonedDateTime> {
+
+        public ZonedDateTimeJacksonSerializer() {
+            super(ZonedDateTime.class);
+        }
+    }
+
+    final static class ZonedDateTimeJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<ZonedDateTime> {
+        public ZonedDateTimeJacksonDeserializer() {
+            super(ZonedDateTime.class);
+        }
+
+        @Override
+        public ZonedDateTime parse(final String val) {
+            return ZonedDateTime.parse(val);
+        }
+    }
+
+    final static class ZoneOffsetJacksonSerializer extends AbstractJavaTimeSerializer<ZoneOffset> {
+
+        public ZoneOffsetJacksonSerializer() {
+            super(ZoneOffset.class);
+        }
+    }
+
+    final static class ZoneOffsetJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<ZoneOffset> {
+        public ZoneOffsetJacksonDeserializer() {
+            super(ZoneOffset.class);
+        }
+
+        @Override
+        public ZoneOffset parse(final String val) {
+            return ZoneOffset.of(val);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/JavaUtilSerializers.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/JavaUtilSerializers.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/JavaUtilSerializers.java
deleted file mode 100644
index 4f2f5da..0000000
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/JavaUtilSerializers.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.tinkerpop.gremlin.structure.io.graphson;
-
-import org.apache.tinkerpop.gremlin.structure.Element;
-import org.apache.tinkerpop.shaded.jackson.core.JsonGenerator;
-import org.apache.tinkerpop.shaded.jackson.databind.SerializationFeature;
-import org.apache.tinkerpop.shaded.jackson.databind.SerializerProvider;
-import org.apache.tinkerpop.shaded.jackson.databind.jsontype.TypeSerializer;
-import org.apache.tinkerpop.shaded.jackson.databind.ser.std.StdSerializer;
-
-import java.io.IOException;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * GraphSON serializers for classes in {@code java.util.*}.
- */
-final class JavaUtilSerializers {
-
-    private JavaUtilSerializers() {}
-
-    final static class MapEntryJacksonSerializer extends StdSerializer<Map.Entry> {
-
-        public MapEntryJacksonSerializer() {
-            super(Map.Entry.class);
-        }
-
-        @Override
-        public void serialize(final Map.Entry entry, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
-                throws IOException {
-            ser(entry, jsonGenerator, serializerProvider, null);
-        }
-
-        @Override
-        public void serializeWithType(final Map.Entry entry, final JsonGenerator jsonGenerator,
-                                      final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException {
-            ser(entry, jsonGenerator, serializerProvider, typeSerializer);
-        }
-
-        private static void ser(final Map.Entry entry, final JsonGenerator jsonGenerator,
-                                final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException {
-            jsonGenerator.writeStartObject();
-            if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
-
-            // this treatment of keys is consistent with the current GraphSONKeySerializer which extends the
-            // StdKeySerializer
-            final Object key = entry.getKey();
-            final Class cls = key.getClass();
-            String k;
-            if (cls == String.class)
-                k = (String) key;
-            else if (Element.class.isAssignableFrom(cls))
-                k = ((Element) key).id().toString();
-            else if(Date.class.isAssignableFrom(cls)) {
-                if (serializerProvider.isEnabled(SerializationFeature.WRITE_DATE_KEYS_AS_TIMESTAMPS))
-                    k = String.valueOf(((Date) key).getTime());
-                else
-                    k = serializerProvider.getConfig().getDateFormat().format((Date) key);
-            } else if(cls == Class.class)
-                k = ((Class) key).getName();
-            else
-                k = key.toString();
-
-            serializerProvider.defaultSerializeField(k, entry.getValue(), jsonGenerator);
-            jsonGenerator.writeEndObject();
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/JavaUtilSerializersV1d0.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/JavaUtilSerializersV1d0.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/JavaUtilSerializersV1d0.java
new file mode 100644
index 0000000..15dd3b9
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/JavaUtilSerializersV1d0.java
@@ -0,0 +1,86 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.structure.io.graphson;
+
+import org.apache.tinkerpop.gremlin.structure.Element;
+import org.apache.tinkerpop.shaded.jackson.core.JsonGenerator;
+import org.apache.tinkerpop.shaded.jackson.databind.SerializationFeature;
+import org.apache.tinkerpop.shaded.jackson.databind.SerializerProvider;
+import org.apache.tinkerpop.shaded.jackson.databind.jsontype.TypeSerializer;
+import org.apache.tinkerpop.shaded.jackson.databind.ser.std.StdSerializer;
+
+import java.io.IOException;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * GraphSON serializers for classes in {@code java.util.*}.
+ */
+final class JavaUtilSerializersV1d0 {
+
+    private JavaUtilSerializersV1d0() {}
+
+    final static class MapEntryJacksonSerializer extends StdSerializer<Map.Entry> {
+
+        public MapEntryJacksonSerializer() {
+            super(Map.Entry.class);
+        }
+
+        @Override
+        public void serialize(final Map.Entry entry, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
+                throws IOException {
+            ser(entry, jsonGenerator, serializerProvider, null);
+        }
+
+        @Override
+        public void serializeWithType(final Map.Entry entry, final JsonGenerator jsonGenerator,
+                                      final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException {
+            ser(entry, jsonGenerator, serializerProvider, typeSerializer);
+        }
+
+        private static void ser(final Map.Entry entry, final JsonGenerator jsonGenerator,
+                                final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException {
+            jsonGenerator.writeStartObject();
+            if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
+
+            // this treatment of keys is consistent with the current GraphSONKeySerializer which extends the
+            // StdKeySerializer
+            final Object key = entry.getKey();
+            final Class cls = key.getClass();
+            String k;
+            if (cls == String.class)
+                k = (String) key;
+            else if (Element.class.isAssignableFrom(cls))
+                k = ((Element) key).id().toString();
+            else if(Date.class.isAssignableFrom(cls)) {
+                if (serializerProvider.isEnabled(SerializationFeature.WRITE_DATE_KEYS_AS_TIMESTAMPS))
+                    k = String.valueOf(((Date) key).getTime());
+                else
+                    k = serializerProvider.getConfig().getDateFormat().format((Date) key);
+            } else if(cls == Class.class)
+                k = ((Class) key).getName();
+            else
+                k = key.toString();
+
+            serializerProvider.defaultSerializeField(k, entry.getValue(), jsonGenerator);
+            jsonGenerator.writeEndObject();
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/JavaUtilSerializersV2d0.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/JavaUtilSerializersV2d0.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/JavaUtilSerializersV2d0.java
new file mode 100644
index 0000000..8d867c9
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/JavaUtilSerializersV2d0.java
@@ -0,0 +1,87 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.structure.io.graphson;
+
+import org.apache.tinkerpop.gremlin.structure.Element;
+import org.apache.tinkerpop.shaded.jackson.core.JsonGenerator;
+import org.apache.tinkerpop.shaded.jackson.databind.SerializationFeature;
+import org.apache.tinkerpop.shaded.jackson.databind.SerializerProvider;
+import org.apache.tinkerpop.shaded.jackson.databind.jsontype.TypeSerializer;
+import org.apache.tinkerpop.shaded.jackson.databind.ser.std.ByteBufferSerializer;
+import org.apache.tinkerpop.shaded.jackson.databind.ser.std.StdSerializer;
+
+import java.io.IOException;
+import java.nio.ByteBuffer;
+import java.util.Date;
+import java.util.Map;
+
+/**
+ * GraphSON serializers for classes in {@code java.util.*} for the version 2.0 of GraphSON.
+ */
+final class JavaUtilSerializersV2d0 {
+
+    private JavaUtilSerializersV2d0() {}
+
+    final static class MapEntryJacksonSerializer extends StdSerializer<Map.Entry> {
+
+        public MapEntryJacksonSerializer() {
+            super(Map.Entry.class);
+        }
+
+        @Override
+        public void serialize(final Map.Entry entry, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
+                throws IOException {
+            jsonGenerator.writeStartObject();
+            ser(entry, jsonGenerator, serializerProvider);
+            jsonGenerator.writeEndObject();
+        }
+
+        @Override
+        public void serializeWithType(final Map.Entry entry, final JsonGenerator jsonGenerator,
+                                      final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException {
+            typeSerializer.writeTypePrefixForObject(entry, jsonGenerator);
+            ser(entry, jsonGenerator, serializerProvider);
+            typeSerializer.writeTypeSuffixForObject(entry, jsonGenerator);
+        }
+
+        private static void ser(final Map.Entry entry, final JsonGenerator jsonGenerator,
+                                final SerializerProvider serializerProvider) throws IOException {
+            // this treatment of keys is consistent with the current GraphSONKeySerializer which extends the
+            // StdKeySerializer
+            final Object key = entry.getKey();
+            final Class cls = key.getClass();
+            String k;
+            if (cls == String.class)
+                k = (String) key;
+            else if (Element.class.isAssignableFrom(cls))
+                k = ((Element) key).id().toString();
+            else if(Date.class.isAssignableFrom(cls)) {
+                if (serializerProvider.isEnabled(SerializationFeature.WRITE_DATE_KEYS_AS_TIMESTAMPS))
+                    k = String.valueOf(((Date) key).getTime());
+                else
+                    k = serializerProvider.getConfig().getDateFormat().format((Date) key);
+            } else if(cls == Class.class)
+                k = ((Class) key).getName();
+            else
+                k = key.toString();
+
+            serializerProvider.defaultSerializeField(k, entry.getValue(), jsonGenerator);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/JsonParserConcat.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/JsonParserConcat.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/JsonParserConcat.java
new file mode 100644
index 0000000..6b19e48
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/JsonParserConcat.java
@@ -0,0 +1,83 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.structure.io.graphson;
+
+import org.apache.tinkerpop.shaded.jackson.core.JsonParseException;
+import org.apache.tinkerpop.shaded.jackson.core.JsonParser;
+import org.apache.tinkerpop.shaded.jackson.core.JsonToken;
+import org.apache.tinkerpop.shaded.jackson.core.util.JsonParserSequence;
+
+import java.io.IOException;
+import java.util.ArrayList;
+
+/**
+ * Utility class to easily concatenate multiple JsonParsers. This class had to be implemented because the class it is
+ * extending, {@link JsonParserSequence}, inevitably skips a token when switching from one empty parser to a new one.
+ * I.e. it is automatically calling {@link JsonParser#nextToken()} when switching to the new parser, ignoring
+ * the current token.
+ *
+ * This class is used for high performance in GraphSON when trying to detect types.
+ *
+ * @author Kevin Gallardo (https://kgdo.me)
+ */
+public class JsonParserConcat extends JsonParserSequence {
+    protected JsonParserConcat(JsonParser[] parsers) {
+        super(parsers);
+    }
+
+    public static JsonParserConcat createFlattened(JsonParser first, JsonParser second) {
+        if (!(first instanceof JsonParserConcat) && !(second instanceof JsonParserConcat)) {
+            return new JsonParserConcat(new JsonParser[]{first, second});
+        } else {
+            ArrayList p = new ArrayList();
+            if (first instanceof JsonParserConcat) {
+                ((JsonParserConcat) first).addFlattenedActiveParsers(p);
+            } else {
+                p.add(first);
+            }
+
+            if (second instanceof JsonParserConcat) {
+                ((JsonParserConcat) second).addFlattenedActiveParsers(p);
+            } else {
+                p.add(second);
+            }
+            return new JsonParserConcat((JsonParser[]) p.toArray(new JsonParser[p.size()]));
+        }
+    }
+
+    @Override
+    public JsonToken nextToken() throws IOException, JsonParseException {
+        JsonToken t = this.delegate.nextToken();
+        if (t != null) {
+            return t;
+        } else {
+            do {
+                if (!this.switchToNext()) {
+                    return null;
+                }
+                // call getCurrentToken() instead of nextToken() in JsonParserSequence.
+                t = this.delegate.getCurrentToken() == null
+                        ? this.nextToken()
+                        : this.getCurrentToken();
+            } while (t == null);
+
+            return t;
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/LegacyGraphSONReader.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/LegacyGraphSONReader.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/LegacyGraphSONReader.java
index f015193..679c827 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/LegacyGraphSONReader.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/LegacyGraphSONReader.java
@@ -19,10 +19,10 @@
 package org.apache.tinkerpop.gremlin.structure.io.graphson;
 
 import org.apache.tinkerpop.gremlin.structure.Direction;
-import org.apache.tinkerpop.gremlin.structure.Property;
-import org.apache.tinkerpop.gremlin.structure.T;
 import org.apache.tinkerpop.gremlin.structure.Edge;
 import org.apache.tinkerpop.gremlin.structure.Graph;
+import org.apache.tinkerpop.gremlin.structure.Property;
+import org.apache.tinkerpop.gremlin.structure.T;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
 import org.apache.tinkerpop.gremlin.structure.VertexProperty;
 import org.apache.tinkerpop.gremlin.structure.io.GraphReader;


[37/48] tinkerpop git commit: TINKERPOP-1274: GraphSON 2.0.

Posted by sp...@apache.org.
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/data/grateful-dead-v2d0.json
----------------------------------------------------------------------
diff --git a/data/grateful-dead-v2d0.json b/data/grateful-dead-v2d0.json
new file mode 100644
index 0000000..92c4d84
--- /dev/null
+++ b/data/grateful-dead-v2d0.json
@@ -0,0 +1,808 @@
+{"id":1,"label":"song","inE":{"followedBy":[{"id":3059,"outV":153,"properties":{"weight":1}},{"id":276,"outV":5,"properties":{"weight":2}},{"id":3704,"outV":3,"properties":{"weight":2}},{"id":4383,"outV":62,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":0,"inV":2,"properties":{"weight":1}},{"id":1,"inV":3,"properties":{"weight":2}},{"id":2,"inV":4,"properties":{"weight":1}},{"id":3,"inV":5,"properties":{"weight":1}},{"id":4,"inV":6,"properties":{"weight":1}}],"sungBy":[{"id":7612,"inV":340}],"writtenBy":[{"id":7611,"inV":527}]},"properties":{"name":[{"id":0,"value":"HEY BO DIDDLEY"}],"songType":[{"id":2,"value":"cover"}],"performances":[{"id":1,"value":5}]}}
+{"id":2,"label":"song","inE":{"followedBy":[{"id":0,"outV":1,"properties":{"weight":1}},{"id":323,"outV":34,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":6190,"inV":123,"properties":{"weight":1}},{"id":6191,"inV":50,"properties":{"weight":1}}],"sungBy":[{"id":7666,"inV":525}],"writtenBy":[{"id":7665,"inV":525}]},"properties":{"name":[{"id":3,"value":"IM A MAN"}],"songType":[{"id":5,"value":"cover"}],"performances":[{"id":4,"value":1}]}}
+{"id":3,"label":"song","inE":{"followedBy":[{"id":1,"outV":1,"properties":{"weight":2}},{"id":2051,"outV":92,"properties":{"weight":4}},{"id":1412,"outV":83,"properties":{"weight":6}},{"id":6669,"outV":12,"properties":{"weight":1}},{"id":526,"outV":120,"properties":{"weight":2}},{"id":910,"outV":91,"properties":{"weight":3}},{"id":1166,"outV":26,"properties":{"weight":4}},{"id":6286,"outV":49,"properties":{"weight":1}},{"id":273,"outV":5,"properties":{"weight":40}},{"id":2194,"outV":235,"properties":{"weight":1}},{"id":1684,"outV":124,"properties":{"weight":1}},{"id":1941,"outV":148,"properties":{"weight":4}},{"id":3221,"outV":63,"properties":{"weight":1}},{"id":2712,"outV":13,"properties":{"weight":3}},{"id":6425,"outV":134,"properties":{"weight":2}},{"id":5787,"outV":76,"properties":{"weight":2}},{"id":5148,"outV":125,"properties":{"weight":4}},{"id":6692,"outV":141,"properties":{"weight":2}},{"id":6310,"outV":123,"properties":{"weight":1}},{"id":6448,"outV":187,"properties":{"wei
 ght":3}},{"id":2225,"outV":226,"properties":{"weight":1}},{"id":5042,"outV":209,"properties":{"weight":1}},{"id":4789,"outV":114,"properties":{"weight":2}},{"id":1464,"outV":81,"properties":{"weight":1}},{"id":2232,"outV":215,"properties":{"weight":1}},{"id":4665,"outV":154,"properties":{"weight":1}},{"id":2235,"outV":29,"properties":{"weight":163}},{"id":6208,"outV":319,"properties":{"weight":4}},{"id":706,"outV":206,"properties":{"weight":2}},{"id":835,"outV":171,"properties":{"weight":1}},{"id":5188,"outV":99,"properties":{"weight":1}},{"id":1862,"outV":94,"properties":{"weight":10}},{"id":1735,"outV":82,"properties":{"weight":1}},{"id":6343,"outV":21,"properties":{"weight":1}},{"id":4937,"outV":277,"properties":{"weight":1}},{"id":3276,"outV":160,"properties":{"weight":1}},{"id":3149,"outV":104,"properties":{"weight":1}},{"id":1358,"outV":130,"properties":{"weight":18}},{"id":4304,"outV":110,"properties":{"weight":1}},{"id":1105,"outV":59,"properties":{"weight":1}},{"id":722,"ou
 tV":80,"properties":{"weight":1}},{"id":4182,"outV":54,"properties":{"weight":1}},{"id":1499,"outV":164,"properties":{"weight":2}},{"id":2397,"outV":179,"properties":{"weight":1}},{"id":351,"outV":178,"properties":{"weight":1}},{"id":6623,"outV":127,"properties":{"weight":3}},{"id":2018,"outV":149,"properties":{"weight":1}},{"id":7011,"outV":89,"properties":{"weight":2}},{"id":5348,"outV":165,"properties":{"weight":1}},{"id":2278,"outV":25,"properties":{"weight":7}},{"id":1255,"outV":27,"properties":{"weight":2}},{"id":3048,"outV":153,"properties":{"weight":13}},{"id":5867,"outV":96,"properties":{"weight":116}},{"id":364,"outV":74,"properties":{"weight":2}},{"id":492,"outV":98,"properties":{"weight":1}},{"id":3948,"outV":138,"properties":{"weight":4}},{"id":4335,"outV":62,"properties":{"weight":1}},{"id":3312,"outV":252,"properties":{"weight":1}},{"id":5745,"outV":129,"properties":{"weight":1}},{"id":4596,"outV":85,"properties":{"weight":3}},{"id":5367,"outV":132,"properties":{"weig
 ht":1}},{"id":633,"outV":23,"properties":{"weight":1}},{"id":891,"outV":140,"properties":{"weight":2}},{"id":5375,"outV":69,"properties":{"weight":1}},{"id":6143,"outV":289,"properties":{"weight":3}}]},"outE":{"followedBy":[{"id":3712,"inV":27,"properties":{"weight":1}},{"id":3713,"inV":110,"properties":{"weight":4}},{"id":3714,"inV":215,"properties":{"weight":4}},{"id":3715,"inV":127,"properties":{"weight":10}},{"id":3716,"inV":83,"properties":{"weight":3}},{"id":3717,"inV":103,"properties":{"weight":2}},{"id":3718,"inV":68,"properties":{"weight":1}},{"id":3719,"inV":134,"properties":{"weight":2}},{"id":3720,"inV":25,"properties":{"weight":10}},{"id":3721,"inV":125,"properties":{"weight":54}},{"id":3722,"inV":130,"properties":{"weight":26}},{"id":3723,"inV":141,"properties":{"weight":2}},{"id":3724,"inV":145,"properties":{"weight":1}},{"id":3725,"inV":319,"properties":{"weight":3}},{"id":3726,"inV":12,"properties":{"weight":1}},{"id":3727,"inV":160,"properties":{"weight":37}},{"id"
 :3728,"inV":70,"properties":{"weight":2}},{"id":3729,"inV":123,"properties":{"weight":1}},{"id":3730,"inV":129,"properties":{"weight":1}},{"id":3731,"inV":30,"properties":{"weight":2}},{"id":3732,"inV":148,"properties":{"weight":1}},{"id":3733,"inV":211,"properties":{"weight":3}},{"id":3734,"inV":87,"properties":{"weight":13}},{"id":3735,"inV":164,"properties":{"weight":4}},{"id":3736,"inV":64,"properties":{"weight":2}},{"id":3737,"inV":320,"properties":{"weight":1}},{"id":3738,"inV":61,"properties":{"weight":3}},{"id":3739,"inV":210,"properties":{"weight":3}},{"id":3740,"inV":50,"properties":{"weight":7}},{"id":3741,"inV":128,"properties":{"weight":3}},{"id":3742,"inV":315,"properties":{"weight":1}},{"id":3743,"inV":261,"properties":{"weight":1}},{"id":3744,"inV":213,"properties":{"weight":13}},{"id":3745,"inV":72,"properties":{"weight":1}},{"id":3746,"inV":38,"properties":{"weight":4}},{"id":3747,"inV":204,"properties":{"weight":14}},{"id":3748,"inV":62,"properties":{"weight":2}},
 {"id":3749,"inV":150,"properties":{"weight":8}},{"id":3750,"inV":309,"properties":{"weight":1}},{"id":3751,"inV":131,"properties":{"weight":1}},{"id":3752,"inV":151,"properties":{"weight":1}},{"id":3753,"inV":321,"properties":{"weight":1}},{"id":3754,"inV":90,"properties":{"weight":2}},{"id":3755,"inV":82,"properties":{"weight":1}},{"id":3756,"inV":120,"properties":{"weight":1}},{"id":3757,"inV":46,"properties":{"weight":5}},{"id":3758,"inV":157,"properties":{"weight":5}},{"id":3759,"inV":59,"properties":{"weight":1}},{"id":3760,"inV":81,"properties":{"weight":1}},{"id":3761,"inV":86,"properties":{"weight":5}},{"id":3762,"inV":140,"properties":{"weight":1}},{"id":3763,"inV":201,"properties":{"weight":1}},{"id":3764,"inV":214,"properties":{"weight":1}},{"id":3765,"inV":185,"properties":{"weight":2}},{"id":3766,"inV":216,"properties":{"weight":1}},{"id":3767,"inV":217,"properties":{"weight":2}},{"id":3768,"inV":236,"properties":{"weight":5}},{"id":3769,"inV":193,"properties":{"weight"
 :1}},{"id":3770,"inV":79,"properties":{"weight":2}},{"id":3771,"inV":84,"properties":{"weight":1}},{"id":3772,"inV":23,"properties":{"weight":2}},{"id":3773,"inV":31,"properties":{"weight":2}},{"id":3774,"inV":240,"properties":{"weight":1}},{"id":3775,"inV":292,"properties":{"weight":1}},{"id":3776,"inV":9,"properties":{"weight":1}},{"id":3777,"inV":259,"properties":{"weight":1}},{"id":3694,"inV":5,"properties":{"weight":57}},{"id":3695,"inV":114,"properties":{"weight":30}},{"id":3696,"inV":74,"properties":{"weight":2}},{"id":3697,"inV":78,"properties":{"weight":3}},{"id":3698,"inV":10,"properties":{"weight":1}},{"id":3699,"inV":26,"properties":{"weight":4}},{"id":3700,"inV":153,"properties":{"weight":7}},{"id":3701,"inV":4,"properties":{"weight":4}},{"id":3702,"inV":317,"properties":{"weight":1}},{"id":3703,"inV":13,"properties":{"weight":5}},{"id":3704,"inV":1,"properties":{"weight":2}},{"id":3705,"inV":21,"properties":{"weight":2}},{"id":3706,"inV":57,"properties":{"weight":2}},{
 "id":3707,"inV":122,"properties":{"weight":2}},{"id":3708,"inV":318,"properties":{"weight":1}},{"id":3709,"inV":94,"properties":{"weight":26}},{"id":3710,"inV":96,"properties":{"weight":7}},{"id":3711,"inV":124,"properties":{"weight":15}}],"sungBy":[{"id":7808,"inV":351}],"writtenBy":[{"id":7807,"inV":671}]},"properties":{"name":[{"id":6,"value":"NOT FADE AWAY"}],"songType":[{"id":8,"value":"cover"}],"performances":[{"id":7,"value":531}]}}
+{"id":4,"label":"song","inE":{"followedBy":[{"id":128,"outV":97,"properties":{"weight":1}},{"id":1664,"outV":267,"properties":{"weight":1}},{"id":2,"outV":1,"properties":{"weight":1}},{"id":899,"outV":140,"properties":{"weight":1}},{"id":1667,"outV":124,"properties":{"weight":15}},{"id":4099,"outV":48,"properties":{"weight":1}},{"id":1156,"outV":26,"properties":{"weight":16}},{"id":773,"outV":122,"properties":{"weight":9}},{"id":6534,"outV":242,"properties":{"weight":1}},{"id":1032,"outV":73,"properties":{"weight":1}},{"id":6664,"outV":12,"properties":{"weight":3}},{"id":5129,"outV":222,"properties":{"weight":1}},{"id":5387,"outV":69,"properties":{"weight":1}},{"id":5517,"outV":43,"properties":{"weight":2}},{"id":5006,"outV":30,"properties":{"weight":2}},{"id":6030,"outV":204,"properties":{"weight":2}},{"id":2063,"outV":92,"properties":{"weight":1}},{"id":915,"outV":91,"properties":{"weight":2}},{"id":6940,"outV":84,"properties":{"weight":5}},{"id":2464,"outV":68,"properties":{"weig
 ht":1}},{"id":5795,"outV":76,"properties":{"weight":2}},{"id":3620,"outV":24,"properties":{"weight":2}},{"id":4772,"outV":114,"properties":{"weight":25}},{"id":2982,"outV":14,"properties":{"weight":3}},{"id":3367,"outV":184,"properties":{"weight":6}},{"id":2345,"outV":87,"properties":{"weight":2}},{"id":2861,"outV":101,"properties":{"weight":6}},{"id":1840,"outV":275,"properties":{"weight":1}},{"id":5425,"outV":102,"properties":{"weight":1}},{"id":180,"outV":70,"properties":{"weight":46}},{"id":2613,"outV":158,"properties":{"weight":1}},{"id":5434,"outV":217,"properties":{"weight":1}},{"id":5562,"outV":162,"properties":{"weight":2}},{"id":1469,"outV":81,"properties":{"weight":1}},{"id":446,"outV":38,"properties":{"weight":7}},{"id":2494,"outV":90,"properties":{"weight":3}},{"id":3266,"outV":160,"properties":{"weight":10}},{"id":326,"outV":34,"properties":{"weight":1}},{"id":583,"outV":120,"properties":{"weight":2}},{"id":6855,"outV":64,"properties":{"weight":12}},{"id":73,"outV":46,
 "properties":{"weight":4}},{"id":4425,"outV":212,"properties":{"weight":1}},{"id":1613,"outV":210,"properties":{"weight":2}},{"id":4941,"outV":86,"properties":{"weight":2}},{"id":6350,"outV":21,"properties":{"weight":1}},{"id":3535,"outV":201,"properties":{"weight":1}},{"id":980,"outV":11,"properties":{"weight":3}},{"id":1494,"outV":164,"properties":{"weight":3}},{"id":5206,"outV":99,"properties":{"weight":1}},{"id":5847,"outV":61,"properties":{"weight":2}},{"id":6490,"outV":187,"properties":{"weight":1}},{"id":2781,"outV":15,"properties":{"weight":4}},{"id":5600,"outV":42,"properties":{"weight":1}},{"id":353,"outV":74,"properties":{"weight":6}},{"id":5474,"outV":79,"properties":{"weight":1}},{"id":1891,"outV":103,"properties":{"weight":19}},{"id":3811,"outV":88,"properties":{"weight":2}},{"id":5989,"outV":50,"properties":{"weight":12}},{"id":4327,"outV":110,"properties":{"weight":2}},{"id":2538,"outV":57,"properties":{"weight":4}},{"id":3050,"outV":153,"properties":{"weight":13}},{
 "id":4970,"outV":236,"properties":{"weight":1}},{"id":2283,"outV":25,"properties":{"weight":9}},{"id":236,"outV":145,"properties":{"weight":1}},{"id":6126,"outV":72,"properties":{"weight":2}},{"id":5232,"outV":214,"properties":{"weight":2}},{"id":4594,"outV":85,"properties":{"weight":1}},{"id":1652,"outV":213,"properties":{"weight":3}},{"id":4084,"outV":109,"properties":{"weight":1}},{"id":629,"outV":23,"properties":{"weight":10}},{"id":3701,"outV":3,"properties":{"weight":4}},{"id":5621,"outV":22,"properties":{"weight":1}},{"id":7029,"outV":89,"properties":{"weight":1}},{"id":5238,"outV":32,"properties":{"weight":3}},{"id":2684,"outV":13,"properties":{"weight":9}},{"id":3325,"outV":268,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":5120,"inV":40,"properties":{"weight":5}},{"id":5121,"inV":33,"properties":{"weight":3}},{"id":5122,"inV":79,"properties":{"weight":1}},{"id":5123,"inV":292,"properties":{"weight":1}},{"id":5071,"inV":50,"properties":{"weight":9}},{"id":5072,"in
 V":12,"properties":{"weight":26}},{"id":5073,"inV":18,"properties":{"weight":4}},{"id":5074,"inV":24,"properties":{"weight":9}},{"id":5075,"inV":23,"properties":{"weight":63}},{"id":5076,"inV":13,"properties":{"weight":12}},{"id":5077,"inV":10,"properties":{"weight":4}},{"id":5078,"inV":11,"properties":{"weight":3}},{"id":5079,"inV":26,"properties":{"weight":18}},{"id":5080,"inV":22,"properties":{"weight":1}},{"id":5081,"inV":16,"properties":{"weight":2}},{"id":5082,"inV":49,"properties":{"weight":1}},{"id":5083,"inV":25,"properties":{"weight":2}},{"id":5084,"inV":51,"properties":{"weight":1}},{"id":5085,"inV":15,"properties":{"weight":1}},{"id":5086,"inV":112,"properties":{"weight":4}},{"id":5087,"inV":121,"properties":{"weight":1}},{"id":5088,"inV":32,"properties":{"weight":7}},{"id":5089,"inV":68,"properties":{"weight":2}},{"id":5090,"inV":120,"properties":{"weight":77}},{"id":5091,"inV":103,"properties":{"weight":1}},{"id":5092,"inV":42,"properties":{"weight":3}},{"id":5093,"inV
 ":85,"properties":{"weight":4}},{"id":5094,"inV":76,"properties":{"weight":5}},{"id":5095,"inV":181,"properties":{"weight":2}},{"id":5096,"inV":14,"properties":{"weight":2}},{"id":5097,"inV":122,"properties":{"weight":1}},{"id":5098,"inV":153,"properties":{"weight":3}},{"id":5099,"inV":96,"properties":{"weight":1}},{"id":5100,"inV":82,"properties":{"weight":3}},{"id":5101,"inV":110,"properties":{"weight":1}},{"id":5102,"inV":19,"properties":{"weight":6}},{"id":5103,"inV":129,"properties":{"weight":1}},{"id":5104,"inV":84,"properties":{"weight":1}},{"id":5105,"inV":88,"properties":{"weight":9}},{"id":5106,"inV":97,"properties":{"weight":1}},{"id":5107,"inV":114,"properties":{"weight":2}},{"id":5108,"inV":30,"properties":{"weight":8}},{"id":5109,"inV":31,"properties":{"weight":8}},{"id":5110,"inV":69,"properties":{"weight":4}},{"id":5111,"inV":127,"properties":{"weight":2}},{"id":5112,"inV":60,"properties":{"weight":1}},{"id":5113,"inV":39,"properties":{"weight":2}},{"id":5114,"inV":2
 1,"properties":{"weight":1}},{"id":5115,"inV":117,"properties":{"weight":1}},{"id":5116,"inV":78,"properties":{"weight":1}},{"id":5117,"inV":38,"properties":{"weight":1}},{"id":5118,"inV":169,"properties":{"weight":2}},{"id":5119,"inV":118,"properties":{"weight":1}}],"sungBy":[{"id":7064,"inV":340}],"writtenBy":[{"id":7063,"inV":339}]},"properties":{"name":[{"id":9,"value":"BERTHA"}],"songType":[{"id":11,"value":"original"}],"performances":[{"id":10,"value":394}]}}
+{"id":5,"label":"song","inE":{"followedBy":[{"id":194,"outV":70,"properties":{"weight":8}},{"id":962,"outV":67,"properties":{"weight":5}},{"id":3,"outV":1,"properties":{"weight":1}},{"id":5446,"outV":231,"properties":{"weight":5}},{"id":6344,"outV":21,"properties":{"weight":6}},{"id":1738,"outV":82,"properties":{"weight":1}},{"id":6666,"outV":12,"properties":{"weight":1}},{"id":1867,"outV":94,"properties":{"weight":15}},{"id":4300,"outV":110,"properties":{"weight":1}},{"id":847,"outV":171,"properties":{"weight":1}},{"id":2832,"outV":101,"properties":{"weight":3}},{"id":6032,"outV":115,"properties":{"weight":1}},{"id":1170,"outV":26,"properties":{"weight":1}},{"id":5330,"outV":238,"properties":{"weight":1}},{"id":1491,"outV":164,"properties":{"weight":3}},{"id":1429,"outV":83,"properties":{"weight":3}},{"id":3033,"outV":14,"properties":{"weight":1}},{"id":6298,"outV":49,"properties":{"weight":1}},{"id":1373,"outV":130,"properties":{"weight":11}},{"id":4447,"outV":113,"properties":{"w
 eight":1}},{"id":5151,"outV":125,"properties":{"weight":6}},{"id":5343,"outV":165,"properties":{"weight":2}},{"id":6431,"outV":134,"properties":{"weight":2}},{"id":1953,"outV":148,"properties":{"weight":10}},{"id":1634,"outV":210,"properties":{"weight":1}},{"id":2274,"outV":25,"properties":{"weight":8}},{"id":100,"outV":46,"properties":{"weight":1}},{"id":933,"outV":91,"properties":{"weight":1}},{"id":2021,"outV":149,"properties":{"weight":1}},{"id":6694,"outV":141,"properties":{"weight":2}},{"id":4009,"outV":225,"properties":{"weight":1}},{"id":682,"outV":219,"properties":{"weight":1}},{"id":3694,"outV":3,"properties":{"weight":57}},{"id":4718,"outV":186,"properties":{"weight":6}},{"id":3055,"outV":153,"properties":{"weight":9}},{"id":2480,"outV":68,"properties":{"weight":1}},{"id":2736,"outV":13,"properties":{"weight":3}},{"id":5426,"outV":102,"properties":{"weight":1}},{"id":6899,"outV":147,"properties":{"weight":1}},{"id":5879,"outV":96,"properties":{"weight":22}},{"id":6201,"ou
 tV":319,"properties":{"weight":2}},{"id":5370,"outV":132,"properties":{"weight":2}},{"id":700,"outV":206,"properties":{"weight":1}},{"id":2236,"outV":29,"properties":{"weight":5}},{"id":4604,"outV":85,"properties":{"weight":2}},{"id":5759,"outV":129,"properties":{"weight":6}}]},"outE":{"followedBy":[{"id":273,"inV":3,"properties":{"weight":40}},{"id":274,"inV":26,"properties":{"weight":3}},{"id":275,"inV":114,"properties":{"weight":40}},{"id":276,"inV":1,"properties":{"weight":2}},{"id":277,"inV":74,"properties":{"weight":3}},{"id":278,"inV":122,"properties":{"weight":3}},{"id":279,"inV":133,"properties":{"weight":2}},{"id":280,"inV":83,"properties":{"weight":1}},{"id":281,"inV":153,"properties":{"weight":5}},{"id":282,"inV":159,"properties":{"weight":1}},{"id":283,"inV":13,"properties":{"weight":3}},{"id":284,"inV":25,"properties":{"weight":19}},{"id":285,"inV":96,"properties":{"weight":10}},{"id":286,"inV":160,"properties":{"weight":2}},{"id":287,"inV":32,"properties":{"weight":1}
 },{"id":288,"inV":120,"properties":{"weight":16}},{"id":289,"inV":50,"properties":{"weight":1}},{"id":290,"inV":116,"properties":{"weight":1}},{"id":291,"inV":127,"properties":{"weight":6}},{"id":292,"inV":65,"properties":{"weight":1}},{"id":293,"inV":130,"properties":{"weight":3}},{"id":294,"inV":125,"properties":{"weight":5}},{"id":295,"inV":70,"properties":{"weight":13}},{"id":296,"inV":134,"properties":{"weight":1}},{"id":297,"inV":161,"properties":{"weight":1}},{"id":298,"inV":162,"properties":{"weight":1}},{"id":299,"inV":124,"properties":{"weight":3}},{"id":300,"inV":38,"properties":{"weight":1}},{"id":301,"inV":29,"properties":{"weight":11}},{"id":302,"inV":163,"properties":{"weight":1}},{"id":303,"inV":94,"properties":{"weight":5}},{"id":304,"inV":85,"properties":{"weight":1}},{"id":305,"inV":164,"properties":{"weight":6}},{"id":306,"inV":64,"properties":{"weight":1}},{"id":307,"inV":150,"properties":{"weight":1}},{"id":308,"inV":165,"properties":{"weight":7}},{"id":309,"in
 V":92,"properties":{"weight":1}},{"id":310,"inV":140,"properties":{"weight":1}},{"id":311,"inV":166,"properties":{"weight":1}}],"sungBy":[{"id":7582,"inV":340}],"writtenBy":[{"id":7581,"inV":446}]},"properties":{"name":[{"id":12,"value":"GOING DOWN THE ROAD FEELING BAD"}],"songType":[{"id":14,"value":"cover"}],"performances":[{"id":13,"value":293}]}}
+{"id":6,"label":"song","inE":{"followedBy":[{"id":4,"outV":1,"properties":{"weight":1}},{"id":2023,"outV":282,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":2406,"inV":293,"properties":{"weight":1}},{"id":2407,"inV":96,"properties":{"weight":1}}],"sungBy":[{"id":7782,"inV":351}],"writtenBy":[{"id":7781,"inV":527}]},"properties":{"name":[{"id":15,"value":"MONA"}],"songType":[{"id":17,"value":"cover"}],"performances":[{"id":16,"value":1}]}}
+{"id":7,"label":"song","inE":{"followedBy":[{"id":2607,"outV":295,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":5,"inV":8,"properties":{"weight":1}}]},"properties":{"name":[{"id":18,"value":"WHERE HAVE THE HEROES GONE"}],"songType":[{"id":20,"value":""}],"performances":[{"id":19,"value":0}]}}
+{"id":8,"label":"song","inE":{"followedBy":[{"id":4705,"outV":111,"properties":{"weight":1}},{"id":5,"outV":7,"properties":{"weight":1}},{"id":5901,"outV":96,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":2976,"inV":302,"properties":{"weight":1}},{"id":2977,"inV":96,"properties":{"weight":1}},{"id":2978,"inV":72,"properties":{"weight":1}}],"sungBy":[{"id":7814,"inV":351}],"writtenBy":[{"id":7813,"inV":674}]},"properties":{"name":[{"id":21,"value":"OH BOY"}],"songType":[{"id":23,"value":"cover"}],"performances":[{"id":22,"value":2}]}}
+{"id":9,"label":"song","inE":{"followedBy":[{"id":3776,"outV":3,"properties":{"weight":1}},{"id":65,"outV":46,"properties":{"weight":2}},{"id":1923,"outV":103,"properties":{"weight":3}},{"id":5956,"outV":50,"properties":{"weight":2}},{"id":3077,"outV":153,"properties":{"weight":2}},{"id":5832,"outV":76,"properties":{"weight":1}},{"id":1161,"outV":26,"properties":{"weight":8}},{"id":2699,"outV":13,"properties":{"weight":3}},{"id":6539,"outV":55,"properties":{"weight":1}},{"id":6667,"outV":12,"properties":{"weight":2}},{"id":2578,"outV":57,"properties":{"weight":2}},{"id":787,"outV":122,"properties":{"weight":3}},{"id":3542,"outV":201,"properties":{"weight":1}},{"id":2775,"outV":15,"properties":{"weight":5}},{"id":2840,"outV":101,"properties":{"weight":2}},{"id":4953,"outV":86,"properties":{"weight":2}},{"id":1572,"outV":18,"properties":{"weight":3}},{"id":229,"outV":70,"properties":{"weight":1}},{"id":4264,"outV":10,"properties":{"weight":1}},{"id":4969,"outV":236,"properties":{"weig
 ht":3}},{"id":3498,"outV":58,"properties":{"weight":2}},{"id":5226,"outV":216,"properties":{"weight":1}},{"id":5548,"outV":166,"properties":{"weight":1}},{"id":2990,"outV":14,"properties":{"weight":4}},{"id":3950,"outV":138,"properties":{"weight":1}},{"id":2488,"outV":68,"properties":{"weight":1}},{"id":6776,"outV":39,"properties":{"weight":1}},{"id":3641,"outV":24,"properties":{"weight":2}},{"id":1532,"outV":164,"properties":{"weight":2}},{"id":1853,"outV":94,"properties":{"weight":1}},{"id":638,"outV":23,"properties":{"weight":2}},{"id":6335,"outV":21,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":6,"inV":10,"properties":{"weight":3}},{"id":7,"inV":11,"properties":{"weight":2}},{"id":8,"inV":12,"properties":{"weight":3}},{"id":9,"inV":13,"properties":{"weight":6}},{"id":10,"inV":14,"properties":{"weight":3}},{"id":11,"inV":15,"properties":{"weight":3}},{"id":12,"inV":16,"properties":{"weight":1}},{"id":13,"inV":17,"properties":{"weight":1}},{"id":14,"inV":18,"properties"
 :{"weight":5}},{"id":15,"inV":19,"properties":{"weight":1}},{"id":16,"inV":20,"properties":{"weight":1}},{"id":17,"inV":21,"properties":{"weight":1}},{"id":18,"inV":22,"properties":{"weight":2}},{"id":19,"inV":23,"properties":{"weight":2}},{"id":20,"inV":24,"properties":{"weight":1}},{"id":21,"inV":25,"properties":{"weight":1}},{"id":22,"inV":26,"properties":{"weight":1}},{"id":23,"inV":27,"properties":{"weight":1}},{"id":24,"inV":28,"properties":{"weight":2}},{"id":25,"inV":29,"properties":{"weight":1}},{"id":26,"inV":30,"properties":{"weight":5}},{"id":27,"inV":31,"properties":{"weight":2}},{"id":28,"inV":32,"properties":{"weight":1}},{"id":29,"inV":33,"properties":{"weight":2}},{"id":30,"inV":34,"properties":{"weight":2}},{"id":31,"inV":35,"properties":{"weight":3}},{"id":32,"inV":36,"properties":{"weight":2}},{"id":33,"inV":37,"properties":{"weight":3}},{"id":34,"inV":38,"properties":{"weight":1}},{"id":35,"inV":39,"properties":{"weight":1}},{"id":36,"inV":40,"properties":{"weig
 ht":1}},{"id":37,"inV":41,"properties":{"weight":1}},{"id":38,"inV":42,"properties":{"weight":1}},{"id":39,"inV":43,"properties":{"weight":1}}],"sungBy":[{"id":7190,"inV":340}],"writtenBy":[{"id":7189,"inV":339}]},"properties":{"name":[{"id":24,"value":"HERE COMES SUNSHINE"}],"songType":[{"id":26,"value":"original"}],"performances":[{"id":25,"value":65}]}}
+{"id":10,"label":"song","inE":{"followedBy":[{"id":3841,"outV":60,"properties":{"weight":1}},{"id":1027,"outV":73,"properties":{"weight":5}},{"id":6,"outV":9,"properties":{"weight":3}},{"id":3335,"outV":155,"properties":{"weight":1}},{"id":4103,"outV":48,"properties":{"weight":5}},{"id":6279,"outV":49,"properties":{"weight":1}},{"id":4233,"outV":52,"properties":{"weight":1}},{"id":4878,"outV":100,"properties":{"weight":19}},{"id":5264,"outV":32,"properties":{"weight":2}},{"id":2196,"outV":75,"properties":{"weight":4}},{"id":151,"outV":108,"properties":{"weight":3}},{"id":1571,"outV":18,"properties":{"weight":5}},{"id":3619,"outV":24,"properties":{"weight":2}},{"id":3237,"outV":63,"properties":{"weight":3}},{"id":4647,"outV":154,"properties":{"weight":1}},{"id":4521,"outV":105,"properties":{"weight":3}},{"id":1195,"outV":26,"properties":{"weight":1}},{"id":6444,"outV":187,"properties":{"weight":9}},{"id":6956,"outV":84,"properties":{"weight":1}},{"id":687,"outV":157,"properties":{"we
 ight":1}},{"id":4784,"outV":114,"properties":{"weight":1}},{"id":6064,"outV":115,"properties":{"weight":1}},{"id":1714,"outV":82,"properties":{"weight":3}},{"id":3890,"outV":51,"properties":{"weight":9}},{"id":55,"outV":46,"properties":{"weight":1}},{"id":5175,"outV":71,"properties":{"weight":1}},{"id":1337,"outV":31,"properties":{"weight":1}},{"id":1083,"outV":59,"properties":{"weight":10}},{"id":4155,"outV":54,"properties":{"weight":6}},{"id":6077,"outV":72,"properties":{"weight":5}},{"id":5441,"outV":239,"properties":{"weight":1}},{"id":1987,"outV":152,"properties":{"weight":2}},{"id":1860,"outV":94,"properties":{"weight":1}},{"id":2116,"outV":17,"properties":{"weight":7}},{"id":3269,"outV":160,"properties":{"weight":2}},{"id":454,"outV":38,"properties":{"weight":1}},{"id":3142,"outV":104,"properties":{"weight":4}},{"id":2505,"outV":57,"properties":{"weight":12}},{"id":6603,"outV":127,"properties":{"weight":4}},{"id":6859,"outV":64,"properties":{"weight":1}},{"id":717,"outV":80,"
 properties":{"weight":9}},{"id":1360,"outV":130,"properties":{"weight":2}},{"id":3026,"outV":14,"properties":{"weight":1}},{"id":5972,"outV":50,"properties":{"weight":1}},{"id":5077,"outV":4,"properties":{"weight":4}},{"id":2392,"outV":87,"properties":{"weight":1}},{"id":1250,"outV":27,"properties":{"weight":10}},{"id":4706,"outV":111,"properties":{"weight":3}},{"id":6755,"outV":53,"properties":{"weight":1}},{"id":485,"outV":98,"properties":{"weight":4}},{"id":2917,"outV":78,"properties":{"weight":10}},{"id":3559,"outV":56,"properties":{"weight":16}},{"id":3436,"outV":58,"properties":{"weight":10}},{"id":3820,"outV":88,"properties":{"weight":1}},{"id":4463,"outV":202,"properties":{"weight":4}},{"id":880,"outV":189,"properties":{"weight":1}},{"id":6256,"outV":117,"properties":{"weight":1}},{"id":3698,"outV":3,"properties":{"weight":1}},{"id":2035,"outV":180,"properties":{"weight":1}},{"id":2291,"outV":25,"properties":{"weight":1}},{"id":3317,"outV":252,"properties":{"weight":1}},{"id
 ":2806,"outV":15,"properties":{"weight":2}},{"id":2427,"outV":68,"properties":{"weight":2}},{"id":6782,"outV":39,"properties":{"weight":4}},{"id":4351,"outV":62,"properties":{"weight":2}}]},"outE":{"followedBy":[{"id":4235,"inV":56,"properties":{"weight":13}},{"id":4236,"inV":27,"properties":{"weight":7}},{"id":4237,"inV":58,"properties":{"weight":11}},{"id":4238,"inV":80,"properties":{"weight":6}},{"id":4239,"inV":59,"properties":{"weight":9}},{"id":4240,"inV":100,"properties":{"weight":21}},{"id":4241,"inV":104,"properties":{"weight":5}},{"id":4242,"inV":50,"properties":{"weight":2}},{"id":4243,"inV":48,"properties":{"weight":8}},{"id":4244,"inV":54,"properties":{"weight":13}},{"id":4245,"inV":19,"properties":{"weight":9}},{"id":4246,"inV":72,"properties":{"weight":4}},{"id":4247,"inV":14,"properties":{"weight":1}},{"id":4248,"inV":122,"properties":{"weight":2}},{"id":4249,"inV":235,"properties":{"weight":1}},{"id":4250,"inV":218,"properties":{"weight":1}},{"id":4251,"inV":252,"pr
 operties":{"weight":1}},{"id":4252,"inV":89,"properties":{"weight":3}},{"id":4253,"inV":57,"properties":{"weight":12}},{"id":4254,"inV":49,"properties":{"weight":3}},{"id":4255,"inV":94,"properties":{"weight":3}},{"id":4256,"inV":153,"properties":{"weight":1}},{"id":4257,"inV":13,"properties":{"weight":1}},{"id":4258,"inV":160,"properties":{"weight":1}},{"id":4259,"inV":51,"properties":{"weight":10}},{"id":4260,"inV":18,"properties":{"weight":3}},{"id":4261,"inV":202,"properties":{"weight":4}},{"id":4262,"inV":17,"properties":{"weight":5}},{"id":4263,"inV":46,"properties":{"weight":1}},{"id":4264,"inV":9,"properties":{"weight":1}},{"id":4265,"inV":55,"properties":{"weight":1}},{"id":4266,"inV":125,"properties":{"weight":1}},{"id":4267,"inV":69,"properties":{"weight":2}},{"id":4268,"inV":98,"properties":{"weight":8}},{"id":4269,"inV":82,"properties":{"weight":4}},{"id":4270,"inV":154,"properties":{"weight":1}},{"id":4271,"inV":105,"properties":{"weight":7}},{"id":4272,"inV":112,"prop
 erties":{"weight":2}},{"id":4273,"inV":109,"properties":{"weight":1}},{"id":4274,"inV":42,"properties":{"weight":2}},{"id":4275,"inV":121,"properties":{"weight":1}},{"id":4276,"inV":73,"properties":{"weight":5}},{"id":4277,"inV":106,"properties":{"weight":1}},{"id":4278,"inV":116,"properties":{"weight":1}},{"id":4279,"inV":68,"properties":{"weight":2}},{"id":4280,"inV":152,"properties":{"weight":1}},{"id":4281,"inV":23,"properties":{"weight":6}},{"id":4282,"inV":88,"properties":{"weight":1}},{"id":4283,"inV":39,"properties":{"weight":4}},{"id":4284,"inV":12,"properties":{"weight":1}},{"id":4285,"inV":111,"properties":{"weight":1}},{"id":4286,"inV":99,"properties":{"weight":1}},{"id":4287,"inV":87,"properties":{"weight":2}},{"id":4288,"inV":108,"properties":{"weight":2}},{"id":4289,"inV":53,"properties":{"weight":4}},{"id":4290,"inV":26,"properties":{"weight":5}},{"id":4291,"inV":117,"properties":{"weight":2}},{"id":4292,"inV":115,"properties":{"weight":2}},{"id":4293,"inV":63,"prope
 rties":{"weight":3}},{"id":4294,"inV":103,"properties":{"weight":1}}],"sungBy":[{"id":7460,"inV":351}],"writtenBy":[{"id":7459,"inV":471}]},"properties":{"name":[{"id":27,"value":"BEAT IT ON DOWN THE LINE"}],"songType":[{"id":29,"value":"cover"}],"performances":[{"id":28,"value":325}]}}
+{"id":11,"label":"song","inE":{"followedBy":[{"id":1088,"outV":59,"properties":{"weight":14}},{"id":6273,"outV":49,"properties":{"weight":2}},{"id":1989,"outV":152,"properties":{"weight":2}},{"id":7,"outV":9,"properties":{"weight":2}},{"id":4552,"outV":105,"properties":{"weight":3}},{"id":521,"outV":205,"properties":{"weight":1}},{"id":714,"outV":80,"properties":{"weight":5}},{"id":3146,"outV":104,"properties":{"weight":3}},{"id":4876,"outV":100,"properties":{"weight":2}},{"id":2190,"outV":235,"properties":{"weight":1}},{"id":4496,"outV":202,"properties":{"weight":1}},{"id":2513,"outV":57,"properties":{"weight":4}},{"id":4053,"outV":173,"properties":{"weight":1}},{"id":5078,"outV":4,"properties":{"weight":3}},{"id":1309,"outV":27,"properties":{"weight":5}},{"id":4769,"outV":114,"properties":{"weight":1}},{"id":5025,"outV":30,"properties":{"weight":1}},{"id":3554,"outV":56,"properties":{"weight":7}},{"id":1064,"outV":73,"properties":{"weight":1}},{"id":2920,"outV":78,"properties":{"w
 eight":2}},{"id":6056,"outV":115,"properties":{"weight":2}},{"id":41,"outV":46,"properties":{"weight":2}},{"id":3434,"outV":58,"properties":{"weight":5}},{"id":6442,"outV":187,"properties":{"weight":7}},{"id":1775,"outV":234,"properties":{"weight":4}},{"id":3888,"outV":51,"properties":{"weight":1}},{"id":626,"outV":23,"properties":{"weight":1}},{"id":1396,"outV":190,"properties":{"weight":1}},{"id":4020,"outV":191,"properties":{"weight":1}},{"id":6772,"outV":39,"properties":{"weight":1}},{"id":3637,"outV":24,"properties":{"weight":2}},{"id":6072,"outV":72,"properties":{"weight":5}},{"id":4157,"outV":54,"properties":{"weight":2}}]},"outE":{"followedBy":[{"id":972,"inV":57,"properties":{"weight":4}},{"id":973,"inV":59,"properties":{"weight":3}},{"id":974,"inV":53,"properties":{"weight":4}},{"id":975,"inV":54,"properties":{"weight":15}},{"id":976,"inV":56,"properties":{"weight":3}},{"id":977,"inV":48,"properties":{"weight":3}},{"id":978,"inV":72,"properties":{"weight":4}},{"id":979,"in
 V":19,"properties":{"weight":9}},{"id":980,"inV":4,"properties":{"weight":3}},{"id":981,"inV":58,"properties":{"weight":6}},{"id":982,"inV":46,"properties":{"weight":1}},{"id":983,"inV":234,"properties":{"weight":7}},{"id":984,"inV":235,"properties":{"weight":2}},{"id":985,"inV":207,"properties":{"weight":4}},{"id":986,"inV":39,"properties":{"weight":3}},{"id":987,"inV":50,"properties":{"weight":1}},{"id":988,"inV":104,"properties":{"weight":2}},{"id":989,"inV":49,"properties":{"weight":1}},{"id":990,"inV":17,"properties":{"weight":3}},{"id":991,"inV":100,"properties":{"weight":1}},{"id":992,"inV":24,"properties":{"weight":1}},{"id":993,"inV":170,"properties":{"weight":2}},{"id":994,"inV":73,"properties":{"weight":1}},{"id":995,"inV":173,"properties":{"weight":1}},{"id":996,"inV":236,"properties":{"weight":1}},{"id":997,"inV":202,"properties":{"weight":3}},{"id":998,"inV":80,"properties":{"weight":2}},{"id":999,"inV":115,"properties":{"weight":4}},{"id":1000,"inV":105,"properties":{
 "weight":1}}],"sungBy":[{"id":7072,"inV":351}],"writtenBy":[{"id":7071,"inV":350}]},"properties":{"name":[{"id":30,"value":"BLACK THROATED WIND"}],"songType":[{"id":32,"value":"original"}],"performances":[{"id":31,"value":158}]}}
+{"id":12,"label":"song","inE":{"followedBy":[{"id":3072,"outV":153,"properties":{"weight":4}},{"id":2433,"outV":68,"properties":{"weight":1}},{"id":1410,"outV":83,"properties":{"weight":1}},{"id":3331,"outV":155,"properties":{"weight":2}},{"id":4227,"outV":52,"properties":{"weight":3}},{"id":1028,"outV":73,"properties":{"weight":12}},{"id":4102,"outV":48,"properties":{"weight":33}},{"id":8,"outV":9,"properties":{"weight":3}},{"id":6281,"outV":49,"properties":{"weight":2}},{"id":652,"outV":23,"properties":{"weight":2}},{"id":5388,"outV":69,"properties":{"weight":1}},{"id":525,"outV":120,"properties":{"weight":1}},{"id":3726,"outV":3,"properties":{"weight":1}},{"id":783,"outV":122,"properties":{"weight":1}},{"id":3855,"outV":60,"properties":{"weight":1}},{"id":1938,"outV":148,"properties":{"weight":1}},{"id":3986,"outV":106,"properties":{"weight":1}},{"id":916,"outV":91,"properties":{"weight":1}},{"id":1172,"outV":26,"properties":{"weight":4}},{"id":6935,"outV":84,"properties":{"weigh
 t":5}},{"id":3225,"outV":63,"properties":{"weight":4}},{"id":5017,"outV":30,"properties":{"weight":1}},{"id":155,"outV":108,"properties":{"weight":6}},{"id":2203,"outV":75,"properties":{"weight":3}},{"id":4893,"outV":100,"properties":{"weight":7}},{"id":4640,"outV":154,"properties":{"weight":10}},{"id":5665,"outV":169,"properties":{"weight":1}},{"id":1702,"outV":124,"properties":{"weight":1}},{"id":2598,"outV":112,"properties":{"weight":7}},{"id":5286,"outV":32,"properties":{"weight":4}},{"id":3879,"outV":51,"properties":{"weight":12}},{"id":4007,"outV":225,"properties":{"weight":1}},{"id":424,"outV":38,"properties":{"weight":5}},{"id":4522,"outV":105,"properties":{"weight":12}},{"id":5034,"outV":47,"properties":{"weight":1}},{"id":4779,"outV":114,"properties":{"weight":3}},{"id":6576,"outV":116,"properties":{"weight":1}},{"id":6835,"outV":64,"properties":{"weight":1}},{"id":6455,"outV":187,"properties":{"weight":12}},{"id":824,"outV":171,"properties":{"weight":1}},{"id":5304,"outV"
 :170,"properties":{"weight":2}},{"id":1722,"outV":82,"properties":{"weight":1}},{"id":6074,"outV":72,"properties":{"weight":4}},{"id":4284,"outV":10,"properties":{"weight":1}},{"id":2109,"outV":17,"properties":{"weight":24}},{"id":703,"outV":206,"properties":{"weight":2}},{"id":5440,"outV":239,"properties":{"weight":2}},{"id":5952,"outV":50,"properties":{"weight":7}},{"id":1858,"outV":94,"properties":{"weight":2}},{"id":1347,"outV":31,"properties":{"weight":1}},{"id":1605,"outV":18,"properties":{"weight":1}},{"id":4165,"outV":54,"properties":{"weight":17}},{"id":3654,"outV":24,"properties":{"weight":3}},{"id":4038,"outV":173,"properties":{"weight":1}},{"id":6598,"outV":127,"properties":{"weight":1}},{"id":3271,"outV":160,"properties":{"weight":1}},{"id":3527,"outV":223,"properties":{"weight":1}},{"id":1096,"outV":59,"properties":{"weight":26}},{"id":3144,"outV":104,"properties":{"weight":24}},{"id":1993,"outV":152,"properties":{"weight":2}},{"id":6985,"outV":175,"properties":{"weigh
 t":1}},{"id":6730,"outV":53,"properties":{"weight":4}},{"id":3019,"outV":14,"properties":{"weight":1}},{"id":3788,"outV":168,"properties":{"weight":1}},{"id":5072,"outV":4,"properties":{"weight":26}},{"id":2515,"outV":57,"properties":{"weight":3}},{"id":1365,"outV":130,"properties":{"weight":2}},{"id":2647,"outV":137,"properties":{"weight":1}},{"id":730,"outV":80,"properties":{"weight":12}},{"id":2780,"outV":15,"properties":{"weight":3}},{"id":482,"outV":98,"properties":{"weight":8}},{"id":3810,"outV":88,"properties":{"weight":6}},{"id":7013,"outV":89,"properties":{"weight":1}},{"id":4072,"outV":109,"properties":{"weight":1}},{"id":2281,"outV":25,"properties":{"weight":2}},{"id":2668,"outV":13,"properties":{"weight":3}},{"id":3565,"outV":56,"properties":{"weight":9}},{"id":1262,"outV":27,"properties":{"weight":17}},{"id":2031,"outV":180,"properties":{"weight":1}},{"id":6769,"outV":39,"properties":{"weight":2}},{"id":1779,"outV":234,"properties":{"weight":1}},{"id":4468,"outV":202,"p
 roperties":{"weight":4}},{"id":1909,"outV":103,"properties":{"weight":1}},{"id":2934,"outV":78,"properties":{"weight":1}},{"id":3446,"outV":58,"properties":{"weight":4}},{"id":381,"outV":74,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":6656,"inV":49,"properties":{"weight":9}},{"id":6657,"inV":19,"properties":{"weight":3}},{"id":6658,"inV":27,"properties":{"weight":9}},{"id":6659,"inV":252,"properties":{"weight":1}},{"id":6660,"inV":206,"properties":{"weight":1}},{"id":6661,"inV":89,"properties":{"weight":4}},{"id":6662,"inV":160,"properties":{"weight":1}},{"id":6663,"inV":15,"properties":{"weight":167}},{"id":6664,"inV":4,"properties":{"weight":3}},{"id":6665,"inV":202,"properties":{"weight":2}},{"id":6666,"inV":5,"properties":{"weight":1}},{"id":6667,"inV":9,"properties":{"weight":2}},{"id":6668,"inV":83,"properties":{"weight":3}},{"id":6669,"inV":3,"properties":{"weight":1}},{"id":6670,"inV":52,"properties":{"weight":1}},{"id":6671,"inV":25,"properties":{"weight":1}},{"
 id":6672,"inV":46,"properties":{"weight":1}},{"id":6673,"inV":123,"properties":{"weight":2}},{"id":6674,"inV":51,"properties":{"weight":4}},{"id":6675,"inV":17,"properties":{"weight":3}},{"id":6676,"inV":56,"properties":{"weight":5}},{"id":6677,"inV":98,"properties":{"weight":5}},{"id":6678,"inV":104,"properties":{"weight":4}},{"id":6679,"inV":69,"properties":{"weight":3}},{"id":6680,"inV":170,"properties":{"weight":2}},{"id":6681,"inV":82,"properties":{"weight":1}},{"id":6682,"inV":80,"properties":{"weight":2}},{"id":6683,"inV":215,"properties":{"weight":1}},{"id":6684,"inV":48,"properties":{"weight":1}},{"id":6685,"inV":14,"properties":{"weight":3}},{"id":6686,"inV":50,"properties":{"weight":2}},{"id":6687,"inV":24,"properties":{"weight":83}},{"id":6688,"inV":18,"properties":{"weight":1}},{"id":6689,"inV":39,"properties":{"weight":6}},{"id":6690,"inV":105,"properties":{"weight":1}},{"id":6691,"inV":131,"properties":{"weight":14}},{"id":6645,"inV":72,"properties":{"weight":7}},{"id
 ":6646,"inV":58,"properties":{"weight":7}},{"id":6647,"inV":57,"properties":{"weight":6}},{"id":6648,"inV":54,"properties":{"weight":8}},{"id":6649,"inV":59,"properties":{"weight":14}},{"id":6650,"inV":100,"properties":{"weight":7}},{"id":6651,"inV":53,"properties":{"weight":4}},{"id":6652,"inV":148,"properties":{"weight":1}},{"id":6653,"inV":218,"properties":{"weight":2}},{"id":6654,"inV":235,"properties":{"weight":2}},{"id":6655,"inV":130,"properties":{"weight":1}}],"sungBy":[{"id":7776,"inV":351}],"writtenBy":[{"id":7775,"inV":659}]},"properties":{"name":[{"id":33,"value":"ME AND MY UNCLE"}],"songType":[{"id":35,"value":"cover"}],"performances":[{"id":34,"value":616}]}}
+{"id":13,"label":"song","inE":{"followedBy":[{"id":4865,"outV":35,"properties":{"weight":4}},{"id":1026,"outV":73,"properties":{"weight":1}},{"id":3330,"outV":155,"properties":{"weight":2}},{"id":5636,"outV":22,"properties":{"weight":1}},{"id":775,"outV":122,"properties":{"weight":1}},{"id":1799,"outV":196,"properties":{"weight":2}},{"id":6407,"outV":134,"properties":{"weight":24}},{"id":9,"outV":9,"properties":{"weight":6}},{"id":4874,"outV":100,"properties":{"weight":6}},{"id":4108,"outV":48,"properties":{"weight":3}},{"id":5132,"outV":222,"properties":{"weight":1}},{"id":2830,"outV":101,"properties":{"weight":8}},{"id":3857,"outV":60,"properties":{"weight":35}},{"id":6931,"outV":84,"properties":{"weight":7}},{"id":533,"outV":120,"properties":{"weight":1}},{"id":6165,"outV":36,"properties":{"weight":1}},{"id":4630,"outV":154,"properties":{"weight":8}},{"id":5142,"outV":125,"properties":{"weight":11}},{"id":283,"outV":5,"properties":{"weight":3}},{"id":1567,"outV":18,"properties":{
 "weight":3}},{"id":1823,"outV":41,"properties":{"weight":4}},{"id":3359,"outV":184,"properties":{"weight":3}},{"id":3617,"outV":24,"properties":{"weight":1}},{"id":3108,"outV":153,"properties":{"weight":1}},{"id":3878,"outV":51,"properties":{"weight":6}},{"id":2347,"outV":87,"properties":{"weight":8}},{"id":6443,"outV":187,"properties":{"weight":47}},{"id":6700,"outV":141,"properties":{"weight":4}},{"id":5682,"outV":167,"properties":{"weight":1}},{"id":53,"outV":46,"properties":{"weight":4}},{"id":823,"outV":171,"properties":{"weight":24}},{"id":4151,"outV":218,"properties":{"weight":2}},{"id":5943,"outV":50,"properties":{"weight":1}},{"id":2617,"outV":158,"properties":{"weight":1}},{"id":3386,"outV":177,"properties":{"weight":2}},{"id":4411,"outV":327,"properties":{"weight":1}},{"id":1852,"outV":94,"properties":{"weight":4}},{"id":6206,"outV":319,"properties":{"weight":1}},{"id":1087,"outV":59,"properties":{"weight":5}},{"id":2111,"outV":17,"properties":{"weight":4}},{"id":4159,"ou
 tV":54,"properties":{"weight":16}},{"id":6723,"outV":53,"properties":{"weight":6}},{"id":6984,"outV":175,"properties":{"weight":1}},{"id":3145,"outV":104,"properties":{"weight":4}},{"id":4947,"outV":86,"properties":{"weight":1}},{"id":5203,"outV":99,"properties":{"weight":2}},{"id":1366,"outV":130,"properties":{"weight":12}},{"id":1622,"outV":210,"properties":{"weight":1}},{"id":2908,"outV":118,"properties":{"weight":1}},{"id":1885,"outV":103,"properties":{"weight":3}},{"id":4959,"outV":207,"properties":{"weight":6}},{"id":3435,"outV":58,"properties":{"weight":8}},{"id":6763,"outV":39,"properties":{"weight":8}},{"id":5741,"outV":129,"properties":{"weight":12}},{"id":366,"outV":74,"properties":{"weight":38}},{"id":2926,"outV":78,"properties":{"weight":3}},{"id":623,"outV":23,"properties":{"weight":1}},{"id":4721,"outV":186,"properties":{"weight":4}},{"id":2165,"outV":151,"properties":{"weight":1}},{"id":886,"outV":140,"properties":{"weight":1}},{"id":3703,"outV":3,"properties":{"weig
 ht":5}},{"id":7031,"outV":89,"properties":{"weight":4}},{"id":1411,"outV":83,"properties":{"weight":7}},{"id":3974,"outV":106,"properties":{"weight":2}},{"id":6278,"outV":49,"properties":{"weight":1}},{"id":912,"outV":91,"properties":{"weight":59}},{"id":2192,"outV":235,"properties":{"weight":1}},{"id":4759,"outV":37,"properties":{"weight":2}},{"id":1179,"outV":26,"properties":{"weight":2}},{"id":5789,"outV":76,"properties":{"weight":3}},{"id":4257,"outV":10,"properties":{"weight":1}},{"id":6561,"outV":172,"properties":{"weight":1}},{"id":4771,"outV":114,"properties":{"weight":3}},{"id":1454,"outV":81,"properties":{"weight":10}},{"id":6073,"outV":72,"properties":{"weight":13}},{"id":5306,"outV":170,"properties":{"weight":4}},{"id":4027,"outV":173,"properties":{"weight":3}},{"id":1725,"outV":82,"properties":{"weight":3}},{"id":960,"outV":67,"properties":{"weight":2}},{"id":1985,"outV":152,"properties":{"weight":1}},{"id":6594,"outV":127,"properties":{"weight":6}},{"id":6342,"outV":21
 ,"properties":{"weight":4}},{"id":455,"outV":139,"properties":{"weight":1}},{"id":3277,"outV":160,"properties":{"weight":3}},{"id":5837,"outV":258,"properties":{"weight":1}},{"id":208,"outV":70,"properties":{"weight":2}},{"id":2256,"outV":29,"properties":{"weight":1}},{"id":721,"outV":80,"properties":{"weight":1}},{"id":2771,"outV":15,"properties":{"weight":3}},{"id":5076,"outV":4,"properties":{"weight":12}},{"id":2519,"outV":57,"properties":{"weight":10}},{"id":4312,"outV":110,"properties":{"weight":1}},{"id":2268,"outV":25,"properties":{"weight":8}},{"id":2014,"outV":149,"properties":{"weight":1}},{"id":3552,"outV":56,"properties":{"weight":8}},{"id":481,"outV":98,"properties":{"weight":3}},{"id":1764,"outV":28,"properties":{"weight":3}},{"id":1258,"outV":27,"properties":{"weight":3}},{"id":1518,"outV":164,"properties":{"weight":1}},{"id":4846,"outV":119,"properties":{"weight":1}},{"id":4593,"outV":85,"properties":{"weight":2}},{"id":244,"outV":150,"properties":{"weight":3}},{"id"
 :1780,"outV":234,"properties":{"weight":2}},{"id":4344,"outV":62,"properties":{"weight":12}},{"id":2044,"outV":92,"properties":{"weight":2}},{"id":5374,"outV":69,"properties":{"weight":34}},{"id":5886,"outV":96,"properties":{"weight":15}}]},"outE":{"followedBy":[{"id":2688,"inV":94,"properties":{"weight":4}},{"id":2689,"inV":130,"properties":{"weight":11}},{"id":2690,"inV":83,"properties":{"weight":13}},{"id":2691,"inV":170,"properties":{"weight":1}},{"id":2692,"inV":51,"properties":{"weight":3}},{"id":2693,"inV":22,"properties":{"weight":2}},{"id":2694,"inV":296,"properties":{"weight":1}},{"id":2695,"inV":52,"properties":{"weight":1}},{"id":2696,"inV":17,"properties":{"weight":2}},{"id":2697,"inV":202,"properties":{"weight":3}},{"id":2698,"inV":27,"properties":{"weight":2}},{"id":2699,"inV":9,"properties":{"weight":3}},{"id":2700,"inV":25,"properties":{"weight":12}},{"id":2701,"inV":195,"properties":{"weight":2}},{"id":2702,"inV":206,"properties":{"weight":1}},{"id":2703,"inV":39,"
 properties":{"weight":1}},{"id":2704,"inV":69,"properties":{"weight":6}},{"id":2705,"inV":24,"properties":{"weight":1}},{"id":2706,"inV":82,"properties":{"weight":3}},{"id":2707,"inV":57,"properties":{"weight":1}},{"id":2708,"inV":134,"properties":{"weight":9}},{"id":2709,"inV":110,"properties":{"weight":1}},{"id":2710,"inV":99,"properties":{"weight":3}},{"id":2711,"inV":76,"properties":{"weight":4}},{"id":2712,"inV":3,"properties":{"weight":3}},{"id":2713,"inV":178,"properties":{"weight":1}},{"id":2714,"inV":184,"properties":{"weight":1}},{"id":2715,"inV":60,"properties":{"weight":21}},{"id":2716,"inV":148,"properties":{"weight":1}},{"id":2717,"inV":32,"properties":{"weight":1}},{"id":2718,"inV":91,"properties":{"weight":42}},{"id":2719,"inV":103,"properties":{"weight":1}},{"id":2720,"inV":114,"properties":{"weight":4}},{"id":2721,"inV":141,"properties":{"weight":4}},{"id":2722,"inV":154,"properties":{"weight":3}},{"id":2723,"inV":109,"properties":{"weight":2}},{"id":2724,"inV":125
 ,"properties":{"weight":9}},{"id":2725,"inV":85,"properties":{"weight":2}},{"id":2726,"inV":84,"properties":{"weight":5}},{"id":2727,"inV":50,"properties":{"weight":1}},{"id":2728,"inV":214,"properties":{"weight":1}},{"id":2729,"inV":72,"properties":{"weight":1}},{"id":2730,"inV":246,"properties":{"weight":1}},{"id":2731,"inV":129,"properties":{"weight":29}},{"id":2732,"inV":65,"properties":{"weight":2}},{"id":2733,"inV":133,"properties":{"weight":1}},{"id":2734,"inV":62,"properties":{"weight":1}},{"id":2735,"inV":29,"properties":{"weight":4}},{"id":2736,"inV":5,"properties":{"weight":3}},{"id":2737,"inV":183,"properties":{"weight":3}},{"id":2738,"inV":210,"properties":{"weight":1}},{"id":2739,"inV":128,"properties":{"weight":1}},{"id":2740,"inV":67,"properties":{"weight":1}},{"id":2741,"inV":212,"properties":{"weight":1}},{"id":2742,"inV":70,"properties":{"weight":2}},{"id":2743,"inV":75,"properties":{"weight":1}},{"id":2744,"inV":71,"properties":{"weight":1}},{"id":2745,"inV":168,
 "properties":{"weight":2}},{"id":2746,"inV":157,"properties":{"weight":1}},{"id":2747,"inV":92,"properties":{"weight":1}},{"id":2748,"inV":89,"properties":{"weight":5}},{"id":2749,"inV":81,"properties":{"weight":1}},{"id":2750,"inV":187,"properties":{"weight":1}},{"id":2751,"inV":164,"properties":{"weight":1}},{"id":2752,"inV":136,"properties":{"weight":1}},{"id":2753,"inV":46,"properties":{"weight":1}},{"id":2660,"inV":207,"properties":{"weight":3}},{"id":2661,"inV":122,"properties":{"weight":17}},{"id":2662,"inV":96,"properties":{"weight":157}},{"id":2663,"inV":104,"properties":{"weight":1}},{"id":2664,"inV":26,"properties":{"weight":14}},{"id":2665,"inV":123,"properties":{"weight":3}},{"id":2666,"inV":19,"properties":{"weight":12}},{"id":2667,"inV":100,"properties":{"weight":5}},{"id":2668,"inV":12,"properties":{"weight":3}},{"id":2669,"inV":49,"properties":{"weight":12}},{"id":2670,"inV":21,"properties":{"weight":4}},{"id":2671,"inV":120,"properties":{"weight":9}},{"id":2672,"in
 V":23,"properties":{"weight":5}},{"id":2673,"inV":59,"properties":{"weight":6}},{"id":2674,"inV":54,"properties":{"weight":5}},{"id":2675,"inV":80,"properties":{"weight":1}},{"id":2676,"inV":234,"properties":{"weight":1}},{"id":2677,"inV":53,"properties":{"weight":2}},{"id":2678,"inV":225,"properties":{"weight":1}},{"id":2679,"inV":235,"properties":{"weight":2}},{"id":2680,"inV":160,"properties":{"weight":3}},{"id":2681,"inV":56,"properties":{"weight":3}},{"id":2682,"inV":127,"properties":{"weight":6}},{"id":2683,"inV":18,"properties":{"weight":3}},{"id":2684,"inV":4,"properties":{"weight":9}},{"id":2685,"inV":15,"properties":{"weight":7}},{"id":2686,"inV":74,"properties":{"weight":86}},{"id":2687,"inV":153,"properties":{"weight":12}}],"sungBy":[{"id":7292,"inV":359}],"writtenBy":[{"id":7291,"inV":339}]},"properties":{"name":[{"id":36,"value":"PLAYING IN THE BAND"}],"songType":[{"id":38,"value":"original"}],"performances":[{"id":37,"value":582}]}}
+{"id":14,"label":"song","inE":{"followedBy":[{"id":6784,"outV":39,"properties":{"weight":10}},{"id":5251,"outV":32,"properties":{"weight":1}},{"id":4229,"outV":52,"properties":{"weight":3}},{"id":4745,"outV":294,"properties":{"weight":4}},{"id":10,"outV":9,"properties":{"weight":3}},{"id":6283,"outV":49,"properties":{"weight":2}},{"id":4364,"outV":62,"properties":{"weight":16}},{"id":4109,"outV":48,"properties":{"weight":10}},{"id":6544,"outV":55,"properties":{"weight":1}},{"id":4881,"outV":100,"properties":{"weight":20}},{"id":6034,"outV":115,"properties":{"weight":1}},{"id":531,"outV":120,"properties":{"weight":1}},{"id":3219,"outV":63,"properties":{"weight":2}},{"id":4758,"outV":37,"properties":{"weight":2}},{"id":4247,"outV":10,"properties":{"weight":1}},{"id":4631,"outV":154,"properties":{"weight":6}},{"id":3866,"outV":60,"properties":{"weight":2}},{"id":1947,"outV":148,"properties":{"weight":1}},{"id":1436,"outV":83,"properties":{"weight":7}},{"id":2844,"outV":101,"properties"
 :{"weight":1}},{"id":6685,"outV":12,"properties":{"weight":3}},{"id":1183,"outV":26,"properties":{"weight":2}},{"id":160,"outV":108,"properties":{"weight":2}},{"id":4517,"outV":105,"properties":{"weight":6}},{"id":6954,"outV":84,"properties":{"weight":4}},{"id":1451,"outV":81,"properties":{"weight":12}},{"id":1582,"outV":18,"properties":{"weight":4}},{"id":3892,"outV":51,"properties":{"weight":10}},{"id":2107,"outV":17,"properties":{"weight":19}},{"id":5820,"outV":76,"properties":{"weight":1}},{"id":6463,"outV":187,"properties":{"weight":26}},{"id":1090,"outV":59,"properties":{"weight":7}},{"id":1731,"outV":82,"properties":{"weight":4}},{"id":6083,"outV":72,"properties":{"weight":9}},{"id":4037,"outV":173,"properties":{"weight":1}},{"id":2375,"outV":87,"properties":{"weight":8}},{"id":4169,"outV":54,"properties":{"weight":36}},{"id":5578,"outV":42,"properties":{"weight":1}},{"id":716,"outV":80,"properties":{"weight":10}},{"id":5964,"outV":50,"properties":{"weight":2}},{"id":845,"out
 V":171,"properties":{"weight":11}},{"id":5709,"outV":20,"properties":{"weight":1}},{"id":5838,"outV":258,"properties":{"weight":1}},{"id":1232,"outV":248,"properties":{"weight":1}},{"id":6993,"outV":175,"properties":{"weight":1}},{"id":3666,"outV":24,"properties":{"weight":2}},{"id":3156,"outV":104,"properties":{"weight":6}},{"id":3796,"outV":88,"properties":{"weight":1}},{"id":6742,"outV":53,"properties":{"weight":15}},{"id":2523,"outV":57,"properties":{"weight":9}},{"id":864,"outV":189,"properties":{"weight":2}},{"id":3556,"outV":56,"properties":{"weight":21}},{"id":102,"outV":46,"properties":{"weight":1}},{"id":5096,"outV":4,"properties":{"weight":2}},{"id":489,"outV":98,"properties":{"weight":3}},{"id":1257,"outV":27,"properties":{"weight":19}},{"id":2030,"outV":180,"properties":{"weight":2}},{"id":2159,"outV":151,"properties":{"weight":1}},{"id":2803,"outV":15,"properties":{"weight":4}},{"id":2935,"outV":78,"properties":{"weight":1}},{"id":2426,"outV":68,"properties":{"weight":
 4}},{"id":3962,"outV":106,"properties":{"weight":2}},{"id":4474,"outV":202,"properties":{"weight":1}},{"id":123,"outV":97,"properties":{"weight":1}},{"id":4092,"outV":109,"properties":{"weight":1}},{"id":5628,"outV":22,"properties":{"weight":1}},{"id":1021,"outV":73,"properties":{"weight":20}},{"id":3455,"outV":58,"properties":{"weight":12}}]},"outE":{"followedBy":[{"id":2981,"inV":50,"properties":{"weight":2}},{"id":2982,"inV":4,"properties":{"weight":3}},{"id":2983,"inV":53,"properties":{"weight":8}},{"id":2984,"inV":57,"properties":{"weight":55}},{"id":2985,"inV":89,"properties":{"weight":2}},{"id":2986,"inV":122,"properties":{"weight":1}},{"id":2987,"inV":153,"properties":{"weight":1}},{"id":2988,"inV":72,"properties":{"weight":26}},{"id":2989,"inV":19,"properties":{"weight":17}},{"id":2990,"inV":9,"properties":{"weight":4}},{"id":2991,"inV":17,"properties":{"weight":13}},{"id":2992,"inV":46,"properties":{"weight":5}},{"id":2993,"inV":51,"properties":{"weight":15}},{"id":2994,"i
 nV":54,"properties":{"weight":28}},{"id":2995,"inV":202,"properties":{"weight":3}},{"id":2996,"inV":27,"properties":{"weight":6}},{"id":2997,"inV":52,"properties":{"weight":3}},{"id":2998,"inV":58,"properties":{"weight":1}},{"id":2999,"inV":56,"properties":{"weight":8}},{"id":3000,"inV":100,"properties":{"weight":12}},{"id":3001,"inV":99,"properties":{"weight":26}},{"id":3002,"inV":98,"properties":{"weight":3}},{"id":3003,"inV":104,"properties":{"weight":2}},{"id":3004,"inV":82,"properties":{"weight":6}},{"id":3005,"inV":215,"properties":{"weight":1}},{"id":3006,"inV":69,"properties":{"weight":2}},{"id":3007,"inV":103,"properties":{"weight":1}},{"id":3008,"inV":83,"properties":{"weight":8}},{"id":3009,"inV":101,"properties":{"weight":1}},{"id":3010,"inV":80,"properties":{"weight":8}},{"id":3011,"inV":121,"properties":{"weight":3}},{"id":3012,"inV":59,"properties":{"weight":1}},{"id":3013,"inV":26,"properties":{"weight":2}},{"id":3014,"inV":32,"properties":{"weight":2}},{"id":3015,"i
 nV":155,"properties":{"weight":1}},{"id":3016,"inV":42,"properties":{"weight":2}},{"id":3017,"inV":18,"properties":{"weight":1}},{"id":3018,"inV":105,"properties":{"weight":11}},{"id":3019,"inV":12,"properties":{"weight":1}},{"id":3020,"inV":49,"properties":{"weight":27}},{"id":3021,"inV":65,"properties":{"weight":2}},{"id":3022,"inV":85,"properties":{"weight":2}},{"id":3023,"inV":73,"properties":{"weight":8}},{"id":3024,"inV":106,"properties":{"weight":3}},{"id":3025,"inV":189,"properties":{"weight":3}},{"id":3026,"inV":10,"properties":{"weight":1}},{"id":3027,"inV":210,"properties":{"weight":3}},{"id":3028,"inV":76,"properties":{"weight":1}},{"id":3029,"inV":87,"properties":{"weight":1}},{"id":3030,"inV":96,"properties":{"weight":1}},{"id":3031,"inV":150,"properties":{"weight":1}},{"id":3032,"inV":66,"properties":{"weight":1}},{"id":3033,"inV":5,"properties":{"weight":1}},{"id":3034,"inV":91,"properties":{"weight":29}},{"id":3035,"inV":60,"properties":{"weight":6}},{"id":3036,"inV
 ":67,"properties":{"weight":1}},{"id":3037,"inV":74,"properties":{"weight":1}},{"id":3038,"inV":21,"properties":{"weight":1}},{"id":3039,"inV":169,"properties":{"weight":1}},{"id":3040,"inV":62,"properties":{"weight":1}},{"id":3041,"inV":39,"properties":{"weight":2}},{"id":3042,"inV":175,"properties":{"weight":1}},{"id":3043,"inV":172,"properties":{"weight":1}},{"id":3044,"inV":28,"properties":{"weight":5}},{"id":3045,"inV":173,"properties":{"weight":1}},{"id":3046,"inV":37,"properties":{"weight":5}},{"id":3047,"inV":35,"properties":{"weight":2}}],"sungBy":[{"id":7232,"inV":351}],"writtenBy":[{"id":7231,"inV":350}]},"properties":{"name":[{"id":39,"value":"LOOKS LIKE RAIN"}],"songType":[{"id":41,"value":"original"}],"performances":[{"id":40,"value":417}]}}
+{"id":15,"label":"song","inE":{"followedBy":[{"id":1152,"outV":26,"properties":{"weight":1}},{"id":769,"outV":122,"properties":{"weight":3}},{"id":5379,"outV":69,"properties":{"weight":4}},{"id":3844,"outV":60,"properties":{"weight":2}},{"id":1414,"outV":83,"properties":{"weight":2}},{"id":6663,"outV":12,"properties":{"weight":167}},{"id":4872,"outV":100,"properties":{"weight":9}},{"id":4105,"outV":48,"properties":{"weight":4}},{"id":11,"outV":9,"properties":{"weight":3}},{"id":4622,"outV":154,"properties":{"weight":1}},{"id":2833,"outV":101,"properties":{"weight":1}},{"id":2195,"outV":235,"properties":{"weight":1}},{"id":5141,"outV":125,"properties":{"weight":2}},{"id":3224,"outV":63,"properties":{"weight":2}},{"id":1945,"outV":148,"properties":{"weight":2}},{"id":5024,"outV":30,"properties":{"weight":2}},{"id":2597,"outV":112,"properties":{"weight":35}},{"id":1062,"outV":73,"properties":{"weight":1}},{"id":4776,"outV":114,"properties":{"weight":1}},{"id":5032,"outV":47,"properties
 ":{"weight":1}},{"id":6698,"outV":141,"properties":{"weight":1}},{"id":3885,"outV":51,"properties":{"weight":14}},{"id":1712,"outV":82,"properties":{"weight":4}},{"id":5301,"outV":170,"properties":{"weight":1}},{"id":1847,"outV":94,"properties":{"weight":6}},{"id":4153,"outV":54,"properties":{"weight":7}},{"id":1339,"outV":31,"properties":{"weight":2}},{"id":6075,"outV":72,"properties":{"weight":4}},{"id":60,"outV":46,"properties":{"weight":1}},{"id":2108,"outV":17,"properties":{"weight":8}},{"id":6460,"outV":187,"properties":{"weight":10}},{"id":3653,"outV":24,"properties":{"weight":14}},{"id":3147,"outV":104,"properties":{"weight":2}},{"id":6731,"outV":53,"properties":{"weight":1}},{"id":1101,"outV":59,"properties":{"weight":2}},{"id":4052,"outV":173,"properties":{"weight":1}},{"id":2518,"outV":57,"properties":{"weight":5}},{"id":476,"outV":98,"properties":{"weight":3}},{"id":1372,"outV":130,"properties":{"weight":1}},{"id":1245,"outV":27,"properties":{"weight":5}},{"id":5085,"out
 V":4,"properties":{"weight":1}},{"id":2272,"outV":25,"properties":{"weight":4}},{"id":4577,"outV":254,"properties":{"weight":1}},{"id":5735,"outV":129,"properties":{"weight":2}},{"id":3432,"outV":58,"properties":{"weight":7}},{"id":746,"outV":80,"properties":{"weight":1}},{"id":3562,"outV":56,"properties":{"weight":6}},{"id":2411,"outV":68,"properties":{"weight":1}},{"id":2924,"outV":78,"properties":{"weight":3}},{"id":4467,"outV":202,"properties":{"weight":6}},{"id":376,"outV":74,"properties":{"weight":1}},{"id":5242,"outV":32,"properties":{"weight":2}},{"id":6267,"outV":49,"properties":{"weight":1}},{"id":2685,"outV":13,"properties":{"weight":7}}]},"outE":{"followedBy":[{"id":2816,"inV":103,"properties":{"weight":1}},{"id":2817,"inV":62,"properties":{"weight":1}},{"id":2818,"inV":64,"properties":{"weight":1}},{"id":2819,"inV":75,"properties":{"weight":3}},{"id":2820,"inV":152,"properties":{"weight":1}},{"id":2821,"inV":117,"properties":{"weight":1}},{"id":2822,"inV":168,"propertie
 s":{"weight":1}},{"id":2823,"inV":188,"properties":{"weight":1}},{"id":2824,"inV":131,"properties":{"weight":4}},{"id":2825,"inV":28,"properties":{"weight":1}},{"id":2826,"inV":124,"properties":{"weight":1}},{"id":2827,"inV":190,"properties":{"weight":1}},{"id":2828,"inV":137,"properties":{"weight":1}},{"id":2755,"inV":19,"properties":{"weight":8}},{"id":2756,"inV":56,"properties":{"weight":22}},{"id":2757,"inV":104,"properties":{"weight":17}},{"id":2758,"inV":49,"properties":{"weight":4}},{"id":2759,"inV":122,"properties":{"weight":3}},{"id":2760,"inV":23,"properties":{"weight":2}},{"id":2761,"inV":27,"properties":{"weight":23}},{"id":2762,"inV":89,"properties":{"weight":7}},{"id":2763,"inV":46,"properties":{"weight":1}},{"id":2764,"inV":57,"properties":{"weight":7}},{"id":2765,"inV":59,"properties":{"weight":6}},{"id":2766,"inV":58,"properties":{"weight":18}},{"id":2767,"inV":54,"properties":{"weight":25}},{"id":2768,"inV":100,"properties":{"weight":24}},{"id":2769,"inV":39,"prope
 rties":{"weight":3}},{"id":2770,"inV":160,"properties":{"weight":5}},{"id":2771,"inV":13,"properties":{"weight":3}},{"id":2772,"inV":51,"properties":{"weight":14}},{"id":2773,"inV":94,"properties":{"weight":4}},{"id":2774,"inV":148,"properties":{"weight":1}},{"id":2775,"inV":9,"properties":{"weight":5}},{"id":2776,"inV":48,"properties":{"weight":17}},{"id":2777,"inV":55,"properties":{"weight":1}},{"id":2778,"inV":72,"properties":{"weight":3}},{"id":2779,"inV":52,"properties":{"weight":1}},{"id":2780,"inV":12,"properties":{"weight":3}},{"id":2781,"inV":4,"properties":{"weight":4}},{"id":2782,"inV":83,"properties":{"weight":2}},{"id":2783,"inV":202,"properties":{"weight":6}},{"id":2784,"inV":82,"properties":{"weight":3}},{"id":2785,"inV":74,"properties":{"weight":1}},{"id":2786,"inV":69,"properties":{"weight":7}},{"id":2787,"inV":98,"properties":{"weight":10}},{"id":2788,"inV":21,"properties":{"weight":1}},{"id":2789,"inV":125,"properties":{"weight":1}},{"id":2790,"inV":170,"propertie
 s":{"weight":3}},{"id":2791,"inV":26,"properties":{"weight":1}},{"id":2792,"inV":60,"properties":{"weight":1}},{"id":2793,"inV":294,"properties":{"weight":2}},{"id":2794,"inV":99,"properties":{"weight":3}},{"id":2795,"inV":17,"properties":{"weight":10}},{"id":2796,"inV":63,"properties":{"weight":5}},{"id":2797,"inV":68,"properties":{"weight":3}},{"id":2798,"inV":108,"properties":{"weight":6}},{"id":2799,"inV":109,"properties":{"weight":1}},{"id":2800,"inV":196,"properties":{"weight":3}},{"id":2801,"inV":91,"properties":{"weight":1}},{"id":2802,"inV":18,"properties":{"weight":1}},{"id":2803,"inV":14,"properties":{"weight":4}},{"id":2804,"inV":105,"properties":{"weight":8}},{"id":2805,"inV":101,"properties":{"weight":2}},{"id":2806,"inV":10,"properties":{"weight":2}},{"id":2807,"inV":73,"properties":{"weight":26}},{"id":2808,"inV":78,"properties":{"weight":1}},{"id":2809,"inV":32,"properties":{"weight":3}},{"id":2810,"inV":106,"properties":{"weight":2}},{"id":2811,"inV":180,"propertie
 s":{"weight":2}},{"id":2812,"inV":88,"properties":{"weight":1}},{"id":2813,"inV":97,"properties":{"weight":1}},{"id":2814,"inV":53,"properties":{"weight":3}},{"id":2815,"inV":115,"properties":{"weight":4}}],"sungBy":[{"id":7472,"inV":351}],"writtenBy":[{"id":7471,"inV":479}]},"properties":{"name":[{"id":42,"value":"BIG RIVER"}],"songType":[{"id":44,"value":"cover"}],"performances":[{"id":43,"value":397}]}}
+{"id":16,"label":"song","inE":{"followedBy":[{"id":7008,"outV":89,"properties":{"weight":1}},{"id":6467,"outV":187,"properties":{"weight":1}},{"id":4101,"outV":48,"properties":{"weight":1}},{"id":5637,"outV":22,"properties":{"weight":3}},{"id":6341,"outV":21,"properties":{"weight":1}},{"id":5382,"outV":69,"properties":{"weight":4}},{"id":3273,"outV":160,"properties":{"weight":2}},{"id":6537,"outV":55,"properties":{"weight":1}},{"id":3882,"outV":51,"properties":{"weight":12}},{"id":12,"outV":9,"properties":{"weight":1}},{"id":1260,"outV":27,"properties":{"weight":1}},{"id":4172,"outV":54,"properties":{"weight":1}},{"id":6285,"outV":49,"properties":{"weight":1}},{"id":368,"outV":74,"properties":{"weight":1}},{"id":4464,"outV":202,"properties":{"weight":1}},{"id":468,"outV":195,"properties":{"weight":3}},{"id":5303,"outV":170,"properties":{"weight":2}},{"id":472,"outV":98,"properties":{"weight":2}},{"id":2521,"outV":57,"properties":{"weight":1}},{"id":5081,"outV":4,"properties":{"weigh
 t":2}},{"id":5146,"outV":125,"properties":{"weight":1}},{"id":1405,"outV":83,"properties":{"weight":5}},{"id":1854,"outV":94,"properties":{"weight":2}},{"id":1950,"outV":148,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":2169,"inV":25,"properties":{"weight":1}},{"id":2170,"inV":101,"properties":{"weight":46}},{"id":2171,"inV":89,"properties":{"weight":2}},{"id":2172,"inV":130,"properties":{"weight":1}},{"id":2173,"inV":83,"properties":{"weight":1}}]},"properties":{"name":[{"id":45,"value":"WEATHER REPORT SUITE"}],"songType":[{"id":47,"value":""}],"performances":[{"id":46,"value":0}]}}
+{"id":17,"label":"song","inE":{"followedBy":[{"id":5955,"outV":50,"properties":{"weight":43}},{"id":5702,"outV":20,"properties":{"weight":2}},{"id":2696,"outV":13,"properties":{"weight":2}},{"id":6538,"outV":55,"properties":{"weight":1}},{"id":1163,"outV":26,"properties":{"weight":34}},{"id":13,"outV":9,"properties":{"weight":1}},{"id":402,"outV":38,"properties":{"weight":12}},{"id":5011,"outV":30,"properties":{"weight":3}},{"id":6675,"outV":12,"properties":{"weight":3}},{"id":1877,"outV":103,"properties":{"weight":2}},{"id":2522,"outV":57,"properties":{"weight":1}},{"id":475,"outV":98,"properties":{"weight":1}},{"id":3803,"outV":88,"properties":{"weight":4}},{"id":540,"outV":120,"properties":{"weight":1}},{"id":2588,"outV":112,"properties":{"weight":3}},{"id":3996,"outV":106,"properties":{"weight":1}},{"id":990,"outV":11,"properties":{"weight":3}},{"id":1570,"outV":18,"properties":{"weight":6}},{"id":2275,"outV":25,"properties":{"weight":1}},{"id":4262,"outV":10,"properties":{"weig
 ht":5}},{"id":2795,"outV":15,"properties":{"weight":10}},{"id":6955,"outV":84,"properties":{"weight":1}},{"id":2413,"outV":68,"properties":{"weight":9}},{"id":4077,"outV":109,"properties":{"weight":1}},{"id":2991,"outV":14,"properties":{"weight":13}},{"id":4912,"outV":100,"properties":{"weight":1}},{"id":3639,"outV":24,"properties":{"weight":13}},{"id":6583,"outV":116,"properties":{"weight":1}},{"id":58,"outV":46,"properties":{"weight":2}},{"id":635,"outV":23,"properties":{"weight":16}},{"id":5244,"outV":32,"properties":{"weight":19}},{"id":2942,"outV":78,"properties":{"weight":1}},{"id":6847,"outV":64,"properties":{"weight":7}}]},"outE":{"followedBy":[{"id":2112,"inV":24,"properties":{"weight":9}},{"id":2113,"inV":21,"properties":{"weight":1}},{"id":2114,"inV":46,"properties":{"weight":1}},{"id":2115,"inV":20,"properties":{"weight":2}},{"id":2116,"inV":10,"properties":{"weight":7}},{"id":2117,"inV":68,"properties":{"weight":25}},{"id":2118,"inV":32,"properties":{"weight":19}},{"id"
 :2119,"inV":103,"properties":{"weight":3}},{"id":2120,"inV":121,"properties":{"weight":3}},{"id":2121,"inV":112,"properties":{"weight":31}},{"id":2122,"inV":85,"properties":{"weight":1}},{"id":2123,"inV":101,"properties":{"weight":1}},{"id":2124,"inV":109,"properties":{"weight":1}},{"id":2125,"inV":73,"properties":{"weight":1}},{"id":2126,"inV":88,"properties":{"weight":8}},{"id":2127,"inV":111,"properties":{"weight":3}},{"id":2128,"inV":54,"properties":{"weight":2}},{"id":2129,"inV":97,"properties":{"weight":2}},{"id":2130,"inV":100,"properties":{"weight":1}},{"id":2131,"inV":42,"properties":{"weight":1}},{"id":2132,"inV":58,"properties":{"weight":2}},{"id":2133,"inV":244,"properties":{"weight":1}},{"id":2134,"inV":56,"properties":{"weight":1}},{"id":2135,"inV":63,"properties":{"weight":1}},{"id":2136,"inV":188,"properties":{"weight":2}},{"id":2137,"inV":71,"properties":{"weight":1}},{"id":2138,"inV":30,"properties":{"weight":2}},{"id":2139,"inV":31,"properties":{"weight":1}},{"id"
 :2140,"inV":77,"properties":{"weight":2}},{"id":2141,"inV":40,"properties":{"weight":1}},{"id":2142,"inV":33,"properties":{"weight":1}},{"id":2103,"inV":18,"properties":{"weight":17}},{"id":2104,"inV":39,"properties":{"weight":2}},{"id":2105,"inV":22,"properties":{"weight":4}},{"id":2106,"inV":50,"properties":{"weight":6}},{"id":2107,"inV":14,"properties":{"weight":19}},{"id":2108,"inV":15,"properties":{"weight":8}},{"id":2109,"inV":12,"properties":{"weight":24}},{"id":2110,"inV":23,"properties":{"weight":2}},{"id":2111,"inV":13,"properties":{"weight":4}}],"sungBy":[{"id":7364,"inV":340}],"writtenBy":[{"id":7363,"inV":339}]},"properties":{"name":[{"id":48,"value":"THEY LOVE EACH OTHER"}],"songType":[{"id":50,"value":"original"}],"performances":[{"id":49,"value":227}]}}
+{"id":18,"label":"song","inE":{"followedBy":[{"id":1024,"outV":73,"properties":{"weight":4}},{"id":4097,"outV":48,"properties":{"weight":13}},{"id":6276,"outV":49,"properties":{"weight":2}},{"id":2309,"outV":25,"properties":{"weight":1}},{"id":3333,"outV":155,"properties":{"weight":1}},{"id":4231,"outV":52,"properties":{"weight":1}},{"id":4360,"outV":62,"properties":{"weight":1}},{"id":3849,"outV":60,"properties":{"weight":1}},{"id":5257,"outV":32,"properties":{"weight":3}},{"id":5385,"outV":69,"properties":{"weight":2}},{"id":2189,"outV":235,"properties":{"weight":1}},{"id":14,"outV":9,"properties":{"weight":5}},{"id":654,"outV":23,"properties":{"weight":1}},{"id":5010,"outV":30,"properties":{"weight":2}},{"id":6546,"outV":55,"properties":{"weight":1}},{"id":4885,"outV":100,"properties":{"weight":11}},{"id":1814,"outV":273,"properties":{"weight":1}},{"id":1943,"outV":148,"properties":{"weight":1}},{"id":5145,"outV":125,"properties":{"weight":1}},{"id":6688,"outV":12,"properties":{"
 weight":1}},{"id":4642,"outV":154,"properties":{"weight":3}},{"id":2852,"outV":101,"properties":{"weight":1}},{"id":4260,"outV":10,"properties":{"weight":3}},{"id":3238,"outV":63,"properties":{"weight":1}},{"id":6695,"outV":141,"properties":{"weight":1}},{"id":3880,"outV":51,"properties":{"weight":12}},{"id":425,"outV":38,"properties":{"weight":2}},{"id":1193,"outV":26,"properties":{"weight":1}},{"id":2601,"outV":112,"properties":{"weight":1}},{"id":4524,"outV":105,"properties":{"weight":3}},{"id":45,"outV":46,"properties":{"weight":3}},{"id":4015,"outV":292,"properties":{"weight":1}},{"id":560,"outV":120,"properties":{"weight":1}},{"id":5299,"outV":170,"properties":{"weight":3}},{"id":6579,"outV":116,"properties":{"weight":1}},{"id":1716,"outV":82,"properties":{"weight":3}},{"id":4404,"outV":40,"properties":{"weight":1}},{"id":5429,"outV":315,"properties":{"weight":1}},{"id":4150,"outV":218,"properties":{"weight":1}},{"id":2103,"outV":17,"properties":{"weight":17}},{"id":4152,"outV
 ":54,"properties":{"weight":18}},{"id":6456,"outV":187,"properties":{"weight":8}},{"id":1849,"outV":94,"properties":{"weight":6}},{"id":827,"outV":171,"properties":{"weight":1}},{"id":6715,"outV":53,"properties":{"weight":6}},{"id":6205,"outV":319,"properties":{"weight":1}},{"id":1086,"outV":59,"properties":{"weight":21}},{"id":5439,"outV":239,"properties":{"weight":1}},{"id":6080,"outV":72,"properties":{"weight":3}},{"id":1986,"outV":152,"properties":{"weight":1}},{"id":3270,"outV":160,"properties":{"weight":1}},{"id":5192,"outV":99,"properties":{"weight":1}},{"id":3017,"outV":14,"properties":{"weight":1}},{"id":1356,"outV":31,"properties":{"weight":1}},{"id":3148,"outV":104,"properties":{"weight":19}},{"id":4044,"outV":173,"properties":{"weight":4}},{"id":5073,"outV":4,"properties":{"weight":4}},{"id":4692,"outV":33,"properties":{"weight":1}},{"id":5716,"outV":20,"properties":{"weight":1}},{"id":2517,"outV":57,"properties":{"weight":11}},{"id":5973,"outV":50,"properties":{"weight"
 :5}},{"id":3671,"outV":24,"properties":{"weight":3}},{"id":473,"outV":98,"properties":{"weight":6}},{"id":729,"outV":80,"properties":{"weight":5}},{"id":5850,"outV":61,"properties":{"weight":1}},{"id":1244,"outV":27,"properties":{"weight":16}},{"id":3807,"outV":88,"properties":{"weight":1}},{"id":3553,"outV":56,"properties":{"weight":16}},{"id":866,"outV":189,"properties":{"weight":1}},{"id":5602,"outV":42,"properties":{"weight":1}},{"id":355,"outV":74,"properties":{"weight":1}},{"id":3431,"outV":58,"properties":{"weight":8}},{"id":4967,"outV":207,"properties":{"weight":1}},{"id":7016,"outV":89,"properties":{"weight":3}},{"id":1642,"outV":213,"properties":{"weight":1}},{"id":2029,"outV":180,"properties":{"weight":1}},{"id":6765,"outV":39,"properties":{"weight":7}},{"id":6384,"outV":65,"properties":{"weight":1}},{"id":2802,"outV":15,"properties":{"weight":1}},{"id":3315,"outV":252,"properties":{"weight":1}},{"id":4851,"outV":119,"properties":{"weight":1}},{"id":3064,"outV":153,"prope
 rties":{"weight":2}},{"id":1401,"outV":190,"properties":{"weight":2}},{"id":2683,"outV":13,"properties":{"weight":3}},{"id":4476,"outV":202,"properties":{"weight":3}},{"id":2431,"outV":68,"properties":{"weight":3}}]},"outE":{"followedBy":[{"id":1536,"inV":59,"properties":{"weight":5}},{"id":1537,"inV":19,"properties":{"weight":17}},{"id":1538,"inV":100,"properties":{"weight":16}},{"id":1539,"inV":122,"properties":{"weight":6}},{"id":1540,"inV":46,"properties":{"weight":4}},{"id":1541,"inV":47,"properties":{"weight":1}},{"id":1542,"inV":74,"properties":{"weight":1}},{"id":1543,"inV":53,"properties":{"weight":7}},{"id":1544,"inV":94,"properties":{"weight":2}},{"id":1545,"inV":58,"properties":{"weight":13}},{"id":1546,"inV":57,"properties":{"weight":10}},{"id":1547,"inV":25,"properties":{"weight":1}},{"id":1548,"inV":39,"properties":{"weight":3}},{"id":1549,"inV":54,"properties":{"weight":29}},{"id":1550,"inV":120,"properties":{"weight":1}},{"id":1551,"inV":152,"properties":{"weight":1
 }},{"id":1552,"inV":89,"properties":{"weight":3}},{"id":1553,"inV":148,"properties":{"weight":1}},{"id":1554,"inV":252,"properties":{"weight":1}},{"id":1555,"inV":225,"properties":{"weight":1}},{"id":1556,"inV":80,"properties":{"weight":2}},{"id":1557,"inV":56,"properties":{"weight":11}},{"id":1558,"inV":27,"properties":{"weight":16}},{"id":1559,"inV":26,"properties":{"weight":1}},{"id":1560,"inV":206,"properties":{"weight":1}},{"id":1561,"inV":72,"properties":{"weight":5}},{"id":1562,"inV":23,"properties":{"weight":3}},{"id":1563,"inV":49,"properties":{"weight":3}},{"id":1564,"inV":51,"properties":{"weight":26}},{"id":1565,"inV":55,"properties":{"weight":2}},{"id":1566,"inV":202,"properties":{"weight":6}},{"id":1567,"inV":13,"properties":{"weight":3}},{"id":1568,"inV":83,"properties":{"weight":4}},{"id":1569,"inV":160,"properties":{"weight":2}},{"id":1570,"inV":17,"properties":{"weight":6}},{"id":1571,"inV":10,"properties":{"weight":5}},{"id":1572,"inV":9,"properties":{"weight":3}}
 ,{"id":1573,"inV":125,"properties":{"weight":2}},{"id":1574,"inV":98,"properties":{"weight":4}},{"id":1575,"inV":170,"properties":{"weight":5}},{"id":1576,"inV":69,"properties":{"weight":3}},{"id":1577,"inV":21,"properties":{"weight":1}},{"id":1578,"inV":82,"properties":{"weight":2}},{"id":1579,"inV":196,"properties":{"weight":1}},{"id":1580,"inV":104,"properties":{"weight":9}},{"id":1581,"inV":108,"properties":{"weight":4}},{"id":1582,"inV":14,"properties":{"weight":4}},{"id":1583,"inV":32,"properties":{"weight":4}},{"id":1584,"inV":50,"properties":{"weight":1}},{"id":1585,"inV":48,"properties":{"weight":7}},{"id":1586,"inV":101,"properties":{"weight":1}},{"id":1587,"inV":105,"properties":{"weight":5}},{"id":1588,"inV":208,"properties":{"weight":1}},{"id":1589,"inV":103,"properties":{"weight":2}},{"id":1590,"inV":42,"properties":{"weight":1}},{"id":1591,"inV":63,"properties":{"weight":2}},{"id":1592,"inV":24,"properties":{"weight":2}},{"id":1593,"inV":73,"properties":{"weight":7}},
 {"id":1594,"inV":222,"properties":{"weight":1}},{"id":1595,"inV":106,"properties":{"weight":1}},{"id":1596,"inV":189,"properties":{"weight":2}},{"id":1597,"inV":112,"properties":{"weight":1}},{"id":1598,"inV":68,"properties":{"weight":2}},{"id":1599,"inV":121,"properties":{"weight":1}},{"id":1600,"inV":180,"properties":{"weight":2}},{"id":1601,"inV":199,"properties":{"weight":1}},{"id":1602,"inV":88,"properties":{"weight":2}},{"id":1603,"inV":128,"properties":{"weight":1}},{"id":1604,"inV":60,"properties":{"weight":1}},{"id":1605,"inV":12,"properties":{"weight":1}},{"id":1606,"inV":75,"properties":{"weight":2}},{"id":1607,"inV":168,"properties":{"weight":1}},{"id":1608,"inV":175,"properties":{"weight":1}},{"id":1609,"inV":254,"properties":{"weight":1}},{"id":1610,"inV":174,"properties":{"weight":4}},{"id":1611,"inV":137,"properties":{"weight":1}},{"id":1612,"inV":173,"properties":{"weight":1}},{"id":1535,"inV":235,"properties":{"weight":1}}],"sungBy":[{"id":7554,"inV":351}],"written
 By":[{"id":7553,"inV":528}]},"properties":{"name":[{"id":51,"value":"EL PASO"}],"songType":[{"id":53,"value":"cover"}],"performances":[{"id":52,"value":388}]}}
+{"id":19,"label":"song","inE":{"followedBy":[{"id":1537,"outV":18,"properties":{"weight":17}},{"id":3969,"outV":106,"properties":{"weight":1}},{"id":6657,"outV":12,"properties":{"weight":3}},{"id":4098,"outV":48,"properties":{"weight":1}},{"id":6532,"outV":242,"properties":{"weight":1}},{"id":1159,"outV":26,"properties":{"weight":21}},{"id":6152,"outV":36,"properties":{"weight":6}},{"id":394,"outV":74,"properties":{"weight":1}},{"id":522,"outV":120,"properties":{"weight":2}},{"id":5130,"outV":222,"properties":{"weight":1}},{"id":3467,"outV":58,"properties":{"weight":8}},{"id":15,"outV":9,"properties":{"weight":1}},{"id":272,"outV":150,"properties":{"weight":1}},{"id":4880,"outV":100,"properties":{"weight":1}},{"id":5267,"outV":32,"properties":{"weight":12}},{"id":4245,"outV":10,"properties":{"weight":9}},{"id":790,"outV":122,"properties":{"weight":1}},{"id":2841,"outV":101,"properties":{"weight":18}},{"id":3097,"outV":153,"properties":{"weight":3}},{"id":411,"outV":38,"properties":{
 "weight":6}},{"id":2335,"outV":290,"properties":{"weight":2}},{"id":5535,"outV":43,"properties":{"weight":1}},{"id":1825,"outV":41,"properties":{"weight":1}},{"id":3874,"outV":60,"properties":{"weight":1}},{"id":4770,"outV":114,"properties":{"weight":4}},{"id":6308,"outV":123,"properties":{"weight":1}},{"id":2086,"outV":188,"properties":{"weight":1}},{"id":2215,"outV":75,"properties":{"weight":1}},{"id":5801,"outV":76,"properties":{"weight":5}},{"id":42,"outV":46,"properties":{"weight":5}},{"id":3628,"outV":24,"properties":{"weight":9}},{"id":2989,"outV":14,"properties":{"weight":17}},{"id":5167,"outV":71,"properties":{"weight":1}},{"id":6831,"outV":64,"properties":{"weight":7}},{"id":2354,"outV":87,"properties":{"weight":2}},{"id":5938,"outV":50,"properties":{"weight":19}},{"id":951,"outV":67,"properties":{"weight":2}},{"id":3511,"outV":223,"properties":{"weight":1}},{"id":1848,"outV":94,"properties":{"weight":1}},{"id":314,"outV":34,"properties":{"weight":2}},{"id":2621,"outV":158
 ,"properties":{"weight":2}},{"id":1472,"outV":81,"properties":{"weight":1}},{"id":6081,"outV":72,"properties":{"weight":24}},{"id":6978,"outV":175,"properties":{"weight":2}},{"id":2755,"outV":15,"properties":{"weight":8}},{"id":5701,"outV":20,"properties":{"weight":4}},{"id":3275,"outV":160,"properties":{"weight":2}},{"id":4171,"outV":54,"properties":{"weight":3}},{"id":206,"outV":70,"properties":{"weight":1}},{"id":4558,"outV":105,"properties":{"weight":1}},{"id":5200,"outV":99,"properties":{"weight":19}},{"id":5457,"outV":79,"properties":{"weight":4}},{"id":979,"outV":11,"properties":{"weight":9}},{"id":1620,"outV":210,"properties":{"weight":4}},{"id":5590,"outV":42,"properties":{"weight":4}},{"id":3799,"outV":88,"properties":{"weight":7}},{"id":4450,"outV":113,"properties":{"weight":1}},{"id":4962,"outV":207,"properties":{"weight":1}},{"id":6370,"outV":21,"properties":{"weight":1}},{"id":1763,"outV":28,"properties":{"weight":1}},{"id":2405,"outV":45,"properties":{"weight":1}},{"i
 d":2279,"outV":25,"properties":{"weight":4}},{"id":2408,"outV":68,"properties":{"weight":5}},{"id":5864,"outV":96,"properties":{"weight":1}},{"id":2666,"outV":13,"properties":{"weight":12}},{"id":1900,"outV":103,"properties":{"weight":22}},{"id":3564,"outV":56,"properties":{"weight":2}},{"id":5102,"outV":4,"properties":{"weight":6}},{"id":1776,"outV":234,"properties":{"weight":7}},{"id":4976,"outV":236,"properties":{"weight":3}},{"id":2546,"outV":57,"properties":{"weight":28}},{"id":627,"outV":23,"properties":{"weight":3}},{"id":4083,"outV":109,"properties":{"weight":4}},{"id":4470,"outV":202,"properties":{"weight":2}},{"id":5622,"outV":22,"properties":{"weight":3}},{"id":6391,"outV":65,"properties":{"weight":2}},{"id":6394,"outV":136,"properties":{"weight":1}},{"id":4349,"outV":62,"properties":{"weight":1}},{"id":126,"outV":97,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":3139,"inV":187,"properties":{"weight":402}},{"id":3140,"inV":39,"properties":{"weight":1}},{"id":314
 1,"inV":60,"properties":{"weight":1}}],"sungBy":[{"id":7100,"inV":340}],"writtenBy":[{"id":7099,"inV":339}]},"properties":{"name":[{"id":54,"value":"CHINA CAT SUNFLOWER"}],"songType":[{"id":56,"value":"original"}],"performances":[{"id":55,"value":554}]}}
+{"id":20,"label":"song","inE":{"followedBy":[{"id":5376,"outV":69,"properties":{"weight":1}},{"id":6592,"outV":116,"properties":{"weight":1}},{"id":2115,"outV":17,"properties":{"weight":2}},{"id":6084,"outV":72,"properties":{"weight":3}},{"id":4170,"outV":54,"properties":{"weight":4}},{"id":2955,"outV":78,"properties":{"weight":1}},{"id":1100,"outV":59,"properties":{"weight":5}},{"id":1164,"outV":26,"properties":{"weight":1}},{"id":2061,"outV":92,"properties":{"weight":1}},{"id":718,"outV":80,"properties":{"weight":2}},{"id":6543,"outV":55,"properties":{"weight":1}},{"id":6735,"outV":53,"properties":{"weight":1}},{"id":16,"outV":9,"properties":{"weight":1}},{"id":1809,"outV":199,"properties":{"weight":1}},{"id":3282,"outV":160,"properties":{"weight":1}},{"id":3609,"outV":56,"properties":{"weight":1}},{"id":1818,"outV":273,"properties":{"weight":1}},{"id":4894,"outV":100,"properties":{"weight":1}},{"id":479,"outV":98,"properties":{"weight":3}},{"id":2527,"outV":57,"properties":{"weig
 ht":3}},{"id":2027,"outV":180,"properties":{"weight":3}},{"id":3883,"outV":51,"properties":{"weight":4}},{"id":2287,"outV":25,"properties":{"weight":1}},{"id":4783,"outV":114,"properties":{"weight":1}},{"id":3442,"outV":58,"properties":{"weight":2}},{"id":4340,"outV":62,"properties":{"weight":1}},{"id":5300,"outV":170,"properties":{"weight":1}},{"id":5047,"outV":209,"properties":{"weight":1}},{"id":56,"outV":46,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":5699,"inV":51,"properties":{"weight":6}},{"id":5700,"inV":100,"properties":{"weight":4}},{"id":5701,"inV":19,"properties":{"weight":4}},{"id":5702,"inV":17,"properties":{"weight":2}},{"id":5703,"inV":56,"properties":{"weight":2}},{"id":5704,"inV":39,"properties":{"weight":1}},{"id":5705,"inV":52,"properties":{"weight":1}},{"id":5706,"inV":94,"properties":{"weight":1}},{"id":5707,"inV":58,"properties":{"weight":3}},{"id":5708,"inV":59,"properties":{"weight":3}},{"id":5709,"inV":14,"properties":{"weight":1}},{"id":5710,"i
 nV":55,"properties":{"weight":1}},{"id":5711,"inV":47,"properties":{"weight":1}},{"id":5712,"inV":27,"properties":{"weight":1}},{"id":5713,"inV":82,"properties":{"weight":1}},{"id":5714,"inV":83,"properties":{"weight":1}},{"id":5715,"inV":98,"properties":{"weight":2}},{"id":5716,"inV":18,"properties":{"weight":1}},{"id":5717,"inV":170,"properties":{"weight":2}},{"id":5718,"inV":180,"properties":{"weight":1}},{"id":5719,"inV":273,"properties":{"weight":2}},{"id":5720,"inV":199,"properties":{"weight":1}},{"id":5721,"inV":73,"properties":{"weight":1}},{"id":5722,"inV":197,"properties":{"weight":1}},{"id":5723,"inV":222,"properties":{"weight":1}},{"id":5724,"inV":104,"properties":{"weight":1}},{"id":5725,"inV":118,"properties":{"weight":1}},{"id":5726,"inV":215,"properties":{"weight":1}},{"id":5727,"inV":80,"properties":{"weight":1}},{"id":5728,"inV":173,"properties":{"weight":1}}],"sungBy":[{"id":7854,"inV":351}],"writtenBy":[{"id":7853,"inV":699}]},"properties":{"name":[{"id":57,"valu
 e":"THE RACE IS ON"}],"songType":[{"id":59,"value":"cover"}],"performances":[{"id":58,"value":59}]}}
+{"id":21,"label":"song","inE":{"followedBy":[{"id":5634,"outV":22,"properties":{"weight":3}},{"id":5384,"outV":69,"properties":{"weight":20}},{"id":777,"outV":122,"properties":{"weight":7}},{"id":907,"outV":174,"properties":{"weight":1}},{"id":3981,"outV":106,"properties":{"weight":1}},{"id":6413,"outV":134,"properties":{"weight":18}},{"id":3088,"outV":153,"properties":{"weight":1}},{"id":17,"outV":9,"properties":{"weight":1}},{"id":5137,"outV":125,"properties":{"weight":6}},{"id":4754,"outV":37,"properties":{"weight":6}},{"id":1427,"outV":83,"properties":{"weight":1}},{"id":3859,"outV":60,"properties":{"weight":12}},{"id":4888,"outV":100,"properties":{"weight":1}},{"id":6555,"outV":172,"properties":{"weight":2}},{"id":1949,"outV":148,"properties":{"weight":6}},{"id":3234,"outV":63,"properties":{"weight":1}},{"id":6179,"outV":36,"properties":{"weight":1}},{"id":932,"outV":91,"properties":{"weight":1}},{"id":2471,"outV":68,"properties":{"weight":1}},{"id":4519,"outV":105,"properties"
 :{"weight":1}},{"id":4775,"outV":114,"properties":{"weight":5}},{"id":1577,"outV":18,"properties":{"weight":1}},{"id":4650,"outV":154,"properties":{"weight":2}},{"id":5035,"outV":47,"properties":{"weight":1}},{"id":44,"outV":46,"properties":{"weight":2}},{"id":1711,"outV":82,"properties":{"weight":2}},{"id":816,"outV":171,"properties":{"weight":11}},{"id":5680,"outV":167,"properties":{"weight":1}},{"id":945,"outV":67,"properties":{"weight":2}},{"id":3633,"outV":24,"properties":{"weight":1}},{"id":6705,"outV":141,"properties":{"weight":2}},{"id":6450,"outV":187,"properties":{"weight":8}},{"id":6195,"outV":232,"properties":{"weight":2}},{"id":1845,"outV":94,"properties":{"weight":8}},{"id":3896,"outV":51,"properties":{"weight":1}},{"id":5305,"outV":170,"properties":{"weight":1}},{"id":6202,"outV":319,"properties":{"weight":3}},{"id":1981,"outV":281,"properties":{"weight":1}},{"id":4030,"outV":173,"properties":{"weight":2}},{"id":3263,"outV":160,"properties":{"weight":4}},{"id":1089,"o
 utV":59,"properties":{"weight":4}},{"id":2113,"outV":17,"properties":{"weight":1}},{"id":6722,"outV":53,"properties":{"weight":1}},{"id":2371,"outV":87,"properties":{"weight":2}},{"id":2500,"outV":90,"properties":{"weight":1}},{"id":5060,"outV":257,"properties":{"weight":1}},{"id":5957,"outV":50,"properties":{"weight":2}},{"id":6981,"outV":175,"properties":{"weight":5}},{"id":4166,"outV":54,"properties":{"weight":6}},{"id":713,"outV":80,"properties":{"weight":1}},{"id":3789,"outV":168,"properties":{"weight":1}},{"id":6605,"outV":127,"properties":{"weight":1}},{"id":5070,"outV":128,"properties":{"weight":1}},{"id":2512,"outV":57,"properties":{"weight":3}},{"id":2896,"outV":101,"properties":{"weight":1}},{"id":467,"outV":194,"properties":{"weight":1}},{"id":2645,"outV":137,"properties":{"weight":3}},{"id":470,"outV":195,"properties":{"weight":1}},{"id":1240,"outV":183,"properties":{"weight":1}},{"id":1368,"outV":130,"properties":{"weight":10}},{"id":1752,"outV":28,"properties":{"weigh
 t":8}},{"id":2904,"outV":118,"properties":{"weight":1}},{"id":6105,"outV":72,"properties":{"weight":1}},{"id":1242,"outV":27,"properties":{"weight":5}},{"id":5212,"outV":99,"properties":{"weight":1}},{"id":3038,"outV":14,"properties":{"weight":1}},{"id":2271,"outV":25,"properties":{"weight":4}},{"id":5855,"outV":61,"properties":{"weight":1}},{"id":2016,"outV":149,"properties":{"weight":8}},{"id":4451,"outV":113,"properties":{"weight":1}},{"id":484,"outV":98,"properties":{"weight":2}},{"id":2788,"outV":15,"properties":{"weight":1}},{"id":3433,"outV":58,"properties":{"weight":3}},{"id":5738,"outV":129,"properties":{"weight":2}},{"id":5866,"outV":96,"properties":{"weight":96}},{"id":4588,"outV":85,"properties":{"weight":5}},{"id":238,"outV":145,"properties":{"weight":1}},{"id":2670,"outV":13,"properties":{"weight":4}},{"id":4462,"outV":202,"properties":{"weight":2}},{"id":7022,"outV":89,"properties":{"weight":1}},{"id":5359,"outV":132,"properties":{"weight":2}},{"id":6768,"outV":39,"pr
 operties":{"weight":2}},{"id":2162,"outV":151,"properties":{"weight":1}},{"id":3190,"outV":104,"properties":{"weight":1}},{"id":2040,"outV":92,"properties":{"weight":2}},{"id":3705,"outV":3,"properties":{"weight":2}},{"id":3322,"outV":252,"properties":{"weight":1}},{"id":5114,"outV":4,"properties":{"weight":1}},{"id":4347,"outV":62,"properties":{"weight":3}},{"id":4859,"outV":35,"properties":{"weight":4}},{"id":1148,"outV":26,"properties":{"weight":3}},{"id":6268,"outV":49,"properties":{"weight":51}},{"id":637,"outV":23,"properties":{"weight":3}},{"id":382,"outV":74,"properties":{"weight":4}}]},"outE":{"followedBy":[{"id":6319,"inV":59,"properties":{"weight":3}},{"id":6320,"inV":96,"properties":{"weight":72}},{"id":6321,"inV":319,"properties":{"weight":24}},{"id":6322,"inV":148,"properties":{"weight":48}},{"id":6323,"inV":25,"properties":{"weight":7}},{"id":6324,"inV":27,"properties":{"weight":3}},{"id":6325,"inV":252,"properties":{"weight":2}},{"id":6326,"inV":145,"properties":{"we
 ight":2}},{"id":6327,"inV":89,"properties":{"weight":3}},{"id

<TRUNCATED>

[44/48] tinkerpop git commit: Merge branch 'pr-386'

Posted by sp...@apache.org.
Merge branch 'pr-386'

Conflicts:
	CHANGELOG.asciidoc
	gremlin-server/conf/gremlin-server-min.yaml


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/de139edd
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/de139edd
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/de139edd

Branch: refs/heads/TINKERPOP-1278
Commit: de139edd78e7ecc85ffebca836410b0f60e3bb38
Parents: e50f716 115eb3c
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Mon Aug 22 12:54:40 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Mon Aug 22 12:54:40 2016 -0400

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |   2 +
 data/grateful-dead-typed.json                   | 422 +++++-----
 data/grateful-dead-v2d0-typed.json              | 808 +++++++++++++++++++
 data/grateful-dead-v2d0.json                    | 808 +++++++++++++++++++
 data/grateful-dead.json                         | 422 +++++-----
 data/tinkerpop-classic-v2d0-typed.json          |   6 +
 data/tinkerpop-classic-v2d0.json                |   6 +
 data/tinkerpop-crew-v2d0-typed.json             |   6 +
 data/tinkerpop-crew-v2d0.json                   |   6 +
 data/tinkerpop-modern-v2d0-typed.json           |   6 +
 data/tinkerpop-modern-v2d0.json                 |   6 +
 docs/src/reference/the-graph.asciidoc           | 139 +++-
 .../upgrade/release-3.2.x-incubating.asciidoc   |  20 +
 .../traversal/util/DefaultTraversalMetrics.java |   8 +
 .../process/traversal/util/MutableMetrics.java  |  12 +
 .../structure/io/graphson/GraphSONMapper.java   | 167 +++-
 .../structure/io/graphson/GraphSONModule.java   | 232 +++++-
 .../structure/io/graphson/GraphSONReader.java   |   8 +-
 .../io/graphson/GraphSONSerializerProvider.java |  15 +-
 .../io/graphson/GraphSONSerializers.java        | 465 -----------
 .../io/graphson/GraphSONSerializersV1d0.java    | 465 +++++++++++
 .../io/graphson/GraphSONSerializersV2d0.java    | 580 +++++++++++++
 .../structure/io/graphson/GraphSONTokens.java   |   3 +
 .../io/graphson/GraphSONTypeDeserializer.java   | 229 ++++++
 .../io/graphson/GraphSONTypeIdResolver.java     | 108 +++
 .../graphson/GraphSONTypeResolverBuilder.java   |  65 ++
 .../io/graphson/GraphSONTypeSerializer.java     | 197 +++++
 .../structure/io/graphson/GraphSONUtil.java     |  37 +
 .../structure/io/graphson/GraphSONVersion.java  |   3 +-
 .../structure/io/graphson/GraphSONWriter.java   |  11 +-
 .../io/graphson/JavaTimeSerializers.java        | 326 --------
 .../io/graphson/JavaTimeSerializersV1d0.java    | 326 ++++++++
 .../io/graphson/JavaTimeSerializersV2d0.java    | 323 ++++++++
 .../io/graphson/JavaUtilSerializers.java        |  86 --
 .../io/graphson/JavaUtilSerializersV1d0.java    |  86 ++
 .../io/graphson/JavaUtilSerializersV2d0.java    |  87 ++
 .../structure/io/graphson/JsonParserConcat.java |  83 ++
 .../io/graphson/LegacyGraphSONReader.java       |   4 +-
 .../io/graphson/TinkerPopJacksonModule.java     |  48 ++
 .../io/graphson/ToStringGraphSONSerializer.java |  41 +
 .../gremlin/structure/io/graphson/TypeInfo.java |  29 +
 .../structure/util/detached/DetachedEdge.java   |  11 +-
 .../structure/util/detached/DetachedVertex.java |  10 +-
 .../util/star/DirectionalStarGraph.java         |  39 +
 .../star/StarGraphGraphSONDeserializer.java     |  91 +++
 .../util/star/StarGraphGraphSONSerializer.java  | 250 ------
 .../star/StarGraphGraphSONSerializerV1d0.java   | 178 ++++
 .../star/StarGraphGraphSONSerializerV2d0.java   | 165 ++++
 .../GraphSONMapperEmbeddedTypeTest.java         |  55 +-
 .../io/graphson/GraphSONMapperTest.java         |  17 +-
 ...aphSONMapperV2d0PartialEmbeddedTypeTest.java | 344 ++++++++
 .../AbstractGraphSONMessageSerializerV2d0.java  | 248 ++++++
 .../GraphSONMessageSerializerGremlinV2d0.java   |  69 ++
 .../ser/GraphSONMessageSerializerV2d0.java      | 125 +++
 .../tinkerpop/gremlin/driver/ser/SerTokens.java |   1 +
 ...raphSONMessageSerializerGremlinTestV1d0.java | 334 ++++++++
 ...raphSONMessageSerializerGremlinTestV2d0.java | 341 ++++++++
 ...raphSONMessageSerializerGremlinV1d0Test.java | 334 --------
 .../ser/GraphSONMessageSerializerV1d0Test.java  |   9 +-
 .../ser/GraphSONMessageSerializerV2d0Test.java  | 507 ++++++++++++
 gremlin-server/conf/gremlin-server-classic.yaml |   2 +-
 gremlin-server/conf/gremlin-server-neo4j.yaml   |   1 +
 .../conf/gremlin-server-rest-modern.yaml        |   1 +
 .../conf/gremlin-server-rest-secure.yaml        |   1 +
 gremlin-server/conf/gremlin-server-secure.yaml  |   1 +
 gremlin-server/conf/gremlin-server-spark.yaml   |   1 +
 gremlin-server/conf/gremlin-server.yaml         |   1 +
 gremlin-server/data/sample.kryo                 | Bin 2416053 -> 2436147 bytes
 .../server/GremlinServerHttpIntegrateTest.java  |  22 +
 .../remote/gremlin-server-integration.yaml      |   1 +
 .../server/gremlin-server-integration.yaml      |   1 +
 .../io/graphson/grateful-dead-typed.json        | 422 +++++-----
 .../io/graphson/grateful-dead-v2d0-typed.json   | 808 +++++++++++++++++++
 .../io/graphson/grateful-dead-v2d0.json         | 808 +++++++++++++++++++
 .../structure/io/graphson/grateful-dead.json    | 422 +++++-----
 .../tinkerpop-classic-normalized-v2d0.json      |   6 +
 .../graphson/tinkerpop-classic-v2d0-typed.json  |   6 +
 .../io/graphson/tinkerpop-classic-v2d0.json     |   6 +
 .../io/graphson/tinkerpop-crew-v2d0-typed.json  |   6 +
 .../io/graphson/tinkerpop-crew-v2d0.json        |   6 +
 .../tinkerpop-modern-normalized-v2d0.json       |   6 +
 .../graphson/tinkerpop-modern-v2d0-typed.json   |   6 +
 .../io/graphson/tinkerpop-modern-v2d0.json      |   6 +
 tinkergraph-gremlin/pom.xml                     |   4 +-
 .../structure/TinkerIoRegistryV2d0.java         | 213 +++++
 .../structure/IoDataGenerationTest.java         | 115 ++-
 .../TinkerGraphGraphSONSerializerV2d0Test.java  | 557 +++++++++++++
 87 files changed, 10841 insertions(+), 2417 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/de139edd/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --cc CHANGELOG.asciidoc
index 8117c12,f4515b7..5f49bea
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@@ -26,7 -26,8 +26,9 @@@ image::https://raw.githubusercontent.co
  TinkerPop 3.2.2 (NOT OFFICIALLY RELEASED YET)
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  
 +* Included GraphSON as a default serializer (in addition to Gryo, which was already present) in Gremlin Server if none are defined
+ * Introduced GraphSON 2.0.
+ * Deprecated `embedTypes` on the builder for `GraphSONMapper`.
  * Defaulted the `gremlinPool` setting in Gremlin Server to be zero, which will instructs it to use `Runtime.availableProcessors()` for that settings.
  * Changed scope of log4j dependencies so that they would only be used in tests and the binary distributions of Gremlin Console and Server.
  * Deprecated `Io.Builder.registry()` in favor of the newly introduced `Io.Builder.onMapper()`.


[03/48] tinkerpop git commit: TINKERPOP-1397 Add StarGraph bothE filtering test

Posted by sp...@apache.org.
TINKERPOP-1397 Add StarGraph bothE filtering test


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/7842c4e7
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/7842c4e7
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/7842c4e7

Branch: refs/heads/TINKERPOP-1278
Commit: 7842c4e7e2e3c2b33fc1bca7a8a80e165080bc59
Parents: fc79de8
Author: Dan LaRocque <da...@hopcount.org>
Authored: Wed Aug 10 18:59:54 2016 -0400
Committer: Dan LaRocque <da...@hopcount.org>
Committed: Wed Aug 10 19:21:56 2016 -0400

----------------------------------------------------------------------
 .../structure/util/star/StarGraphTest.java      | 34 ++++++++++++++++++++
 1 file changed, 34 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/7842c4e7/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/StarGraphTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/StarGraphTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/StarGraphTest.java
index 034afad..c49dab0 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/StarGraphTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/StarGraphTest.java
@@ -23,6 +23,8 @@ import org.apache.tinkerpop.gremlin.AbstractGremlinTest;
 import org.apache.tinkerpop.gremlin.FeatureRequirement;
 import org.apache.tinkerpop.gremlin.LoadGraphWith;
 import org.apache.tinkerpop.gremlin.TestHelper;
+import org.apache.tinkerpop.gremlin.process.computer.GraphFilter;
+import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
 import org.apache.tinkerpop.gremlin.structure.Direction;
 import org.apache.tinkerpop.gremlin.structure.Edge;
 import org.apache.tinkerpop.gremlin.structure.Graph;
@@ -246,6 +248,38 @@ public class StarGraphTest extends AbstractGremlinTest {
         TestHelper.validateEdgeEquality(e1, v1.edges(Direction.IN).next());
     }
 
+    @Test
+    @FeatureRequirement(featureClass = Graph.Features.VertexFeatures.class, feature = Graph.Features.VertexFeatures.FEATURE_ADD_VERTICES)
+    @FeatureRequirement(featureClass = Graph.Features.VertexFeatures.class, feature = Graph.Features.VertexFeatures.FEATURE_ADD_PROPERTY)
+    @FeatureRequirement(featureClass = Graph.Features.EdgeFeatures.class, feature = Graph.Features.EdgeFeatures.FEATURE_ADD_EDGES)
+    @FeatureRequirement(featureClass = Graph.Features.EdgeFeatures.class, feature = Graph.Features.EdgeFeatures.FEATURE_ADD_PROPERTY)
+    public void shouldHandleBothEdgesGraphFilterOnSelfLoop() {
+        assertEquals(0l, IteratorUtils.count(graph.vertices()));
+        assertEquals(0l, IteratorUtils.count(graph.edges()));
+
+        // these vertex label, edge label, and property names/values were copied from existing tests
+        StarGraph starGraph = StarGraph.open();
+        Vertex vertex = starGraph.addVertex(T.label, "person", "name", "furnace");
+        Edge edge = vertex.addEdge("self", vertex);
+        edge.property("acl", "private");
+
+        // traversing a self-loop should yield the edge once for inE/outE
+        // and the edge twice for bothE (one edge emitted two times, not two edges)
+        assertEquals(1L, IteratorUtils.count(starGraph.traversal().V().inE()));
+        assertEquals(1L, IteratorUtils.count(starGraph.traversal().V().outE()));
+        assertEquals(2L, IteratorUtils.count(starGraph.traversal().V().bothE()));
+        
+        // Try a filter that retains BOTH
+        GraphFilter graphFilter = new GraphFilter();
+        graphFilter.setEdgeFilter(__.bothE("self"));
+        starGraph = starGraph.applyGraphFilter(graphFilter).get();
+
+        // Retest traversal counts after filtering
+        assertEquals(1L, IteratorUtils.count(starGraph.traversal().V().inE()));
+        assertEquals(1L, IteratorUtils.count(starGraph.traversal().V().outE()));
+        assertEquals(2L, IteratorUtils.count(starGraph.traversal().V().bothE()));
+    }
+
 
     private Pair<StarGraph, Integer> serializeDeserialize(final StarGraph starGraph) {
         final ByteArrayOutputStream outputStream = new ByteArrayOutputStream();


[08/48] tinkerpop git commit: Merge remote-tracking branch 'origin/tp31'

Posted by sp...@apache.org.
Merge remote-tracking branch 'origin/tp31'


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/cc0c06f4
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/cc0c06f4
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/cc0c06f4

Branch: refs/heads/TINKERPOP-1278
Commit: cc0c06f41a9679b5fd29722100a2afc0195ab334
Parents: c250331 6d29394
Author: Jason Plurad <pl...@us.ibm.com>
Authored: Fri Aug 12 09:49:51 2016 -0400
Committer: Jason Plurad <pl...@us.ibm.com>
Committed: Fri Aug 12 09:49:51 2016 -0400

----------------------------------------------------------------------
 CHANGELOG.asciidoc                                |  1 +
 .../traversal/step/filter/TailGlobalStep.java     |  5 ++++-
 .../traversal/step/filter/GroovyTailTest.groovy   |  5 +++++
 .../process/traversal/step/filter/TailTest.java   | 18 ++++++++++++++++++
 4 files changed, 28 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/cc0c06f4/CHANGELOG.asciidoc
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/cc0c06f4/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/TailGlobalStep.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/cc0c06f4/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyTailTest.groovy
----------------------------------------------------------------------
diff --cc gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyTailTest.groovy
index 41a7f39,7fac07e..c562233
--- a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyTailTest.groovy
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyTailTest.groovy
@@@ -55,8 -65,13 +55,13 @@@ public abstract class GroovyTailTest 
          }
  
          @Override
+         public Traversal<Vertex, Long> get_g_V_repeatXin_outX_timesX3X_tailX7X_count() {
+             TraversalScriptHelper.compute("g.V.repeat(__.in().out()).times(3).tail(7).count()",g)
+         }
+ 
+         @Override
          public Traversal<Vertex, List<String>> get_g_V_asXaX_out_asXaX_out_asXaX_selectXaX_byXunfold_valuesXnameX_foldX_tailXlocal_2X() {
 -            TraversalScriptHelper.compute("g.V.as('a').out.as('a').out.as('a').select('a').by(unfold().values('name').fold).tail(local, 2)",g)
 +            new ScriptTraversal<>(g, "gremlin-groovy", "g.V.as('a').out.as('a').out.as('a').select('a').by(unfold().values('name').fold).tail(local, 2)")
          }
  
          @Override


[06/48] tinkerpop git commit: Merge remote-tracking branch 'origin/TINKERPOP-1151'

Posted by sp...@apache.org.
Merge remote-tracking branch 'origin/TINKERPOP-1151'


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/c2503317
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/c2503317
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/c2503317

Branch: refs/heads/TINKERPOP-1278
Commit: c25033175058aaec8973d9b7ad9bfe6f89e7b505
Parents: fc79de8 d0606ec
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Fri Aug 12 07:02:11 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Fri Aug 12 07:02:11 2016 -0400

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |  1 +
 .../upgrade/release-3.2.x-incubating.asciidoc   | 40 +++++++++
 .../main/resources/archetype-resources/pom.xml  |  5 ++
 gremlin-console/pom.xml                         | 11 +++
 gremlin-core/pom.xml                            |  8 +-
 gremlin-driver/pom.xml                          |  6 ++
 gremlin-groovy/pom.xml                          |  7 ++
 gremlin-server/pom.xml                          | 11 +++
 .../gremlin/util/Log4jRecordingAppender.java    | 66 +++++++++++++++
 .../util/Log4jRecordingAppenderTest.java        | 86 ++++++++++++++++++++
 gremlin-test/pom.xml                            |  6 ++
 .../gremlin/util/Log4jRecordingAppender.java    | 66 ---------------
 .../util/Log4jRecordingAppenderTest.java        | 80 ------------------
 pom.xml                                         |  5 ++
 14 files changed, 251 insertions(+), 147 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/c2503317/CHANGELOG.asciidoc
----------------------------------------------------------------------


[13/48] tinkerpop git commit: overroad tp31 GroovyTailTest edits on master. CTR.

Posted by sp...@apache.org.
overroad tp31 GroovyTailTest edits on master. CTR.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/1799fa46
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/1799fa46
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/1799fa46

Branch: refs/heads/TINKERPOP-1278
Commit: 1799fa461c5cbfc8089e7553d33fd02a5d98307e
Parents: 9f74b71
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Fri Aug 12 08:22:57 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Fri Aug 12 08:22:57 2016 -0600

----------------------------------------------------------------------
 .../gremlin/process/traversal/step/filter/GroovyTailTest.groovy    | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/1799fa46/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyTailTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyTailTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyTailTest.groovy
index c562233..4bc2321 100644
--- a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyTailTest.groovy
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyTailTest.groovy
@@ -56,7 +56,7 @@ public abstract class GroovyTailTest {
 
         @Override
         public Traversal<Vertex, Long> get_g_V_repeatXin_outX_timesX3X_tailX7X_count() {
-            TraversalScriptHelper.compute("g.V.repeat(__.in().out()).times(3).tail(7).count()",g)
+            new ScriptTraversal<>(g, "gremlin-groovy", "g.V.repeat(__.in().out()).times(3).tail(7).count()")
         }
 
         @Override


[31/48] tinkerpop git commit: TINKERPOP-1274: GraphSON 2.0.

Posted by sp...@apache.org.
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerGremlinV2d0.java
----------------------------------------------------------------------
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerGremlinV2d0.java b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerGremlinV2d0.java
new file mode 100644
index 0000000..a2d29fc
--- /dev/null
+++ b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerGremlinV2d0.java
@@ -0,0 +1,69 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.driver.ser;
+
+import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONMapper;
+import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONVersion;
+import org.apache.tinkerpop.gremlin.structure.io.graphson.TypeInfo;
+
+import java.nio.ByteBuffer;
+
+/**
+ * Serialize results to JSON with version 2.0.x schema.
+ *
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ */
+public final class GraphSONMessageSerializerGremlinV2d0 extends AbstractGraphSONMessageSerializerV2d0 {
+
+    private static final String MIME_TYPE = SerTokens.MIME_GRAPHSON_V2D0;
+
+    private static byte[] header;
+
+    static {
+        final ByteBuffer buffer = ByteBuffer.allocate(MIME_TYPE.length() + 1);
+        buffer.put((byte) MIME_TYPE.length());
+        buffer.put(MIME_TYPE.getBytes());
+        header = buffer.array();
+    }
+
+    public GraphSONMessageSerializerGremlinV2d0() {
+        super();
+    }
+
+    public GraphSONMessageSerializerGremlinV2d0(final GraphSONMapper mapper) {
+        super(mapper);
+    }
+
+    @Override
+    public String[] mimeTypesSupported() {
+        return new String[]{MIME_TYPE};
+    }
+
+    @Override
+    byte[] obtainHeader() {
+        return header;
+    }
+
+    @Override
+    GraphSONMapper.Builder configureBuilder(final GraphSONMapper.Builder builder) {
+        return builder.version(GraphSONVersion.V2_0)
+                .addCustomModule(new GremlinServerModule())
+                .typeInfo(TypeInfo.PARTIAL_TYPES);
+    }
+}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerV2d0.java
----------------------------------------------------------------------
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerV2d0.java b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerV2d0.java
new file mode 100644
index 0000000..2e8c96e
--- /dev/null
+++ b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerV2d0.java
@@ -0,0 +1,125 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.driver.ser;
+
+import org.apache.tinkerpop.gremlin.driver.message.RequestMessage;
+import org.apache.tinkerpop.gremlin.driver.message.ResponseMessage;
+import org.apache.tinkerpop.gremlin.driver.message.ResponseStatusCode;
+import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONMapper;
+import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONVersion;
+import org.apache.tinkerpop.gremlin.structure.io.graphson.TypeInfo;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.nio.ByteBuffer;
+import java.util.Map;
+import java.util.UUID;
+
+/**
+ * Serialize results to JSON with version 2.0.x schema.
+ *
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ */
+public final class GraphSONMessageSerializerV2d0 extends AbstractGraphSONMessageSerializerV2d0 implements MessageTextSerializer {
+    private static final Logger logger = LoggerFactory.getLogger(GraphSONMessageSerializerV2d0.class);
+    private static final String MIME_TYPE = SerTokens.MIME_JSON;
+
+    private static byte[] header;
+
+    static {
+        final ByteBuffer buffer = ByteBuffer.allocate(MIME_TYPE.length() + 1);
+        buffer.put((byte) MIME_TYPE.length());
+        buffer.put(MIME_TYPE.getBytes());
+        header = buffer.array();
+    }
+
+    public GraphSONMessageSerializerV2d0() {
+        super();
+    }
+
+    public GraphSONMessageSerializerV2d0(final GraphSONMapper mapper) {
+        super(mapper);
+    }
+
+    @Override
+    public String[] mimeTypesSupported() {
+        return new String[]{MIME_TYPE};
+    }
+
+    @Override
+    GraphSONMapper.Builder configureBuilder(final GraphSONMapper.Builder builder) {
+        return builder.version(GraphSONVersion.V2_0)
+                .addCustomModule(new GremlinServerModule())
+                .typeInfo(TypeInfo.PARTIAL_TYPES);
+    }
+
+    @Override
+    byte[] obtainHeader() {
+        return header;
+    }
+
+    @Override
+    public ResponseMessage deserializeResponse(final String msg) throws SerializationException {
+        try {
+            final Map<String, Object> responseData = mapper.readValue(msg, mapTypeReference);
+            final Map<String, Object> status = (Map<String, Object>) responseData.get(SerTokens.TOKEN_STATUS);
+            final Map<String, Object> result = (Map<String, Object>) responseData.get(SerTokens.TOKEN_RESULT);
+            return ResponseMessage.build(UUID.fromString(responseData.get(SerTokens.TOKEN_REQUEST).toString()))
+                    .code(ResponseStatusCode.getFromValue((Integer) status.get(SerTokens.TOKEN_CODE)))
+                    .statusMessage(status.get(SerTokens.TOKEN_MESSAGE).toString())
+                    .statusAttributes((Map<String, Object>) status.get(SerTokens.TOKEN_ATTRIBUTES))
+                    .result(result.get(SerTokens.TOKEN_DATA))
+                    .responseMetaData((Map<String, Object>) result.get(SerTokens.TOKEN_META))
+                    .create();
+        } catch (Exception ex) {
+            logger.warn("Response [{}] could not be deserialized by {}.", msg, AbstractGraphSONMessageSerializerV2d0.class.getName());
+            throw new SerializationException(ex);
+        }
+    }
+
+    @Override
+    public String serializeResponseAsString(final ResponseMessage responseMessage) throws SerializationException {
+        try {
+            return mapper.writeValueAsString(responseMessage);
+        } catch (Exception ex) {
+            logger.warn("Response [{}] could not be serialized by {}.", responseMessage.toString(), AbstractGraphSONMessageSerializerV2d0.class.getName());
+            throw new SerializationException(ex);
+        }
+    }
+
+    @Override
+    public RequestMessage deserializeRequest(final String msg) throws SerializationException {
+        try {
+            return mapper.readValue(msg, RequestMessage.class);
+        } catch (Exception ex) {
+            logger.warn("Request [{}] could not be deserialized by {}.", msg, AbstractGraphSONMessageSerializerV2d0.class.getName());
+            throw new SerializationException(ex);
+        }
+    }
+
+    @Override
+    public String serializeRequestAsString(final RequestMessage requestMessage) throws SerializationException {
+        try {
+            return mapper.writeValueAsString(requestMessage);
+        } catch (Exception ex) {
+            logger.warn("Request [{}] could not be serialized by {}.", requestMessage.toString(), AbstractGraphSONMessageSerializerV2d0.class.getName());
+            throw new SerializationException(ex);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/SerTokens.java
----------------------------------------------------------------------
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/SerTokens.java b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/SerTokens.java
index c857116..ecda014 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/SerTokens.java
+++ b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/SerTokens.java
@@ -38,6 +38,7 @@ public final  class SerTokens {
 
     public static final String MIME_JSON = "application/json";
     public static final String MIME_GRAPHSON_V1D0 = "application/vnd.gremlin-v1.0+json";
+    public static final String MIME_GRAPHSON_V2D0 = "application/vnd.gremlin-v2.0+json";
     public static final String MIME_GRYO_V1D0 = "application/vnd.gremlin-v1.0+gryo";
     public static final String MIME_GRYO_LITE_V1D0 = "application/vnd.gremlin-v1.0+gryo-lite";
 }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerGremlinTestV1d0.java
----------------------------------------------------------------------
diff --git a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerGremlinTestV1d0.java b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerGremlinTestV1d0.java
new file mode 100644
index 0000000..95907f9
--- /dev/null
+++ b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerGremlinTestV1d0.java
@@ -0,0 +1,334 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.driver.ser;
+
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.ByteBufAllocator;
+import io.netty.buffer.UnpooledByteBufAllocator;
+import org.apache.tinkerpop.gremlin.driver.MessageSerializer;
+import org.apache.tinkerpop.gremlin.driver.message.ResponseMessage;
+import org.apache.tinkerpop.gremlin.driver.message.ResponseStatusCode;
+import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
+import org.apache.tinkerpop.gremlin.structure.Edge;
+import org.apache.tinkerpop.gremlin.structure.Graph;
+import org.apache.tinkerpop.gremlin.structure.Property;
+import org.apache.tinkerpop.gremlin.structure.Vertex;
+import org.apache.tinkerpop.gremlin.structure.VertexProperty;
+import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONTokens;
+import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerFactory;
+import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraph;
+import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
+import org.apache.tinkerpop.shaded.jackson.databind.util.StdDateFormat;
+import org.junit.Test;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.fail;
+
+/**
+ * Serializer tests that cover lossy serialization/deserialization methods.
+ *
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ */
+public class GraphSONMessageSerializerGremlinTestV1d0 {
+
+    private UUID requestId = UUID.fromString("6457272A-4018-4538-B9AE-08DD5DDC0AA1");
+    private ResponseMessage.Builder responseMessageBuilder = ResponseMessage.build(requestId);
+    private static ByteBufAllocator allocator = UnpooledByteBufAllocator.DEFAULT;
+
+    public MessageSerializer serializer = new GraphSONMessageSerializerGremlinV1d0();
+
+    @Test
+    public void shouldSerializeIterable() throws Exception {
+        final ArrayList<Integer> list = new ArrayList<>();
+        list.add(1);
+        list.add(100);
+
+        final ResponseMessage response = convert(list);
+        assertCommon(response);
+
+        final List<Integer> deserializedFunList = (List<Integer>) response.getResult().getData();
+        assertEquals(2, deserializedFunList.size());
+        assertEquals(new Integer(1), deserializedFunList.get(0));
+        assertEquals(new Integer(100), deserializedFunList.get(1));
+    }
+
+    @Test
+    public void shouldSerializeIterableWithNull() throws Exception {
+        final ArrayList<Integer> list = new ArrayList<>();
+        list.add(1);
+        list.add(null);
+        list.add(100);
+
+        final ResponseMessage response = convert(list);
+        assertCommon(response);
+
+        final List<Integer> deserializedFunList = (List<Integer>) response.getResult().getData();
+        assertEquals(3, deserializedFunList.size());
+        assertEquals(new Integer(1), deserializedFunList.get(0));
+        assertNull(deserializedFunList.get(1));
+        assertEquals(new Integer(100), deserializedFunList.get(2));
+    }
+
+    @Test
+    public void shouldSerializeMap() throws Exception {
+        final Map<String, Object> map = new HashMap<>();
+        final Map<String, String> innerMap = new HashMap<>();
+        innerMap.put("a", "b");
+
+        map.put("x", 1);
+        map.put("y", "some");
+        map.put("z", innerMap);
+
+        final ResponseMessage response = convert(map);
+        assertCommon(response);
+
+        final Map<String, Object> deserializedMap = (Map<String, Object>) response.getResult().getData();
+        assertEquals(3, deserializedMap.size());
+        assertEquals(1, deserializedMap.get("x"));
+        assertEquals("some", deserializedMap.get("y"));
+
+        final Map<String, String> deserializedInnerMap = (Map<String, String>) deserializedMap.get("z");
+        assertEquals(1, deserializedInnerMap.size());
+        assertEquals("b", deserializedInnerMap.get("a"));
+    }
+
+    @Test
+    public void shouldSerializeMapEntries() throws Exception {
+        final Graph graph = TinkerGraph.open();
+        final Vertex v1 = graph.addVertex();
+        final Date d = new Date();
+
+        final Map<Object, Object> map = new HashMap<>();
+        map.put("x", 1);
+        map.put(v1, 100);
+        map.put(d, "test");
+
+        final ResponseMessage response = convert(IteratorUtils.asList(map.entrySet()));
+        assertCommon(response);
+
+        final List<Map<String, Object>> deserializedEntries = (List<Map<String, Object>>) response.getResult().getData();
+        assertEquals(3, deserializedEntries.size());
+        deserializedEntries.forEach(e -> {
+            if (e.containsKey("x"))
+                assertEquals(1, e.get("x"));
+            else if (e.containsKey(v1.id().toString()))
+                assertEquals(100, e.get(v1.id().toString()));
+            else if (e.containsKey(StdDateFormat.instance.format(d)))
+                assertEquals("test", e.get(StdDateFormat.instance.format(d)));
+            else
+                fail("Map entries contains a key that is not part of what was serialized");
+        });
+    }
+
+    @Test
+    public void shouldSerializeEdge() throws Exception {
+        final Graph graph = TinkerGraph.open();
+        final Vertex v1 = graph.addVertex();
+        final Vertex v2 = graph.addVertex();
+        final Edge e = v1.addEdge("test", v2);
+        e.property("abc", 123);
+
+        final Iterable<Edge> iterable = IteratorUtils.list(graph.edges());
+
+        final ResponseMessage response = convert(iterable);
+        assertCommon(response);
+
+        final List<Map<String, Object>> edgeList = (List<Map<String, Object>>) response.getResult().getData();
+        assertEquals(1, edgeList.size());
+
+        final Map<String, Object> deserializedEdge = edgeList.get(0);
+        assertEquals(e.id(), deserializedEdge.get(GraphSONTokens.ID));
+        assertEquals(v1.id(), deserializedEdge.get(GraphSONTokens.OUT));
+        assertEquals(v2.id(), deserializedEdge.get(GraphSONTokens.IN));
+        assertEquals(v1.label(), deserializedEdge.get(GraphSONTokens.OUT_LABEL));
+        assertEquals(v2.label(), deserializedEdge.get(GraphSONTokens.IN_LABEL));
+        assertEquals(e.label(), deserializedEdge.get(GraphSONTokens.LABEL));
+        assertEquals(GraphSONTokens.EDGE, deserializedEdge.get(GraphSONTokens.TYPE));
+
+        final Map<String, Object> properties = (Map<String, Object>) deserializedEdge.get(GraphSONTokens.PROPERTIES);
+        assertNotNull(properties);
+        assertEquals(123, properties.get("abc"));
+
+    }
+
+    @Test
+    public void shouldSerializeEdgeProperty() throws Exception {
+        final Graph graph = TinkerGraph.open();
+        final Vertex v1 = graph.addVertex();
+        final Vertex v2 = graph.addVertex();
+        final Edge e = v1.addEdge("test", v2);
+        e.property("abc", 123);
+
+        final Iterable<Property<Object>> iterable = IteratorUtils.list(e.properties("abc"));
+        final ResponseMessage response = convert(iterable);
+        assertCommon(response);
+
+        final List<Map<String, Object>> propertyList = (List<Map<String, Object>>) response.getResult().getData();
+        assertEquals(1, propertyList.size());
+        assertEquals(123, propertyList.get(0).get("value"));
+    }
+
+    @Test
+    public void shouldSerializeVertexWithEmbeddedMap() throws Exception {
+        final Graph graph = TinkerGraph.open();
+        final Vertex v = graph.addVertex();
+        final Map<String, Object> map = new HashMap<>();
+        map.put("x", 500);
+        map.put("y", "some");
+
+        final ArrayList<Object> friends = new ArrayList<>();
+        friends.add("x");
+        friends.add(5);
+        friends.add(map);
+
+        v.property(VertexProperty.Cardinality.single, "friends", friends);
+
+        final List list = IteratorUtils.list(graph.vertices());
+
+        final ResponseMessage response = convert(list);
+        assertCommon(response);
+
+        final List<Map<String, Object>> vertexList = (List<Map<String, Object>>) response.getResult().getData();
+        assertEquals(1, vertexList.size());
+
+        final Map<String, Object> deserializedVertex = vertexList.get(0);
+        assertEquals(v.id(), deserializedVertex.get(GraphSONTokens.ID));
+        assertEquals(Vertex.DEFAULT_LABEL, deserializedVertex.get(GraphSONTokens.LABEL));
+
+        final Map<String, Object> properties = ((Map<String, Object>) deserializedVertex.get(GraphSONTokens.PROPERTIES));
+        assertEquals(1, properties.size());
+
+        final List<Map<String,Object>> friendsProperties = (List<Map<String,Object>>) properties.get("friends");
+        assertEquals(1, friendsProperties.size());
+
+        final List<Object> deserializedInnerList = (List<Object>) friendsProperties.get(0).get(GraphSONTokens.VALUE);
+        assertEquals(3, deserializedInnerList.size());
+        assertEquals("x", deserializedInnerList.get(0));
+        assertEquals(5, deserializedInnerList.get(1));
+
+        final Map<String, Object> deserializedInnerInnerMap = (Map<String, Object>) deserializedInnerList.get(2);
+        assertEquals(2, deserializedInnerInnerMap.size());
+        assertEquals(500, deserializedInnerInnerMap.get("x"));
+        assertEquals("some", deserializedInnerInnerMap.get("y"));
+    }
+
+    @Test
+    public void shouldSerializeToJsonMapWithElementForKey() throws Exception {
+        final TinkerGraph graph = TinkerFactory.createClassic();
+        final GraphTraversalSource g = graph.traversal();
+        final Map<Vertex, Integer> map = new HashMap<>();
+        map.put(g.V().has("name", "marko").next(), 1000);
+
+        final ResponseMessage response = convert(map);
+        assertCommon(response);
+
+        final Map<String, Integer> deserializedMap = (Map<String, Integer>) response.getResult().getData();
+        assertEquals(1, deserializedMap.size());
+
+        // with no embedded types the key (which is a vertex) simply serializes out to an id
+        // {"result":{"1":1000},"code":200,"requestId":"2d62161b-9544-4f39-af44-62ec49f9a595","type":0}
+        assertEquals(new Integer(1000), deserializedMap.get("1"));
+    }
+
+    @Test
+    public void shouldSerializeToTreeJson() throws Exception {
+        final TinkerGraph graph = TinkerFactory.createClassic();
+        final GraphTraversalSource g = graph.traversal();
+        final Map t = g.V(1).out().properties("name").tree().next();
+
+        final ResponseMessage response = convert(t);
+        assertCommon(response);
+
+        final Map<String, Map<String, Map>> deserializedMap = (Map<String, Map<String, Map>>) response.getResult().getData();
+
+        assertEquals(1, deserializedMap.size());
+
+        //check the first object and it's properties
+        Map<String,Object> vertex = deserializedMap.get("1").get("key");
+        Map<String,List<Map>> vertexProperties = (Map<String, List<Map>>)vertex.get("properties");
+        assertEquals(1, (int)vertex.get("id"));
+        assertEquals("marko", vertexProperties.get("name").get(0).get("value"));
+
+        //check objects tree structure
+        //check Vertex property
+        Map<String, Map<String, Map>> subTreeMap =  deserializedMap.get("1").get("value");
+        Map<String, Map<String, Map>> subTreeMap2 = subTreeMap.get("2").get("value");
+        Map<String, String> vertexPropertiesDeep = subTreeMap2.get("3").get("key");
+        assertEquals("vadas", vertexPropertiesDeep.get("value"));
+        assertEquals("name", vertexPropertiesDeep.get("label"));
+
+        // check subitem
+        Map<String,Object> vertex2 = subTreeMap.get("3").get("key");
+        Map<String,List<Map>> vertexProperties2 = (Map<String, List<Map>>)vertex2.get("properties");
+
+        assertEquals("lop", vertexProperties2.get("name").get(0).get("value"));
+    }
+
+    @Test
+    public void shouldSerializeFullResponseMessage() throws Exception {
+        final UUID id = UUID.randomUUID();
+
+        final Map<String, Object> metaData = new HashMap<>();
+        metaData.put("test", "this");
+        metaData.put("one", 1);
+
+        final Map<String, Object> attributes = new HashMap<>();
+        attributes.put("test", "that");
+        attributes.put("two", 2);
+
+        final ResponseMessage response = ResponseMessage.build(id)
+                .responseMetaData(metaData)
+                .code(ResponseStatusCode.SUCCESS)
+                .result("some-result")
+                .statusAttributes(attributes)
+                .statusMessage("worked")
+                .create();
+
+        final ByteBuf bb = serializer.serializeResponseAsBinary(response, allocator);
+        final ResponseMessage deserialized = serializer.deserializeResponse(bb);
+
+        assertEquals(id, deserialized.getRequestId());
+        assertEquals("this", deserialized.getResult().getMeta().get("test"));
+        assertEquals(1, deserialized.getResult().getMeta().get("one"));
+        assertEquals("some-result", deserialized.getResult().getData());
+        assertEquals("that", deserialized.getStatus().getAttributes().get("test"));
+        assertEquals(2, deserialized.getStatus().getAttributes().get("two"));
+        assertEquals(ResponseStatusCode.SUCCESS.getValue(), deserialized.getStatus().getCode().getValue());
+        assertEquals("worked", deserialized.getStatus().getMessage());
+    }
+    
+    private void assertCommon(final ResponseMessage response) {
+        assertEquals(requestId, response.getRequestId());
+        assertEquals(ResponseStatusCode.SUCCESS, response.getStatus().getCode());
+    }
+
+    private ResponseMessage convert(final Object toSerialize) throws SerializationException {
+        final ByteBuf bb = serializer.serializeResponseAsBinary(responseMessageBuilder.result(toSerialize).create(), allocator);
+        return serializer.deserializeResponse(bb);
+    }
+}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerGremlinTestV2d0.java
----------------------------------------------------------------------
diff --git a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerGremlinTestV2d0.java b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerGremlinTestV2d0.java
new file mode 100644
index 0000000..a7f8389
--- /dev/null
+++ b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerGremlinTestV2d0.java
@@ -0,0 +1,341 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.driver.ser;
+
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.ByteBufAllocator;
+import io.netty.buffer.UnpooledByteBufAllocator;
+import org.apache.tinkerpop.gremlin.driver.MessageSerializer;
+import org.apache.tinkerpop.gremlin.driver.message.ResponseMessage;
+import org.apache.tinkerpop.gremlin.driver.message.ResponseStatusCode;
+import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree;
+import org.apache.tinkerpop.gremlin.structure.Edge;
+import org.apache.tinkerpop.gremlin.structure.Graph;
+import org.apache.tinkerpop.gremlin.structure.Property;
+import org.apache.tinkerpop.gremlin.structure.Vertex;
+import org.apache.tinkerpop.gremlin.structure.VertexProperty;
+import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerFactory;
+import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraph;
+import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
+import org.apache.tinkerpop.shaded.jackson.databind.util.StdDateFormat;
+import org.junit.Test;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.fail;
+
+/**
+ * Serializer tests that cover non-lossy serialization/deserialization methods.
+ *
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ */
+public class GraphSONMessageSerializerGremlinTestV2d0 {
+
+    private UUID requestId = UUID.fromString("6457272A-4018-4538-B9AE-08DD5DDC0AA1");
+    private ResponseMessage.Builder responseMessageBuilder = ResponseMessage.build(requestId);
+    private static ByteBufAllocator allocator = UnpooledByteBufAllocator.DEFAULT;
+
+    public MessageSerializer serializer = new GraphSONMessageSerializerGremlinV2d0();
+
+    @Test
+    public void shouldSerializeIterable() throws Exception {
+        final ArrayList<Integer> list = new ArrayList<>();
+        list.add(1);
+        list.add(100);
+
+        final ResponseMessage response = convert(list);
+        assertCommon(response);
+
+        final List<Integer> deserializedFunList = (List<Integer>) response.getResult().getData();
+        assertEquals(2, deserializedFunList.size());
+        assertEquals(new Integer(1), deserializedFunList.get(0));
+        assertEquals(new Integer(100), deserializedFunList.get(1));
+    }
+
+    @Test
+    public void shouldSerializeIterableWithNull() throws Exception {
+        final ArrayList<Integer> list = new ArrayList<>();
+        list.add(1);
+        list.add(null);
+        list.add(100);
+
+        final ResponseMessage response = convert(list);
+        assertCommon(response);
+
+        final List<Integer> deserializedFunList = (List<Integer>) response.getResult().getData();
+        assertEquals(3, deserializedFunList.size());
+        assertEquals(new Integer(1), deserializedFunList.get(0));
+        assertNull(deserializedFunList.get(1));
+        assertEquals(new Integer(100), deserializedFunList.get(2));
+    }
+
+    @Test
+    public void shouldSerializeMap() throws Exception {
+        final Map<String, Object> map = new HashMap<>();
+        final Map<String, String> innerMap = new HashMap<>();
+        innerMap.put("a", "b");
+
+        map.put("x", 1);
+        map.put("y", "some");
+        map.put("z", innerMap);
+
+        final ResponseMessage response = convert(map);
+        assertCommon(response);
+
+        final Map<String, Object> deserializedMap = (Map<String, Object>) response.getResult().getData();
+        assertEquals(3, deserializedMap.size());
+        assertEquals(1, deserializedMap.get("x"));
+        assertEquals("some", deserializedMap.get("y"));
+
+        final Map<String, String> deserializedInnerMap = (Map<String, String>) deserializedMap.get("z");
+        assertEquals(1, deserializedInnerMap.size());
+        assertEquals("b", deserializedInnerMap.get("a"));
+    }
+
+    @Test
+    public void shouldSerializeMapEntries() throws Exception {
+        final Graph graph = TinkerGraph.open();
+        final Vertex v1 = graph.addVertex();
+        final Date d = new Date();
+
+        final Map<Object, Object> map = new HashMap<>();
+        map.put("x", 1);
+        map.put(v1, 100);
+        map.put(d, "test");
+
+        final ResponseMessage response = convert(IteratorUtils.asList(map.entrySet()));
+        assertCommon(response);
+
+        final List<Map<String, Object>> deserializedEntries = (List<Map<String, Object>>) response.getResult().getData();
+        assertEquals(3, deserializedEntries.size());
+        deserializedEntries.forEach(e -> {
+            if (e.containsKey("x"))
+                assertEquals(1, e.get("x"));
+            else if (e.containsKey(v1.id().toString()))
+                assertEquals(100, e.get(v1.id().toString()));
+            else if (e.containsKey(StdDateFormat.instance.format(d)))
+                assertEquals("test", e.get(StdDateFormat.instance.format(d)));
+            else
+                fail("Map entries contains a key that is not part of what was serialized");
+        });
+    }
+
+    @Test
+    public void shouldSerializeEdge() throws Exception {
+        final Graph graph = TinkerGraph.open();
+        final Vertex v1 = graph.addVertex();
+        final Vertex v2 = graph.addVertex();
+        final Edge e = v1.addEdge("test", v2);
+        e.property("abc", 123);
+
+        final Iterable<Edge> iterable = IteratorUtils.list(graph.edges());
+
+        final ResponseMessage response = convert(iterable);
+        assertCommon(response);
+
+        final List<Edge> edgeList = (List<Edge>) response.getResult().getData();
+        assertEquals(1, edgeList.size());
+
+        final Edge deserializedEdge = edgeList.get(0);
+        assertEquals(e.id(), deserializedEdge.id());
+        assertEquals(v1.id(), deserializedEdge.outVertex().id());
+        assertEquals(v2.id(), deserializedEdge.inVertex().id());
+        assertEquals(v1.label(), deserializedEdge.outVertex().label());
+        assertEquals(v2.label(), deserializedEdge.inVertex().label());
+        assertEquals(e.label(), deserializedEdge.label());
+
+        final List<Property> properties = new ArrayList<>();
+        deserializedEdge.properties().forEachRemaining(properties::add);
+        assertEquals(1, properties.size());
+
+        assertNotNull(properties);
+        assertEquals("abc", properties.get(0).key());
+        assertEquals(123, properties.get(0).value());
+
+    }
+
+    @Test
+    public void shouldSerializeEdgeProperty() throws Exception {
+        final Graph graph = TinkerGraph.open();
+        final Vertex v1 = graph.addVertex();
+        final Vertex v2 = graph.addVertex();
+        final Edge e = v1.addEdge("test", v2);
+        e.property("abc", 123);
+
+        final Iterable<Property<Object>> iterable = IteratorUtils.list(e.properties("abc"));
+        final ResponseMessage response = convert(iterable);
+        assertCommon(response);
+
+        final List<Property> propertyList = (List<Property>) response.getResult().getData();
+        assertEquals(1, propertyList.size());
+        assertEquals(123, propertyList.get(0).value());
+    }
+
+    @Test
+    public void shouldSerializeVertexWithEmbeddedMap() throws Exception {
+        final Graph graph = TinkerGraph.open();
+        final Vertex v = graph.addVertex();
+        final Map<String, Object> map = new HashMap<>();
+        map.put("x", 500);
+        map.put("y", "some");
+
+        final ArrayList<Object> friends = new ArrayList<>();
+        friends.add("x");
+        friends.add(5);
+        friends.add(map);
+
+        v.property(VertexProperty.Cardinality.single, "friends", friends);
+
+        final List list = IteratorUtils.list(graph.vertices());
+
+        final ResponseMessage response = convert(list);
+        assertCommon(response);
+
+        final List<Vertex> vertexList = (List<Vertex>) response.getResult().getData();
+        assertEquals(1, vertexList.size());
+
+        final Vertex deserializedVertex = vertexList.get(0);
+        assertEquals(v.id(), deserializedVertex.id());
+        assertEquals(Vertex.DEFAULT_LABEL, deserializedVertex.label());
+
+        final List<VertexProperty> properties = new ArrayList<>();
+        deserializedVertex.properties().forEachRemaining(properties::add);
+        assertEquals(1, properties.size());
+
+        final VertexProperty friendsProperty = properties.get(0);
+        final List<Object> deserializedInnerList = (List<Object>) friendsProperty.value();
+
+        assertEquals(3, deserializedInnerList.size());
+        assertEquals("x", deserializedInnerList.get(0));
+        assertEquals(5, deserializedInnerList.get(1));
+
+        final Map<String, Object> deserializedInnerInnerMap = (Map<String, Object>) deserializedInnerList.get(2);
+        assertEquals(2, deserializedInnerInnerMap.size());
+        assertEquals(500, deserializedInnerInnerMap.get("x"));
+        assertEquals("some", deserializedInnerInnerMap.get("y"));
+    }
+
+    @Test
+    public void shouldSerializeToJsonMapWithElementForKey() throws Exception {
+        final TinkerGraph graph = TinkerFactory.createClassic();
+        final GraphTraversalSource g = graph.traversal();
+        final Map<Vertex, Integer> map = new HashMap<>();
+        map.put(g.V().has("name", "marko").next(), 1000);
+
+        final ResponseMessage response = convert(map);
+        assertCommon(response);
+
+        final Map<String, Integer> deserializedMap = (Map<String, Integer>) response.getResult().getData();
+        assertEquals(1, deserializedMap.size());
+
+        // with no embedded types the key (which is a vertex) simply serializes out to an id
+        // {"result":{"1":1000},"code":200,"requestId":"2d62161b-9544-4f39-af44-62ec49f9a595","type":0}
+        assertEquals(new Integer(1000), deserializedMap.get("1"));
+    }
+
+    @Test
+    public void shouldSerializeToTreeJson() throws Exception {
+        final TinkerGraph graph = TinkerFactory.createClassic();
+        final GraphTraversalSource g = graph.traversal();
+        final Map t = g.V(1).out().properties("name").tree().next();
+
+        final ResponseMessage response = convert(t);
+        assertCommon(response);
+
+        final Tree deserializedTree = (Tree)response.getResult().getData();
+
+        //check the first object and its key's properties
+        assertEquals(1, deserializedTree.size());
+        Vertex v = ((Vertex) deserializedTree.keySet().iterator().next());
+        assertEquals(1, v.id());
+        assertEquals("marko", v.property("name").value());
+
+        Tree firstTree = (Tree)deserializedTree.get(v);
+        assertEquals(3, firstTree.size());
+        Iterator<Vertex> vertexKeys = firstTree.keySet().iterator();
+
+        Tree t2 = (Tree)firstTree.get(vertexKeys.next());
+        VertexProperty vp = (VertexProperty)t2.keySet().iterator().next();
+        assertEquals(3, vp.id());
+        assertEquals("vadas", vp.value());
+
+        t2 = (Tree) firstTree.get(vertexKeys.next());
+        vp = (VertexProperty) t2.keySet().iterator().next();
+        assertEquals(5, vp.id());
+        assertEquals("lop", vp.value());
+
+        t2 = (Tree) firstTree.get(vertexKeys.next());
+        vp = (VertexProperty) t2.keySet().iterator().next();
+        assertEquals(7, vp.id());
+        assertEquals("josh", vp.value());
+    }
+
+    @Test
+    public void shouldSerializeFullResponseMessage() throws Exception {
+        final UUID id = UUID.randomUUID();
+
+        final Map<String, Object> metaData = new HashMap<>();
+        metaData.put("test", "this");
+        metaData.put("one", 1);
+
+        final Map<String, Object> attributes = new HashMap<>();
+        attributes.put("test", "that");
+        attributes.put("two", 2);
+
+        final ResponseMessage response = ResponseMessage.build(id)
+                .responseMetaData(metaData)
+                .code(ResponseStatusCode.SUCCESS)
+                .result("some-result")
+                .statusAttributes(attributes)
+                .statusMessage("worked")
+                .create();
+
+        final ByteBuf bb = serializer.serializeResponseAsBinary(response, allocator);
+        final ResponseMessage deserialized = serializer.deserializeResponse(bb);
+
+        assertEquals(id, deserialized.getRequestId());
+        assertEquals("this", deserialized.getResult().getMeta().get("test"));
+        assertEquals(1, deserialized.getResult().getMeta().get("one"));
+        assertEquals("some-result", deserialized.getResult().getData());
+        assertEquals("that", deserialized.getStatus().getAttributes().get("test"));
+        assertEquals(2, deserialized.getStatus().getAttributes().get("two"));
+        assertEquals(ResponseStatusCode.SUCCESS.getValue(), deserialized.getStatus().getCode().getValue());
+        assertEquals("worked", deserialized.getStatus().getMessage());
+    }
+    
+    private void assertCommon(final ResponseMessage response) {
+        assertEquals(requestId, response.getRequestId());
+        assertEquals(ResponseStatusCode.SUCCESS, response.getStatus().getCode());
+    }
+
+    private ResponseMessage convert(final Object toSerialize) throws SerializationException {
+        final ByteBuf bb = serializer.serializeResponseAsBinary(responseMessageBuilder.result(toSerialize).create(), allocator);
+        return serializer.deserializeResponse(bb);
+    }
+}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerGremlinV1d0Test.java
----------------------------------------------------------------------
diff --git a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerGremlinV1d0Test.java b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerGremlinV1d0Test.java
deleted file mode 100644
index 0091a5f..0000000
--- a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerGremlinV1d0Test.java
+++ /dev/null
@@ -1,334 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.tinkerpop.gremlin.driver.ser;
-
-import org.apache.tinkerpop.gremlin.driver.MessageSerializer;
-import org.apache.tinkerpop.gremlin.driver.message.ResponseMessage;
-import org.apache.tinkerpop.gremlin.driver.message.ResponseStatusCode;
-import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
-import org.apache.tinkerpop.gremlin.structure.Edge;
-import org.apache.tinkerpop.gremlin.structure.Graph;
-import org.apache.tinkerpop.gremlin.structure.Property;
-import org.apache.tinkerpop.gremlin.structure.Vertex;
-import org.apache.tinkerpop.gremlin.structure.VertexProperty;
-import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONTokens;
-import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerFactory;
-import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraph;
-import io.netty.buffer.ByteBuf;
-import io.netty.buffer.ByteBufAllocator;
-import io.netty.buffer.UnpooledByteBufAllocator;
-import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
-import org.apache.tinkerpop.shaded.jackson.databind.util.StdDateFormat;
-import org.junit.Test;
-
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
-import org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.fail;
-
-/**
- * Serializer tests that cover non-lossy serialization/deserialization methods.
- *
- * @author Stephen Mallette (http://stephen.genoprime.com)
- */
-public class GraphSONMessageSerializerGremlinV1d0Test {
-    private UUID requestId = UUID.fromString("6457272A-4018-4538-B9AE-08DD5DDC0AA1");
-    private ResponseMessage.Builder responseMessageBuilder = ResponseMessage.build(requestId);
-    private static ByteBufAllocator allocator = UnpooledByteBufAllocator.DEFAULT;
-
-    public MessageSerializer serializer = new GraphSONMessageSerializerGremlinV1d0();
-
-    @Test
-    public void shouldSerializeIterable() throws Exception {
-        final ArrayList<Integer> list = new ArrayList<>();
-        list.add(1);
-        list.add(100);
-
-        final ResponseMessage response = convert(list);
-        assertCommon(response);
-
-        final List<Integer> deserializedFunList = (List<Integer>) response.getResult().getData();
-        assertEquals(2, deserializedFunList.size());
-        assertEquals(new Integer(1), deserializedFunList.get(0));
-        assertEquals(new Integer(100), deserializedFunList.get(1));
-    }
-
-    @Test
-    public void shouldSerializeIterableWithNull() throws Exception {
-        final ArrayList<Integer> list = new ArrayList<>();
-        list.add(1);
-        list.add(null);
-        list.add(100);
-
-        final ResponseMessage response = convert(list);
-        assertCommon(response);
-
-        final List<Integer> deserializedFunList = (List<Integer>) response.getResult().getData();
-        assertEquals(3, deserializedFunList.size());
-        assertEquals(new Integer(1), deserializedFunList.get(0));
-        assertNull(deserializedFunList.get(1));
-        assertEquals(new Integer(100), deserializedFunList.get(2));
-    }
-
-    @Test
-    public void shouldSerializeMap() throws Exception {
-        final Map<String, Object> map = new HashMap<>();
-        final Map<String, String> innerMap = new HashMap<>();
-        innerMap.put("a", "b");
-
-        map.put("x", 1);
-        map.put("y", "some");
-        map.put("z", innerMap);
-
-        final ResponseMessage response = convert(map);
-        assertCommon(response);
-
-        final Map<String, Object> deserializedMap = (Map<String, Object>) response.getResult().getData();
-        assertEquals(3, deserializedMap.size());
-        assertEquals(1, deserializedMap.get("x"));
-        assertEquals("some", deserializedMap.get("y"));
-
-        final Map<String, String> deserializedInnerMap = (Map<String, String>) deserializedMap.get("z");
-        assertEquals(1, deserializedInnerMap.size());
-        assertEquals("b", deserializedInnerMap.get("a"));
-    }
-
-    @Test
-    public void shouldSerializeMapEntries() throws Exception {
-        final Graph graph = TinkerGraph.open();
-        final Vertex v1 = graph.addVertex();
-        final Date d = new Date();
-
-        final Map<Object, Object> map = new HashMap<>();
-        map.put("x", 1);
-        map.put(v1, 100);
-        map.put(d, "test");
-
-        final ResponseMessage response = convert(IteratorUtils.asList(map.entrySet()));
-        assertCommon(response);
-
-        final List<Map<String, Object>> deserializedEntries = (List<Map<String, Object>>) response.getResult().getData();
-        assertEquals(3, deserializedEntries.size());
-        deserializedEntries.forEach(e -> {
-            if (e.containsKey("x"))
-                assertEquals(1, e.get("x"));
-            else if (e.containsKey(v1.id().toString()))
-                assertEquals(100, e.get(v1.id().toString()));
-            else if (e.containsKey(StdDateFormat.instance.format(d)))
-                assertEquals("test", e.get(StdDateFormat.instance.format(d)));
-            else
-                fail("Map entries contains a key that is not part of what was serialized");
-        });
-    }
-
-    @Test
-    public void shouldSerializeEdge() throws Exception {
-        final Graph graph = TinkerGraph.open();
-        final Vertex v1 = graph.addVertex();
-        final Vertex v2 = graph.addVertex();
-        final Edge e = v1.addEdge("test", v2);
-        e.property("abc", 123);
-
-        final Iterable<Edge> iterable = IteratorUtils.list(graph.edges());
-
-        final ResponseMessage response = convert(iterable);
-        assertCommon(response);
-
-        final List<Map<String, Object>> edgeList = (List<Map<String, Object>>) response.getResult().getData();
-        assertEquals(1, edgeList.size());
-
-        final Map<String, Object> deserializedEdge = edgeList.get(0);
-        assertEquals(e.id(), deserializedEdge.get(GraphSONTokens.ID));
-        assertEquals(v1.id(), deserializedEdge.get(GraphSONTokens.OUT));
-        assertEquals(v2.id(), deserializedEdge.get(GraphSONTokens.IN));
-        assertEquals(v1.label(), deserializedEdge.get(GraphSONTokens.OUT_LABEL));
-        assertEquals(v2.label(), deserializedEdge.get(GraphSONTokens.IN_LABEL));
-        assertEquals(e.label(), deserializedEdge.get(GraphSONTokens.LABEL));
-        assertEquals(GraphSONTokens.EDGE, deserializedEdge.get(GraphSONTokens.TYPE));
-
-        final Map<String, Object> properties = (Map<String, Object>) deserializedEdge.get(GraphSONTokens.PROPERTIES);
-        assertNotNull(properties);
-        assertEquals(123, properties.get("abc"));
-
-    }
-
-    @Test
-    public void shouldSerializeEdgeProperty() throws Exception {
-        final Graph graph = TinkerGraph.open();
-        final Vertex v1 = graph.addVertex();
-        final Vertex v2 = graph.addVertex();
-        final Edge e = v1.addEdge("test", v2);
-        e.property("abc", 123);
-
-        final Iterable<Property<Object>> iterable = IteratorUtils.list(e.properties("abc"));
-        final ResponseMessage response = convert(iterable);
-        assertCommon(response);
-
-        final List<Map<String, Object>> propertyList = (List<Map<String, Object>>) response.getResult().getData();
-        assertEquals(1, propertyList.size());
-        assertEquals(123, propertyList.get(0).get("value"));
-    }
-
-    @Test
-    public void shouldSerializeVertexWithEmbeddedMap() throws Exception {
-        final Graph graph = TinkerGraph.open();
-        final Vertex v = graph.addVertex();
-        final Map<String, Object> map = new HashMap<>();
-        map.put("x", 500);
-        map.put("y", "some");
-
-        final ArrayList<Object> friends = new ArrayList<>();
-        friends.add("x");
-        friends.add(5);
-        friends.add(map);
-
-        v.property(VertexProperty.Cardinality.single, "friends", friends);
-
-        final List list = IteratorUtils.list(graph.vertices());
-
-        final ResponseMessage response = convert(list);
-        assertCommon(response);
-
-        final List<Map<String, Object>> vertexList = (List<Map<String, Object>>) response.getResult().getData();
-        assertEquals(1, vertexList.size());
-
-        final Map<String, Object> deserializedVertex = vertexList.get(0);
-        assertEquals(v.id(), deserializedVertex.get(GraphSONTokens.ID));
-        assertEquals(Vertex.DEFAULT_LABEL, deserializedVertex.get(GraphSONTokens.LABEL));
-
-        final Map<String, Object> properties = ((Map<String, Object>) deserializedVertex.get(GraphSONTokens.PROPERTIES));
-        assertEquals(1, properties.size());
-
-        final List<Map<String,Object>> friendsProperties = (List<Map<String,Object>>) properties.get("friends");
-        assertEquals(1, friendsProperties.size());
-
-        final List<Object> deserializedInnerList = (List<Object>) friendsProperties.get(0).get(GraphSONTokens.VALUE);
-        assertEquals(3, deserializedInnerList.size());
-        assertEquals("x", deserializedInnerList.get(0));
-        assertEquals(5, deserializedInnerList.get(1));
-
-        final Map<String, Object> deserializedInnerInnerMap = (Map<String, Object>) deserializedInnerList.get(2);
-        assertEquals(2, deserializedInnerInnerMap.size());
-        assertEquals(500, deserializedInnerInnerMap.get("x"));
-        assertEquals("some", deserializedInnerInnerMap.get("y"));
-    }
-
-    @Test
-    public void shouldSerializeToJsonMapWithElementForKey() throws Exception {
-        final TinkerGraph graph = TinkerFactory.createClassic();
-        final GraphTraversalSource g = graph.traversal();
-        final Map<Vertex, Integer> map = new HashMap<>();
-        map.put(g.V().has("name", "marko").next(), 1000);
-
-        final ResponseMessage response = convert(map);
-        assertCommon(response);
-
-        final Map<String, Integer> deserializedMap = (Map<String, Integer>) response.getResult().getData();
-        assertEquals(1, deserializedMap.size());
-
-        // with no embedded types the key (which is a vertex) simply serializes out to an id
-        // {"result":{"1":1000},"code":200,"requestId":"2d62161b-9544-4f39-af44-62ec49f9a595","type":0}
-        assertEquals(new Integer(1000), deserializedMap.get("1"));
-    }
-
-    @Test
-    public void shouldSerializeToJsonTree() throws Exception {
-        final TinkerGraph graph = TinkerFactory.createClassic();
-        final GraphTraversalSource g = graph.traversal();
-        final Map t = g.V(1).out().properties("name").tree().next();
-
-        final ResponseMessage response = convert(t);
-        assertCommon(response);
-
-        final Map<String, Map<String, Map>> deserializedMap = (Map<String, Map<String, Map>>) response.getResult().getData();
-        
-        assertEquals(1, deserializedMap.size());
-        
-        //check the first object and it's properties
-        Map<String,Object> vertex = deserializedMap.get("1").get("key");
-        Map<String,List<Map>> vertexProperties = (Map<String, List<Map>>)vertex.get("properties");
-        assertEquals(1, (int)vertex.get("id"));
-        assertEquals("marko", vertexProperties.get("name").get(0).get("value"));
-        
-        //check objects tree structure
-        //check Vertex property
-        Map<String, Map<String, Map>> subTreeMap =  deserializedMap.get("1").get("value");
-        Map<String, Map<String, Map>> subTreeMap2 = subTreeMap.get("2").get("value");
-        Map<String, String> vertexPropertiesDeep = subTreeMap2.get("3").get("key");
-        assertEquals("vadas", vertexPropertiesDeep.get("value"));
-        assertEquals("name", vertexPropertiesDeep.get("label"));
-        
-        // check subitem
-        Map<String,Object> vertex2 = subTreeMap.get("3").get("key");
-        Map<String,List<Map>> vertexProperties2 = (Map<String, List<Map>>)vertex2.get("properties");
-        
-        assertEquals("lop", vertexProperties2.get("name").get(0).get("value"));
-    }
-
-    @Test
-    public void shouldSerializeFullResponseMessage() throws Exception {
-        final UUID id = UUID.randomUUID();
-
-        final Map<String, Object> metaData = new HashMap<>();
-        metaData.put("test", "this");
-        metaData.put("one", 1);
-
-        final Map<String, Object> attributes = new HashMap<>();
-        attributes.put("test", "that");
-        attributes.put("two", 2);
-
-        final ResponseMessage response = ResponseMessage.build(id)
-                .responseMetaData(metaData)
-                .code(ResponseStatusCode.SUCCESS)
-                .result("some-result")
-                .statusAttributes(attributes)
-                .statusMessage("worked")
-                .create();
-
-        final ByteBuf bb = serializer.serializeResponseAsBinary(response, allocator);
-        final ResponseMessage deserialized = serializer.deserializeResponse(bb);
-
-        assertEquals(id, deserialized.getRequestId());
-        assertEquals("this", deserialized.getResult().getMeta().get("test"));
-        assertEquals(1, deserialized.getResult().getMeta().get("one"));
-        assertEquals("some-result", deserialized.getResult().getData());
-        assertEquals("that", deserialized.getStatus().getAttributes().get("test"));
-        assertEquals(2, deserialized.getStatus().getAttributes().get("two"));
-        assertEquals(ResponseStatusCode.SUCCESS.getValue(), deserialized.getStatus().getCode().getValue());
-        assertEquals("worked", deserialized.getStatus().getMessage());
-    }
-    
-    private void assertCommon(final ResponseMessage response) {
-        assertEquals(requestId, response.getRequestId());
-        assertEquals(ResponseStatusCode.SUCCESS, response.getStatus().getCode());
-    }
-
-    private ResponseMessage convert(final Object toSerialize) throws SerializationException {
-        final ByteBuf bb = serializer.serializeResponseAsBinary(responseMessageBuilder.result(toSerialize).create(), allocator);
-        return serializer.deserializeResponse(bb);
-    }
-}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerV1d0Test.java
----------------------------------------------------------------------
diff --git a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerV1d0Test.java b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerV1d0Test.java
index a4cee54..bf1ddcb 100644
--- a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerV1d0Test.java
+++ b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerV1d0Test.java
@@ -22,6 +22,7 @@ import org.apache.tinkerpop.gremlin.driver.message.RequestMessage;
 import org.apache.tinkerpop.gremlin.driver.message.ResponseMessage;
 import org.apache.tinkerpop.gremlin.driver.message.ResponseStatusCode;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree;
 import org.apache.tinkerpop.gremlin.structure.Edge;
 import org.apache.tinkerpop.gremlin.structure.Graph;
 import org.apache.tinkerpop.gremlin.structure.Property;
@@ -35,21 +36,16 @@ import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraph;
 import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
 import org.apache.tinkerpop.shaded.jackson.core.JsonGenerationException;
 import org.apache.tinkerpop.shaded.jackson.core.JsonGenerator;
-import org.apache.tinkerpop.shaded.jackson.core.JsonParser;
-import org.apache.tinkerpop.shaded.jackson.core.JsonProcessingException;
-import org.apache.tinkerpop.shaded.jackson.databind.DeserializationContext;
 import org.apache.tinkerpop.shaded.jackson.databind.JsonNode;
 import org.apache.tinkerpop.shaded.jackson.databind.ObjectMapper;
 import org.apache.tinkerpop.shaded.jackson.databind.SerializerProvider;
-import org.apache.tinkerpop.shaded.jackson.databind.deser.std.StdDeserializer;
-import org.apache.tinkerpop.shaded.jackson.databind.jsontype.TypeSerializer;
 import org.apache.tinkerpop.shaded.jackson.databind.module.SimpleModule;
 import org.apache.tinkerpop.shaded.jackson.databind.node.NullNode;
 import org.apache.tinkerpop.shaded.jackson.databind.ser.std.StdSerializer;
 import org.apache.tinkerpop.shaded.jackson.databind.util.StdDateFormat;
 import org.junit.Test;
 
-import java.awt.*;
+import java.awt.Color;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -57,7 +53,6 @@ import java.util.Date;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.UUID;
-import org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree;
 
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.core.Is.is;

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerV2d0Test.java
----------------------------------------------------------------------
diff --git a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerV2d0Test.java b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerV2d0Test.java
new file mode 100644
index 0000000..de9b493
--- /dev/null
+++ b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/GraphSONMessageSerializerV2d0Test.java
@@ -0,0 +1,507 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.driver.ser;
+
+import org.apache.tinkerpop.gremlin.driver.message.RequestMessage;
+import org.apache.tinkerpop.gremlin.driver.message.ResponseMessage;
+import org.apache.tinkerpop.gremlin.driver.message.ResponseStatusCode;
+import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree;
+import org.apache.tinkerpop.gremlin.structure.Edge;
+import org.apache.tinkerpop.gremlin.structure.Graph;
+import org.apache.tinkerpop.gremlin.structure.Property;
+import org.apache.tinkerpop.gremlin.structure.Vertex;
+import org.apache.tinkerpop.gremlin.structure.VertexProperty;
+import org.apache.tinkerpop.gremlin.structure.io.AbstractIoRegistry;
+import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONIo;
+import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONTokens;
+import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerFactory;
+import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraph;
+import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
+import org.apache.tinkerpop.shaded.jackson.core.JsonGenerationException;
+import org.apache.tinkerpop.shaded.jackson.core.JsonGenerator;
+import org.apache.tinkerpop.shaded.jackson.databind.JsonNode;
+import org.apache.tinkerpop.shaded.jackson.databind.ObjectMapper;
+import org.apache.tinkerpop.shaded.jackson.databind.SerializerProvider;
+import org.apache.tinkerpop.shaded.jackson.databind.module.SimpleModule;
+import org.apache.tinkerpop.shaded.jackson.databind.node.NullNode;
+import org.apache.tinkerpop.shaded.jackson.databind.ser.std.StdSerializer;
+import org.apache.tinkerpop.shaded.jackson.databind.util.StdDateFormat;
+import org.junit.Test;
+
+import java.awt.Color;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.Is.is;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.fail;
+
+/**
+ * These tests focus on message serialization and not "result" serialization as test specific to results (e.g.
+ * vertices, edges, annotated values, etc.) are handled in the IO packages.
+ *
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ */
+public class GraphSONMessageSerializerV2d0Test {
+
+    public static final GraphSONMessageSerializerV2d0 SERIALIZER = new GraphSONMessageSerializerV2d0();
+    private static final RequestMessage msg = RequestMessage.build("op")
+            .overrideRequestId(UUID.fromString("2D62161B-9544-4F39-AF44-62EC49F9A595")).create();
+    private static final ObjectMapper mapper = new ObjectMapper();
+
+    @Test
+    public void shouldConfigureIoRegistry() throws Exception {
+        final GraphSONMessageSerializerV1d0 serializer = new GraphSONMessageSerializerV1d0();
+        final Map<String, Object> config = new HashMap<String, Object>() {{
+            put(GryoMessageSerializerV1d0.TOKEN_IO_REGISTRIES, Arrays.asList(ColorIoRegistry.class.getName()));
+        }};
+
+        serializer.configure(config, null);
+
+        final ResponseMessage toSerialize = ResponseMessage.build(UUID.fromString("2D62161B-9544-4F39-AF44-62EC49F9A595"))
+                .result(Color.RED).create();
+        final String results = serializer.serializeResponseAsString(toSerialize);
+        final JsonNode json = mapper.readTree(results);
+        assertNotNull(json);
+        assertThat(json.get(SerTokens.TOKEN_RESULT).get(SerTokens.TOKEN_DATA).booleanValue(), is(true));
+    }
+
+    @Test
+    public void shouldSerializeToJsonNullResultReturnsNull() throws Exception {
+        final ResponseMessage message = ResponseMessage.build(msg).create();
+        final String results = SERIALIZER.serializeResponseAsString(message);
+        final JsonNode json = mapper.readTree(results);
+        assertNotNull(json);
+        assertEquals(msg.getRequestId().toString(), json.path(SerTokens.TOKEN_REQUEST).asText());
+        assertEquals(NullNode.getInstance(), json.get(SerTokens.TOKEN_RESULT).get(SerTokens.TOKEN_DATA));
+    }
+
+    @Test
+    public void shouldSerializeToJsonIterable() throws Exception {
+        final ArrayList<FunObject> funList = new ArrayList<>();
+        funList.add(new FunObject("x"));
+        funList.add(new FunObject("y"));
+
+        final String results = SERIALIZER.serializeResponseAsString(ResponseMessage.build(msg).result(funList).create());
+        final JsonNode json = mapper.readTree(results);
+
+        assertNotNull(json);
+        assertEquals(msg.getRequestId().toString(), json.get(SerTokens.TOKEN_REQUEST).asText());
+        final JsonNode converted = json.get(SerTokens.TOKEN_RESULT).get(SerTokens.TOKEN_DATA);
+
+        assertEquals(2, converted.size());
+
+        assertEquals("x", converted.get(0).asText());
+        assertEquals("y", converted.get(1).asText());
+    }
+
+    @Test
+    public void shouldSerializeToJsonIterator() throws Exception {
+        final ArrayList<FunObject> funList = new ArrayList<>();
+        funList.add(new FunObject("x"));
+        funList.add(new FunObject("y"));
+
+        final String results = SERIALIZER.serializeResponseAsString(ResponseMessage.build(msg).result(funList).create());
+        final JsonNode json = mapper.readTree(results);
+
+        assertNotNull(json);
+        assertEquals(msg.getRequestId().toString(), json.get(SerTokens.TOKEN_REQUEST).asText());
+        final JsonNode converted = json.get(SerTokens.TOKEN_RESULT).get(SerTokens.TOKEN_DATA);
+
+        assertEquals(2, converted.size());
+
+        assertEquals("x", converted.get(0).asText());
+        assertEquals("y", converted.get(1).asText());
+    }
+
+    @Test
+    public void shouldSerializeToJsonIteratorNullElement() throws Exception {
+
+        final ArrayList<FunObject> funList = new ArrayList<>();
+        funList.add(new FunObject("x"));
+        funList.add(null);
+        funList.add(new FunObject("y"));
+
+        final String results = SERIALIZER.serializeResponseAsString(ResponseMessage.build(msg).result(funList.iterator()).create());
+        final JsonNode json = mapper.readTree(results);
+
+        assertNotNull(json);
+        assertEquals(msg.getRequestId().toString(), json.get(SerTokens.TOKEN_REQUEST).asText());
+        final JsonNode converted = json.get(SerTokens.TOKEN_RESULT).get(SerTokens.TOKEN_DATA);
+
+        assertEquals(3, converted.size());
+
+        assertEquals("x", converted.get(0).asText());
+        assertEquals(NullNode.getInstance(), converted.get(1));
+        assertEquals("y", converted.get(2).asText());
+    }
+
+    @Test
+    public void shouldSerializeToJsonMap() throws Exception {
+        final Map<String, Object> map = new HashMap<>();
+        final Map<String, String> innerMap = new HashMap<>();
+        innerMap.put("a", "b");
+
+        map.put("x", new FunObject("x"));
+        map.put("y", "some");
+        map.put("z", innerMap);
+
+        final String results = SERIALIZER.serializeResponseAsString(ResponseMessage.build(msg).result(map).create());
+        final JsonNode json = mapper.readTree(results);
+
+        assertNotNull(json);
+        assertEquals(msg.getRequestId().toString(), json.get(SerTokens.TOKEN_REQUEST).asText());
+        final JsonNode jsonObject = json.get(SerTokens.TOKEN_RESULT).get(SerTokens.TOKEN_DATA);
+
+        assertNotNull(jsonObject);
+        assertEquals("some", jsonObject.get("y").asText());
+        assertEquals("x", jsonObject.get("x").asText());
+
+        final JsonNode innerJsonObject = jsonObject.get("z");
+        assertNotNull(innerJsonObject);
+        assertEquals("b", innerJsonObject.get("a").asText());
+    }
+
+    @Test
+    public void shouldShouldSerializeMapEntries() throws Exception {
+        final Graph graph = TinkerGraph.open();
+        final Vertex v1 = graph.addVertex();
+        final Date d = new Date();
+
+        final Map<Object, Object> map = new HashMap<>();
+        map.put("x", 1);
+        map.put(v1, 100);
+        map.put(d, "test");
+
+        final String results = SERIALIZER.serializeResponseAsString(ResponseMessage.build(msg).result(IteratorUtils.asList(map)).create());
+        final JsonNode json = mapper.readTree(results);
+
+        assertNotNull(json);
+        assertEquals(msg.getRequestId().toString(), json.get(SerTokens.TOKEN_REQUEST).asText());
+        final JsonNode jsonObject = json.get(SerTokens.TOKEN_RESULT).get(SerTokens.TOKEN_DATA);
+        jsonObject.elements().forEachRemaining(e -> {
+            if (e.has("x"))
+                assertEquals(1, e.get("x").get(GraphSONTokens.VALUEPROP).asInt());
+            else if (e.has(v1.id().toString()))
+                assertEquals(100, e.get(v1.id().toString()).get(GraphSONTokens.VALUEPROP).asInt());
+            else if (e.has(StdDateFormat.instance.format(d)))
+                assertEquals("test", e.get(StdDateFormat.instance.format(d)).asText());
+            else
+                fail("Map entries contains a key that is not part of what was serialized");
+        });
+    }
+
+    @Test
+    public void shouldSerializeEdge() throws Exception {
+        final Graph g = TinkerGraph.open();
+        final Vertex v1 = g.addVertex();
+        final Vertex v2 = g.addVertex();
+        final Edge e = v1.addEdge("test", v2);
+        e.property("abc", 123);
+
+        final Iterable<Edge> iterable = IteratorUtils.list(g.edges());
+        final String results = SERIALIZER.serializeResponseAsString(ResponseMessage.build(msg).result(iterable).create());
+
+        final JsonNode json = mapper.readTree(results);
+
+        assertNotNull(json);
+        assertEquals(msg.getRequestId().toString(), json.get(SerTokens.TOKEN_REQUEST).asText());
+        final JsonNode converted = json.get(SerTokens.TOKEN_RESULT).get(SerTokens.TOKEN_DATA);
+
+        assertNotNull(converted);
+        assertEquals(1, converted.size());
+
+        final JsonNode edgeAsJson = converted.get(0).get(GraphSONTokens.VALUEPROP);
+        assertNotNull(edgeAsJson);
+
+        assertEquals(((Long) e.id()).longValue(), edgeAsJson.get(GraphSONTokens.ID).get(GraphSONTokens.VALUEPROP).asLong());
+        assertEquals(((Long) v1.id()).longValue(), edgeAsJson.get(GraphSONTokens.OUT).get(GraphSONTokens.VALUEPROP).asLong());
+        assertEquals(((Long) v2.id()).longValue(), edgeAsJson.get(GraphSONTokens.IN).get(GraphSONTokens.VALUEPROP).asLong());
+        assertEquals(e.label(), edgeAsJson.get(GraphSONTokens.LABEL).asText());
+
+        final JsonNode properties = edgeAsJson.get(GraphSONTokens.PROPERTIES);
+        assertNotNull(properties);
+        assertEquals(123, properties.get("abc").get(GraphSONTokens.VALUEPROP).get("value").get(GraphSONTokens.VALUEPROP).asInt());
+    }
+
+    @Test
+    public void shouldSerializeEdgeProperty() throws Exception {
+        final Graph g = TinkerGraph.open();
+        final Vertex v1 = g.addVertex();
+        final Vertex v2 = g.addVertex();
+        final Edge e = v1.addEdge("test", v2);
+        e.property("abc", 123);
+
+        final Iterable<Property<Object>> iterable = IteratorUtils.list(e.properties("abc"));
+        final String results = SERIALIZER.serializeResponseAsString(ResponseMessage.build(msg).result(iterable).create());
+
+        final JsonNode json = mapper.readTree(results);
+
+        assertNotNull(json);
+        assertEquals(msg.getRequestId().toString(), json.get(SerTokens.TOKEN_REQUEST).asText());
+        final JsonNode converted = json.get(SerTokens.TOKEN_RESULT).get(SerTokens.TOKEN_DATA);
+
+        assertNotNull(converted);
+        assertEquals(1, converted.size());
+
+        final JsonNode propertyAsJson = converted.get(0);
+        assertNotNull(propertyAsJson);
+
+        assertEquals(123, propertyAsJson.get(GraphSONTokens.VALUEPROP).get("value").get(GraphSONTokens.VALUEPROP).asInt());
+    }
+
+    @Test
+    public void shouldSerializeToJsonIteratorWithEmbeddedMap() throws Exception {
+        final Graph g = TinkerGraph.open();
+        final Vertex v = g.addVertex();
+        final Map<String, Object> map = new HashMap<>();
+        map.put("x", 500);
+        map.put("y", "some");
+
+        final ArrayList<Object> friends = new ArrayList<>();
+        friends.add("x");
+        friends.add(5);
+        friends.add(map);
+
+        v.property(VertexProperty.Cardinality.single, "friends", friends);
+
+        final Iterable iterable = IteratorUtils.list(g.vertices());
+        final String results = SERIALIZER.serializeResponseAsString(ResponseMessage.build(msg).result(iterable).create());
+        final JsonNode json = mapper.readTree(results);
+
+        assertNotNull(json);
+        assertEquals(msg.getRequestId().toString(), json.get(SerTokens.TOKEN_REQUEST).asText());
+        final JsonNode converted = json.get(SerTokens.TOKEN_RESULT).get(SerTokens.TOKEN_DATA);
+
+        assertNotNull(converted);
+        assertEquals(1, converted.size());
+
+        final JsonNode vertexAsJson = converted.get(0).get(GraphSONTokens.VALUEPROP);
+        assertNotNull(vertexAsJson);
+
+        final JsonNode properties = vertexAsJson.get(GraphSONTokens.PROPERTIES);
+        assertNotNull(properties);
+        assertEquals(1, properties.size());
+
+        final JsonNode friendProperties = properties.get("friends");
+        assertEquals(1, friendProperties.size());
+        final JsonNode friendsProperty = friendProperties.get(0).get(GraphSONTokens.VALUEPROP);
+        assertNotNull(friendsProperty);
+        assertEquals(3, friendsProperty.size());
+
+        final String object1 = friendsProperty.get(GraphSONTokens.VALUE).get(0).asText();
+        assertEquals("x", object1);
+
+        final int object2 = friendsProperty.get(GraphSONTokens.VALUE).get(1).get(GraphSONTokens.VALUEPROP).asInt();
+        assertEquals(5, object2);
+
+        final JsonNode object3 = friendsProperty.get(GraphSONTokens.VALUE).get(2);
+        assertEquals(500, object3.get("x").get(GraphSONTokens.VALUEPROP).asInt());
+        assertEquals("some", object3.get("y").asText());
+    }
+
+    @Test
+    public void shouldSerializeToJsonMapWithElementForKey() throws Exception {
+        final TinkerGraph graph = TinkerFactory.createClassic();
+        final GraphTraversalSource g = graph.traversal();
+        final Map<Vertex, Integer> map = new HashMap<>();
+        map.put(g.V().has("name", "marko").next(), 1000);
+
+        final String results = SERIALIZER.serializeResponseAsString(ResponseMessage.build(msg).result(map).create());
+        final JsonNode json = mapper.readTree(results);
+
+        assertNotNull(json);
+        assertEquals(msg.getRequestId().toString(), json.get(SerTokens.TOKEN_REQUEST).asText());
+        final JsonNode converted = json.get(SerTokens.TOKEN_RESULT).get(SerTokens.TOKEN_DATA);
+
+        assertNotNull(converted);
+
+        // with no embedded types the key (which is a vertex) simply serializes out to an id
+        // {"result":{"1":1000},"code":200,"requestId":"2d62161b-9544-4f39-af44-62ec49f9a595","type":0}
+        assertEquals(1000, converted.get("1").get(GraphSONTokens.VALUEPROP).asInt());
+    }
+
+    @Test
+    public void shouldDeserializeRequestNicelyWithNoArgs() throws Exception {
+        final UUID request = UUID.fromString("011CFEE9-F640-4844-AC93-034448AC0E80");
+        final RequestMessage m = SERIALIZER.deserializeRequest(String.format("{\"requestId\":\"%s\",\"op\":\"eval\"}", request));
+        assertEquals(request, m.getRequestId());
+        assertEquals("eval", m.getOp());
+        assertNotNull(m.getArgs());
+        assertEquals(0, m.getArgs().size());
+    }
+
+    @Test
+    public void shouldDeserializeRequestNicelyWithArgs() throws Exception {
+        final UUID request = UUID.fromString("011CFEE9-F640-4844-AC93-034448AC0E80");
+        final RequestMessage m = SERIALIZER.deserializeRequest(String.format("{\"requestId\":\"%s\",\"op\":\"eval\",\"args\":{\"x\":\"y\"}}", request));
+        assertEquals(request, m.getRequestId());
+        assertEquals("eval", m.getOp());
+        assertNotNull(m.getArgs());
+        assertEquals("y", m.getArgs().get("x"));
+    }
+
+    @Test(expected = SerializationException.class)
+    public void shouldDeserializeRequestParseMessage() throws Exception {
+        SERIALIZER.deserializeRequest("{\"requestId\":\"%s\",\"op\":\"eval\",\"args\":{\"x\":\"y\"}}");
+    }
+
+    @Test
+    public void shouldSerializeFullResponseMessage() throws Exception {
+        final UUID id = UUID.randomUUID();
+
+        final Map<String, Object> metaData = new HashMap<>();
+        metaData.put("test", "this");
+        metaData.put("one", 1);
+
+        final Map<String, Object> attributes = new HashMap<>();
+        attributes.put("test", "that");
+        attributes.put("two", 2);
+
+        final ResponseMessage response = ResponseMessage.build(id)
+                .responseMetaData(metaData)
+                .code(ResponseStatusCode.SUCCESS)
+                .result("some-result")
+                .statusAttributes(attributes)
+                .statusMessage("worked")
+                .create();
+
+        final String results = SERIALIZER.serializeResponseAsString(response);
+        final ResponseMessage deserialized = SERIALIZER.deserializeResponse(results);
+
+        assertEquals(id, deserialized.getRequestId());
+        assertEquals("this", deserialized.getResult().getMeta().get("test"));
+        assertEquals(1, deserialized.getResult().getMeta().get("one"));
+        assertEquals("some-result", deserialized.getResult().getData());
+        assertEquals("that", deserialized.getStatus().getAttributes().get("test"));
+        assertEquals(2, deserialized.getStatus().getAttributes().get("two"));
+        assertEquals(ResponseStatusCode.SUCCESS.getValue(), deserialized.getStatus().getCode().getValue());
+        assertEquals("worked", deserialized.getStatus().getMessage());
+    }
+    
+    @Test
+    public void shouldSerializeToTreeJson() throws Exception {
+        final TinkerGraph graph = TinkerFactory.createClassic();
+        final GraphTraversalSource g = graph.traversal();
+        final Tree t = g.V(1).out().properties("name").tree().next();
+
+        
+        final String results = SERIALIZER.serializeResponseAsString(ResponseMessage.build(msg).result(t).create());
+
+        final JsonNode json = mapper.readTree(results);
+
+        assertNotNull(json);
+        assertEquals(msg.getRequestId().toString(), json.get(SerTokens.TOKEN_REQUEST).asText());
+        final JsonNode converted = json.get(SerTokens.TOKEN_RESULT).get(SerTokens.TOKEN_DATA);
+        assertNotNull(converted);
+
+        //result is: tree{v1=>tree{vp['name'->'vadas']=>null, vp['name'->'lop']=>null, vp['name'->'josh']=>null}}
+        
+        //check the first object and it's properties
+        assertEquals(1, converted.get(GraphSONTokens.VALUEPROP)
+                .get(0)
+                .get(GraphSONTokens.KEY).get(GraphSONTokens.VALUEPROP)
+                .get(GraphSONTokens.ID).get(GraphSONTokens.VALUEPROP).asInt());
+
+        assertEquals("marko", converted.get(GraphSONTokens.VALUEPROP)
+                .get(0)
+                .get(GraphSONTokens.KEY).get(GraphSONTokens.VALUEPROP)
+                .get(GraphSONTokens.PROPERTIES)
+                .get("name")
+                .get(0).get(GraphSONTokens.VALUEPROP)
+                .get(GraphSONTokens.VALUE).asText());
+
+        //check the leafs
+        assertEquals("vadas", converted.get(GraphSONTokens.VALUEPROP)
+                .get(0)
+                .get(GraphSONTokens.VALUE).get(GraphSONTokens.VALUEPROP)
+                .get(0)
+                .get(GraphSONTokens.KEY).get(GraphSONTokens.VALUEPROP)
+                .get(GraphSONTokens.PROPERTIES)
+                .get("name")
+                .get(0).get(GraphSONTokens.VALUEPROP)
+                .get(GraphSONTokens.VALUE).asText());
+
+        assertEquals("lop", converted.get(GraphSONTokens.VALUEPROP)
+                .get(0)
+                .get(GraphSONTokens.VALUE).get(GraphSONTokens.VALUEPROP)
+                .get(1)
+                .get(GraphSONTokens.KEY).get(GraphSONTokens.VALUEPROP)
+                .get(GraphSONTokens.PROPERTIES)
+                .get("name")
+                .get(0).get(GraphSONTokens.VALUEPROP)
+                .get(GraphSONTokens.VALUE).asText());
+
+        assertEquals("josh", converted.get(GraphSONTokens.VALUEPROP)
+                .get(0)
+                .get(GraphSONTokens.VALUE).get(GraphSONTokens.VALUEPROP)
+                .get(2)
+                .get(GraphSONTokens.KEY).get(GraphSONTokens.VALUEPROP)
+                .get(GraphSONTokens.PROPERTIES)
+                .get("name")
+                .get(0).get(GraphSONTokens.VALUEPROP)
+                .get(GraphSONTokens.VALUE).asText());
+    }
+
+    private class FunObject {
+        private String val;
+
+        public FunObject(String val) {
+            this.val = val;
+        }
+
+        public String toString() {
+            return this.val;
+        }
+    }
+
+    public static class ColorIoRegistry extends AbstractIoRegistry {
+        public ColorIoRegistry() {
+            register(GraphSONIo.class, null, new ColorSimpleModule());
+        }
+    }
+
+    public static class ColorSimpleModule extends SimpleModule {
+        public ColorSimpleModule() {
+            super("color-fun");
+            addSerializer(Color.class, new ColorSerializer());
+
+        }
+    }
+
+    public static class ColorSerializer extends StdSerializer<Color> {
+        public ColorSerializer() {
+            super(Color.class);
+        }
+
+        @Override
+        public void serialize(final Color color, final JsonGenerator jsonGenerator,
+                              final SerializerProvider serializerProvider) throws IOException, JsonGenerationException {
+            jsonGenerator.writeBoolean(color.equals(Color.RED));
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-server/conf/gremlin-server-classic.yaml
----------------------------------------------------------------------
diff --git a/gremlin-server/conf/gremlin-server-classic.yaml b/gremlin-server/conf/gremlin-server-classic.yaml
index 551e2c0..24923ea 100644
--- a/gremlin-server/conf/gremlin-server-classic.yaml
+++ b/gremlin-server/conf/gremlin-server-classic.yaml
@@ -29,7 +29,7 @@ scriptEngines: {
     scripts: [scripts/complex-lifecycle.groovy]}}
 serializers:
   - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0, config: { useMapperFromGraph: graph }}       # application/vnd.gremlin-v1.0+gryo
-  - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoLiteMessageSerializerV1d0, config: { useMapperFromGraph: graph }}        # application/vnd.gremlin-v1.0+gryo-lite
+  - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoLiteMessageSerializerV1d0, config: { useMapperFromGraph: graph }}   # application/vnd.gremlin-v1.0+gryo-lite
   - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0, config: { serializeResultToString: true }}   # application/vnd.gremlin-v1.0+gryo-stringd
 metrics: {
   slf4jReporter: {enabled: true, interval: 180000}}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-server/conf/gremlin-server-min.yaml
----------------------------------------------------------------------
diff --git a/gremlin-server/conf/gremlin-server-min.yaml b/gremlin-server/conf/gremlin-server-min.yaml
index d4471f5..f3e9ddd 100644
--- a/gremlin-server/conf/gremlin-server-min.yaml
+++ b/gremlin-server/conf/gremlin-server-min.yaml
@@ -27,6 +27,7 @@ scriptEngines: {
     imports: []}}
 serializers:
   - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV1d0, config: { useMapperFromGraph: graph }}  # application/vnd.gremlin-v1.0+json
+  - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV2d0, config: { useMapperFromGraph: graph }}  # application/vnd.gremlin-v2.0+json
   - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV1d0, config: { useMapperFromGraph: graph }}         # application/json
 metrics: {
   slf4jReporter: {enabled: true, interval: 180000}}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-server/conf/gremlin-server-neo4j.yaml
----------------------------------------------------------------------
diff --git a/gremlin-server/conf/gremlin-server-neo4j.yaml b/gremlin-server/conf/gremlin-server-neo4j.yaml
index 8b4f768..7c1544b 100644
--- a/gremlin-server/conf/gremlin-server-neo4j.yaml
+++ b/gremlin-server/conf/gremlin-server-neo4j.yaml
@@ -46,6 +46,7 @@ serializers:
   - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoLiteMessageSerializerV1d0, config: { useMapperFromGraph: graph }}        # application/vnd.gremlin-v1.0+gryo-lite
   - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0, config: { serializeResultToString: true }}        # application/vnd.gremlin-v1.0+gryo-stringd
   - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV1d0, config: { useMapperFromGraph: graph }} # application/vnd.gremlin-v1.0+json
+  - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV2d0, config: { useMapperFromGraph: graph }} # application/vnd.gremlin-v2.0+json
   - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV1d0, config: { useMapperFromGraph: graph }}        # application/json
 processors:
   - { className: org.apache.tinkerpop.gremlin.server.op.session.SessionOpProcessor, config: { sessionTimeout: 28800000 }}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-server/conf/gremlin-server-rest-modern.yaml
----------------------------------------------------------------------
diff --git a/gremlin-server/conf/gremlin-server-rest-modern.yaml b/gremlin-server/conf/gremlin-server-rest-modern.yaml
index a900204..0fdcb69 100644
--- a/gremlin-server/conf/gremlin-server-rest-modern.yaml
+++ b/gremlin-server/conf/gremlin-server-rest-modern.yaml
@@ -30,6 +30,7 @@ scriptEngines: {
     scripts: [scripts/generate-modern.groovy]}}
 serializers:
   - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV1d0, config: { useMapperFromGraph: graph }}  # application/vnd.gremlin-v1.0+json
+  - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV2d0, config: { useMapperFromGraph: graph }}  # application/vnd.gremlin-v2.0+json
   - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV1d0, config: { useMapperFromGraph: graph }}         # application/json
 metrics: {
   slf4jReporter: {enabled: true, interval: 180000}}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-server/conf/gremlin-server-rest-secure.yaml
----------------------------------------------------------------------
diff --git a/gremlin-server/conf/gremlin-server-rest-secure.yaml b/gremlin-server/conf/gremlin-server-rest-secure.yaml
index d017aa4..84c21d7 100644
--- a/gremlin-server/conf/gremlin-server-rest-secure.yaml
+++ b/gremlin-server/conf/gremlin-server-rest-secure.yaml
@@ -43,6 +43,7 @@ scriptEngines: {
               "org.apache.tinkerpop.gremlin.groovy.jsr223.customizer.CompileStaticCustomizerProvider":["org.apache.tinkerpop.gremlin.groovy.jsr223.customizer.SimpleSandboxExtension"]}}}}
 serializers:
   - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV1d0, config: { useMapperFromGraph: graph }} # application/vnd.gremlin-v1.0+json
+  - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV2d0, config: { useMapperFromGraph: graph }} # application/vnd.gremlin-v2.0+json
   - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV1d0, config: { useMapperFromGraph: graph }}        # application/json
 processors:
   - { className: org.apache.tinkerpop.gremlin.server.op.session.SessionOpProcessor, config: { sessionTimeout: 28800000 }}


[40/48] tinkerpop git commit: TINKERPOP-1274: GraphSON 2.0.

Posted by sp...@apache.org.
TINKERPOP-1274: GraphSON 2.0.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/115eb3c7
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/115eb3c7
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/115eb3c7

Branch: refs/heads/TINKERPOP-1278
Commit: 115eb3c779d993b5cc668bf2c30b31a9b031de49
Parents: 848e367
Author: Kevin Gallardo <ga...@gmail.com>
Authored: Wed May 18 08:41:26 2016 -0400
Committer: Kevin Gallardo <ke...@datastax.com>
Committed: Sat Aug 20 13:52:27 2016 +0100

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |   2 +
 data/grateful-dead-typed.json                   | 422 +++++-----
 data/grateful-dead-v2d0-typed.json              | 808 +++++++++++++++++++
 data/grateful-dead-v2d0.json                    | 808 +++++++++++++++++++
 data/grateful-dead.json                         | 422 +++++-----
 data/tinkerpop-classic-v2d0-typed.json          |   6 +
 data/tinkerpop-classic-v2d0.json                |   6 +
 data/tinkerpop-crew-v2d0-typed.json             |   6 +
 data/tinkerpop-crew-v2d0.json                   |   6 +
 data/tinkerpop-modern-v2d0-typed.json           |   6 +
 data/tinkerpop-modern-v2d0.json                 |   6 +
 docs/src/reference/the-graph.asciidoc           | 139 +++-
 .../upgrade/release-3.2.x-incubating.asciidoc   |  20 +
 .../traversal/util/DefaultTraversalMetrics.java |   8 +
 .../process/traversal/util/MutableMetrics.java  |  12 +
 .../structure/io/graphson/GraphSONMapper.java   | 167 +++-
 .../structure/io/graphson/GraphSONModule.java   | 232 +++++-
 .../structure/io/graphson/GraphSONReader.java   |   8 +-
 .../io/graphson/GraphSONSerializerProvider.java |  15 +-
 .../io/graphson/GraphSONSerializers.java        | 465 -----------
 .../io/graphson/GraphSONSerializersV1d0.java    | 465 +++++++++++
 .../io/graphson/GraphSONSerializersV2d0.java    | 580 +++++++++++++
 .../structure/io/graphson/GraphSONTokens.java   |   3 +
 .../io/graphson/GraphSONTypeDeserializer.java   | 229 ++++++
 .../io/graphson/GraphSONTypeIdResolver.java     | 108 +++
 .../graphson/GraphSONTypeResolverBuilder.java   |  65 ++
 .../io/graphson/GraphSONTypeSerializer.java     | 197 +++++
 .../structure/io/graphson/GraphSONUtil.java     |  37 +
 .../structure/io/graphson/GraphSONVersion.java  |   3 +-
 .../structure/io/graphson/GraphSONWriter.java   |  11 +-
 .../io/graphson/JavaTimeSerializers.java        | 326 --------
 .../io/graphson/JavaTimeSerializersV1d0.java    | 326 ++++++++
 .../io/graphson/JavaTimeSerializersV2d0.java    | 323 ++++++++
 .../io/graphson/JavaUtilSerializers.java        |  86 --
 .../io/graphson/JavaUtilSerializersV1d0.java    |  86 ++
 .../io/graphson/JavaUtilSerializersV2d0.java    |  87 ++
 .../structure/io/graphson/JsonParserConcat.java |  83 ++
 .../io/graphson/LegacyGraphSONReader.java       |   4 +-
 .../io/graphson/TinkerPopJacksonModule.java     |  48 ++
 .../io/graphson/ToStringGraphSONSerializer.java |  41 +
 .../gremlin/structure/io/graphson/TypeInfo.java |  29 +
 .../structure/util/detached/DetachedEdge.java   |  11 +-
 .../structure/util/detached/DetachedVertex.java |  10 +-
 .../util/star/DirectionalStarGraph.java         |  39 +
 .../star/StarGraphGraphSONDeserializer.java     |  91 +++
 .../util/star/StarGraphGraphSONSerializer.java  | 250 ------
 .../star/StarGraphGraphSONSerializerV1d0.java   | 178 ++++
 .../star/StarGraphGraphSONSerializerV2d0.java   | 165 ++++
 .../GraphSONMapperEmbeddedTypeTest.java         |  55 +-
 .../io/graphson/GraphSONMapperTest.java         |  17 +-
 ...aphSONMapperV2d0PartialEmbeddedTypeTest.java | 344 ++++++++
 .../AbstractGraphSONMessageSerializerV2d0.java  | 248 ++++++
 .../GraphSONMessageSerializerGremlinV2d0.java   |  69 ++
 .../ser/GraphSONMessageSerializerV2d0.java      | 125 +++
 .../tinkerpop/gremlin/driver/ser/SerTokens.java |   1 +
 ...raphSONMessageSerializerGremlinTestV1d0.java | 334 ++++++++
 ...raphSONMessageSerializerGremlinTestV2d0.java | 341 ++++++++
 ...raphSONMessageSerializerGremlinV1d0Test.java | 334 --------
 .../ser/GraphSONMessageSerializerV1d0Test.java  |   9 +-
 .../ser/GraphSONMessageSerializerV2d0Test.java  | 507 ++++++++++++
 gremlin-server/conf/gremlin-server-classic.yaml |   2 +-
 gremlin-server/conf/gremlin-server-min.yaml     |   1 +
 gremlin-server/conf/gremlin-server-neo4j.yaml   |   1 +
 .../conf/gremlin-server-rest-modern.yaml        |   1 +
 .../conf/gremlin-server-rest-secure.yaml        |   1 +
 gremlin-server/conf/gremlin-server-secure.yaml  |   1 +
 gremlin-server/conf/gremlin-server-spark.yaml   |   1 +
 gremlin-server/conf/gremlin-server.yaml         |   1 +
 gremlin-server/data/sample.kryo                 | Bin 2416053 -> 2436147 bytes
 .../server/GremlinServerHttpIntegrateTest.java  |  22 +
 .../remote/gremlin-server-integration.yaml      |   1 +
 .../server/gremlin-server-integration.yaml      |   1 +
 .../io/graphson/grateful-dead-typed.json        | 422 +++++-----
 .../io/graphson/grateful-dead-v2d0-typed.json   | 808 +++++++++++++++++++
 .../io/graphson/grateful-dead-v2d0.json         | 808 +++++++++++++++++++
 .../structure/io/graphson/grateful-dead.json    | 422 +++++-----
 .../tinkerpop-classic-normalized-v2d0.json      |   6 +
 .../graphson/tinkerpop-classic-v2d0-typed.json  |   6 +
 .../io/graphson/tinkerpop-classic-v2d0.json     |   6 +
 .../io/graphson/tinkerpop-crew-v2d0-typed.json  |   6 +
 .../io/graphson/tinkerpop-crew-v2d0.json        |   6 +
 .../tinkerpop-modern-normalized-v2d0.json       |   6 +
 .../graphson/tinkerpop-modern-v2d0-typed.json   |   6 +
 .../io/graphson/tinkerpop-modern-v2d0.json      |   6 +
 tinkergraph-gremlin/pom.xml                     |   4 +-
 .../structure/TinkerIoRegistryV2d0.java         | 213 +++++
 .../structure/IoDataGenerationTest.java         | 115 ++-
 .../TinkerGraphGraphSONSerializerV2d0Test.java  | 557 +++++++++++++
 88 files changed, 10842 insertions(+), 2417 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index d4eff5d..f4515b7 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -26,6 +26,8 @@ image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima
 TinkerPop 3.2.2 (NOT OFFICIALLY RELEASED YET)
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
+* Introduced GraphSON 2.0.
+* Deprecated `embedTypes` on the builder for `GraphSONMapper`.
 * Defaulted the `gremlinPool` setting in Gremlin Server to be zero, which will instructs it to use `Runtime.availableProcessors()` for that settings.
 * Changed scope of log4j dependencies so that they would only be used in tests and the binary distributions of Gremlin Console and Server.
 * Deprecated `Io.Builder.registry()` in favor of the newly introduced `Io.Builder.onMapper()`.


[47/48] tinkerpop git commit: Merge remote-tracking branch 'origin/master' into TINKERPOP-1278

Posted by sp...@apache.org.
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/67b4d113/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeSerializer.java
----------------------------------------------------------------------
diff --cc gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeSerializer.java
index 0000000,01e5a79..1f6f07d
mode 000000,100644..100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeSerializer.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTypeSerializer.java
@@@ -1,0 -1,198 +1,201 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one
+  * or more contributor license agreements.  See the NOTICE file
+  * distributed with this work for additional information
+  * regarding copyright ownership.  The ASF licenses this file
+  * to you under the Apache License, Version 2.0 (the
+  * "License"); you may not use this file except in compliance
+  * with the License.  You may obtain a copy of the License at
+  *
+  * http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing,
+  * software distributed under the License is distributed on an
+  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  * KIND, either express or implied.  See the License for the
+  * specific language governing permissions and limitations
+  * under the License.
+  */
+ package org.apache.tinkerpop.gremlin.structure.io.graphson;
+ 
+ import org.apache.tinkerpop.gremlin.process.traversal.Path;
++import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
+ import org.apache.tinkerpop.gremlin.process.traversal.util.Metrics;
+ import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalMetrics;
+ import org.apache.tinkerpop.gremlin.structure.Edge;
+ import org.apache.tinkerpop.gremlin.structure.Property;
+ import org.apache.tinkerpop.gremlin.structure.Vertex;
+ import org.apache.tinkerpop.gremlin.structure.VertexProperty;
+ import org.apache.tinkerpop.shaded.jackson.annotation.JsonTypeInfo;
+ import org.apache.tinkerpop.shaded.jackson.core.JsonGenerator;
+ import org.apache.tinkerpop.shaded.jackson.databind.BeanProperty;
+ import org.apache.tinkerpop.shaded.jackson.databind.jsontype.TypeIdResolver;
+ import org.apache.tinkerpop.shaded.jackson.databind.jsontype.TypeSerializer;
+ 
+ import java.io.IOException;
+ import java.nio.ByteBuffer;
+ 
+ /**
+  * Extension of the Jackson's default TypeSerializer. An instance of this object will be passed to the serializers
+  * on which they can safely call the utility methods to serialize types and making it compatible with the version
+  * 2.0 of GraphSON.
+  *
+  * @author Kevin Gallardo (https://kgdo.me)
+  */
+ public class GraphSONTypeSerializer extends TypeSerializer {
+ 
+     private final TypeIdResolver idRes;
+     private final String propertyName;
+     private final TypeInfo typeInfo;
+     private final String valuePropertyName;
+ 
+     GraphSONTypeSerializer(final TypeIdResolver idRes, final String propertyName, final TypeInfo typeInfo,
+                            final String valuePropertyName) {
+         this.idRes = idRes;
+         this.propertyName = propertyName;
+         this.typeInfo = typeInfo;
+         this.valuePropertyName = valuePropertyName;
+     }
+ 
+     @Override
+     public TypeSerializer forProperty(final BeanProperty beanProperty) {
+         return this;
+     }
+ 
+     @Override
+     public JsonTypeInfo.As getTypeInclusion() {
+         return null;
+     }
+ 
+     @Override
+     public String getPropertyName() {
+         return propertyName;
+     }
+ 
+     @Override
+     public TypeIdResolver getTypeIdResolver() {
+         return idRes;
+     }
+ 
+     @Override
+     public void writeTypePrefixForScalar(final Object o, final JsonGenerator jsonGenerator) throws IOException {
+         if (canWriteTypeId()) {
+             writeTypePrefix(jsonGenerator, getTypeIdResolver().idFromValueAndType(o, getClassFromObject(o)));
+         }
+     }
+ 
+     @Override
+     public void writeTypePrefixForObject(final Object o, final JsonGenerator jsonGenerator) throws IOException {
+         jsonGenerator.writeStartObject();
+         // TODO: FULL_TYPES should be implemented here as : if (fullTypesModeEnabled()) writeTypePrefix(Map);
+     }
+ 
+     @Override
+     public void writeTypePrefixForArray(final Object o, final JsonGenerator jsonGenerator) throws IOException {
+         jsonGenerator.writeStartArray();
+         // TODO: FULL_TYPES should be implemented here as : if (fullTypesModeEnabled()) writeTypePrefix(List);
+     }
+ 
+     @Override
+     public void writeTypeSuffixForScalar(final Object o, final JsonGenerator jsonGenerator) throws IOException {
+         if (canWriteTypeId()) {
+             writeTypeSuffix(jsonGenerator);
+         }
+     }
+ 
+     @Override
+     public void writeTypeSuffixForObject(final Object o, final JsonGenerator jsonGenerator) throws IOException {
+         jsonGenerator.writeEndObject();
+         // TODO: FULL_TYPES should be implemented here as : if (fullTypesModeEnabled()) writeTypeSuffix(Map);
+     }
+ 
+     @Override
+     public void writeTypeSuffixForArray(final Object o, final JsonGenerator jsonGenerator) throws IOException {
+         jsonGenerator.writeEndArray();
+         // TODO: FULL_TYPES should be implemented here as : if (fullTypesModeEnabled()) writeTypeSuffix(List);
+     }
+ 
+     @Override
+     public void writeCustomTypePrefixForScalar(final Object o, final JsonGenerator jsonGenerator, final String s) throws IOException {
+         if (canWriteTypeId()) {
+             writeTypePrefix(jsonGenerator, s);
+         }
+     }
+ 
+     @Override
+     public void writeCustomTypePrefixForObject(final Object o, final JsonGenerator jsonGenerator, final String s) throws IOException {
+         jsonGenerator.writeStartObject();
+         // TODO: FULL_TYPES should be implemented here as : if (fullTypesModeEnabled()) writeTypePrefix(s);
+     }
+ 
+     @Override
+     public void writeCustomTypePrefixForArray(final Object o, final JsonGenerator jsonGenerator, final String s) throws IOException {
+         jsonGenerator.writeStartArray();
+         // TODO: FULL_TYPES should be implemented here as : if (fullTypesModeEnabled()) writeTypePrefix(s);
+     }
+ 
+     @Override
+     public void writeCustomTypeSuffixForScalar(final Object o, final JsonGenerator jsonGenerator, final String s) throws IOException {
+         if (canWriteTypeId()) {
+             writeTypeSuffix(jsonGenerator);
+         }
+     }
+ 
+     @Override
+     public void writeCustomTypeSuffixForObject(final Object o, final JsonGenerator jsonGenerator, final String s) throws IOException {
+         jsonGenerator.writeEndObject();
+         // TODO: FULL_TYPES should be implemented here as : if (fullTypesModeEnabled()) writeTypeSuffix(s);
+     }
+ 
+     @Override
+     public void writeCustomTypeSuffixForArray(final Object o, final JsonGenerator jsonGenerator,final  String s) throws IOException {
+         jsonGenerator.writeEndArray();
+         // TODO: FULL_TYPES should be implemented here as : if (fullTypesModeEnabled()) writeTypeSuffix(s);
+     }
+ 
+     private boolean canWriteTypeId() {
+         return typeInfo != null
+                 && typeInfo == TypeInfo.PARTIAL_TYPES;
+     }
+ 
+     private void writeTypePrefix(final JsonGenerator jsonGenerator, final String s) throws IOException {
+         jsonGenerator.writeStartObject();
+         jsonGenerator.writeStringField(this.getPropertyName(), s);
+         jsonGenerator.writeFieldName(this.valuePropertyName);
+     }
+ 
+     private void writeTypeSuffix(final JsonGenerator jsonGenerator) throws IOException {
+         jsonGenerator.writeEndObject();
+     }
+ 
+     /* We force only **one** translation of a Java object to a domain specific object.
+      i.e. users register typeIDs and serializers/deserializers for the predefined
+      types we have in the spec. Graph, Vertex, Edge, VertexProperty, etc... And
+      **not** their implementations (TinkerGraph, DetachedVertex, TinkerEdge,
+      etc..)
+     */
+     private Class getClassFromObject(final Object o) {
+         // not the most efficient
+         final  Class c = o.getClass();
+         if (Vertex.class.isAssignableFrom(c)) {
+             return Vertex.class;
+         } else if (Edge.class.isAssignableFrom(c)) {
+             return Edge.class;
+         } else if (Path.class.isAssignableFrom(c)) {
+             return Path.class;
+         } else if (VertexProperty.class.isAssignableFrom(c)) {
+             return VertexProperty.class;
+         } else if (Metrics.class.isAssignableFrom(c)) {
+             return Metrics.class;
+         } else if (TraversalMetrics.class.isAssignableFrom(c)) {
+             return TraversalMetrics.class;
+         } else if (Property.class.isAssignableFrom(c)) {
+             return Property.class;
+         } else if (ByteBuffer.class.isAssignableFrom(c)) {
+             return ByteBuffer.class;
++        } else if (Traverser.class.isAssignableFrom(c)) {
++            return Traverser.class;
+         }
+         return c;
+     }
+ }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/67b4d113/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperEmbeddedTypeTest.java
----------------------------------------------------------------------
diff --cc gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperEmbeddedTypeTest.java
index c7549f9,4980adf..7b197b6
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperEmbeddedTypeTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperEmbeddedTypeTest.java
@@@ -39,11 -39,26 +39,27 @@@ import java.time.Year
  import java.time.YearMonth;
  import java.time.ZoneOffset;
  import java.time.ZonedDateTime;
+ import java.util.Arrays;
 -import java.util.HashMap;
 -import java.util.Map;
  
  import static org.junit.Assert.assertEquals;
  
++/**
++ * @author Stephen Mallette (http://stephen.genoprime.com)
++ */
+ @RunWith(Parameterized.class)
  public class GraphSONMapperEmbeddedTypeTest {
-     private final ObjectMapper mapper = GraphSONMapper.build().embedTypes(true).create().createMapper();
+ 
+     @Parameterized.Parameters(name = "{0}")
+     public static Iterable<Object[]> data() {
+         return Arrays.asList(new Object[][]{
+                 {GraphSONMapper.build().version(GraphSONVersion.V1_0).embedTypes(true).create().createMapper()},
+                 {GraphSONMapper.build().version(GraphSONVersion.V2_0).typeInfo(TypeInfo.PARTIAL_TYPES).create()
+                         .createMapper()},
+         });
+     }
+ 
+     @Parameterized.Parameter
+     public ObjectMapper mapper;
  
      @Test
      public void shouldHandleDuration()throws Exception  {

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/67b4d113/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperTest.java
----------------------------------------------------------------------
diff --cc gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperTest.java
index c872aab,4b2e98f..fa31239
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperTest.java
@@@ -42,8 -42,20 +42,23 @@@ import java.util.Arrays
  import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.__;
  import static org.junit.Assert.assertEquals;
  
++/**
++ * @author Stephen Mallette (http://stephen.genoprime.com)
++ */
+ @RunWith(Parameterized.class)
  public class GraphSONMapperTest {
-     private final ObjectMapper mapper = GraphSONMapper.build().embedTypes(false).create().createMapper();
+ 
+     @Parameterized.Parameters(name = "{0}")
+     public static Iterable<Object[]> data() {
+         return Arrays.asList(new Object[][]{
+                 {GraphSONMapper.build().version(GraphSONVersion.V1_0).embedTypes(false).create().createMapper()},
+                 {GraphSONMapper.build().version(GraphSONVersion.V2_0).typeInfo(TypeInfo.NO_TYPES).create().createMapper()},
+         });
+     }
+ 
+     @Parameterized.Parameter
+     public ObjectMapper mapper;
+ 
  
      @Test
      public void shouldHandleTraversalExplanation() throws Exception {

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/67b4d113/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperV1d0ToV2d0BuilderSettingsTest.java
----------------------------------------------------------------------
diff --cc gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperV1d0ToV2d0BuilderSettingsTest.java
index 0000000,0000000..50600ee
new file mode 100644
--- /dev/null
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperV1d0ToV2d0BuilderSettingsTest.java
@@@ -1,0 -1,0 +1,86 @@@
++/*
++ * Licensed to the Apache Software Foundation (ASF) under one
++ * or more contributor license agreements.  See the NOTICE file
++ * distributed with this work for additional information
++ * regarding copyright ownership.  The ASF licenses this file
++ * to you under the Apache License, Version 2.0 (the
++ * "License"); you may not use this file except in compliance
++ * with the License.  You may obtain a copy of the License at
++ *
++ * http://www.apache.org/licenses/LICENSE-2.0
++ *
++ * Unless required by applicable law or agreed to in writing,
++ * software distributed under the License is distributed on an
++ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
++ * KIND, either express or implied.  See the License for the
++ * specific language governing permissions and limitations
++ * under the License.
++ */
++package org.apache.tinkerpop.gremlin.structure.io.graphson;
++
++import org.apache.tinkerpop.shaded.jackson.databind.ObjectMapper;
++import org.junit.Test;
++import org.junit.runner.RunWith;
++import org.junit.runners.Parameterized;
++
++import java.io.ByteArrayInputStream;
++import java.io.ByteArrayOutputStream;
++import java.io.InputStream;
++import java.time.Duration;
++import java.time.Instant;
++import java.time.LocalDate;
++import java.time.LocalDateTime;
++import java.time.LocalTime;
++import java.time.MonthDay;
++import java.time.OffsetDateTime;
++import java.time.OffsetTime;
++import java.time.Period;
++import java.time.Year;
++import java.time.YearMonth;
++import java.time.ZoneOffset;
++import java.time.ZonedDateTime;
++import java.util.Arrays;
++import java.util.HashMap;
++import java.util.Map;
++
++import static org.junit.Assert.assertEquals;
++
++/**
++ * @author Stephen Mallette (http://stephen.genoprime.com)
++ */
++public class GraphSONMapperV1d0ToV2d0BuilderSettingsTest {
++
++    @Test
++    public void shouldHandleMapWithTypesUsingEmbedTypeSetting() throws Exception {
++        final ObjectMapper mapper = GraphSONMapper.build()
++                .version(GraphSONVersion.V1_0)
++                .typeInfo(TypeInfo.PARTIAL_TYPES)
++                .create()
++                .createMapper();
++
++        final Map<String,Object> m = new HashMap<>();
++        m.put("test", 100L);
++
++        final String json = mapper.writeValueAsString(m);
++        final Map read = mapper.readValue(json, HashMap.class);
++
++        assertEquals(100L, read.get("test"));
++    }
++
++    @Test
++    public void shouldNotHandleMapWithTypesUsingEmbedTypeSetting() throws Exception {
++        final ObjectMapper mapper = GraphSONMapper.build()
++                .version(GraphSONVersion.V1_0)
++                .typeInfo(TypeInfo.NO_TYPES)
++                .create()
++                .createMapper();
++
++        final Map<String,Object> m = new HashMap<>();
++        m.put("test", 100L);
++
++        final String json = mapper.writeValueAsString(m);
++        final Map read = mapper.readValue(json, HashMap.class);
++
++        assertEquals(100, read.get("test"));
++    }
++}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/67b4d113/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperV2d0PartialEmbeddedTypeTest.java
----------------------------------------------------------------------
diff --cc gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperV2d0PartialEmbeddedTypeTest.java
index 0000000,e02588f..c78505b
mode 000000,100644..100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperV2d0PartialEmbeddedTypeTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperV2d0PartialEmbeddedTypeTest.java
@@@ -1,0 -1,344 +1,351 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one
+  * or more contributor license agreements.  See the NOTICE file
+  * distributed with this work for additional information
+  * regarding copyright ownership.  The ASF licenses this file
+  * to you under the Apache License, Version 2.0 (the
+  * "License"); you may not use this file except in compliance
+  * with the License.  You may obtain a copy of the License at
+  *
+  * http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing,
+  * software distributed under the License is distributed on an
+  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  * KIND, either express or implied.  See the License for the
+  * specific language governing permissions and limitations
+  * under the License.
+  */
+ package org.apache.tinkerpop.gremlin.structure.io.graphson;
+ 
++import org.apache.tinkerpop.gremlin.process.remote.traversal.DefaultRemoteTraverser;
++import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
+ import org.apache.tinkerpop.shaded.jackson.databind.ObjectMapper;
+ import org.junit.Test;
+ 
+ import java.io.ByteArrayInputStream;
+ import java.io.ByteArrayOutputStream;
+ import java.io.IOException;
+ import java.io.InputStream;
+ import java.time.Duration;
+ import java.time.Instant;
+ import java.time.LocalDate;
+ import java.time.LocalDateTime;
+ import java.time.LocalTime;
+ import java.time.MonthDay;
+ import java.time.OffsetDateTime;
+ import java.time.OffsetTime;
+ import java.time.Period;
+ import java.time.Year;
+ import java.time.YearMonth;
+ import java.time.ZoneOffset;
+ import java.time.ZonedDateTime;
+ import java.util.ArrayList;
+ import java.util.HashMap;
+ import java.util.LinkedHashMap;
+ import java.util.List;
+ import java.util.Map;
+ import java.util.UUID;
+ 
+ import static org.hamcrest.CoreMatchers.containsString;
+ import static org.hamcrest.MatcherAssert.assertThat;
+ import static org.junit.Assert.assertEquals;
+ import static org.junit.Assert.assertNotEquals;
+ import static org.junit.Assert.fail;
+ 
+ /**
+  * Tests automatic typed serialization/deserialization for GraphSON 2.0.
+  */
+ public class GraphSONMapperV2d0PartialEmbeddedTypeTest {
+ 
+     private final ObjectMapper mapper = GraphSONMapper.build()
+             .version(GraphSONVersion.V2_0)
+             .typeInfo(TypeInfo.PARTIAL_TYPES)
+             .create()
+             .createMapper();
+ 
+     @Test
+     public void shouldHandleDurationAuto() throws Exception {
+         final Duration o = Duration.ZERO;
+         assertEquals(o, serializeDeserializeAuto(o));
+     }
+ 
+     @Test
+     public void shouldHandleInstantAuto() throws Exception {
+         final Instant o = Instant.ofEpochMilli(System.currentTimeMillis());
+         assertEquals(o, serializeDeserializeAuto(o));
+     }
+ 
+     @Test
+     public void shouldHandleLocalDateAuto() throws Exception {
+         final LocalDate o = LocalDate.now();
+         assertEquals(o, serializeDeserializeAuto(o));
+     }
+ 
+     @Test
+     public void shouldHandleLocalDateTimeAuto() throws Exception {
+         final LocalDateTime o = LocalDateTime.now();
+         assertEquals(o, serializeDeserializeAuto(o));
+     }
+ 
+     @Test
+     public void shouldHandleLocalTimeAuto() throws Exception {
+         final LocalTime o = LocalTime.now();
+         assertEquals(o, serializeDeserializeAuto(o));
+     }
+ 
+     @Test
+     public void shouldHandleMonthDayAuto() throws Exception {
+         final MonthDay o = MonthDay.now();
+         assertEquals(o, serializeDeserializeAuto(o));
+     }
+ 
+     @Test
+     public void shouldHandleOffsetDateTimeAuto() throws Exception {
+         final OffsetDateTime o = OffsetDateTime.now();
+         assertEquals(o, serializeDeserializeAuto(o));
+     }
+ 
+     @Test
+     public void shouldHandleOffsetTimeAuto() throws Exception {
+         final OffsetTime o = OffsetTime.now();
+         assertEquals(o, serializeDeserializeAuto(o));
+     }
+ 
+     @Test
+     public void shouldHandlePeriodAuto() throws Exception {
+         final Period o = Period.ofDays(3);
+         assertEquals(o, serializeDeserializeAuto(o));
+     }
+ 
+     @Test
+     public void shouldHandleYearAuto() throws Exception {
+         final Year o = Year.now();
+         assertEquals(o, serializeDeserializeAuto(o));
+     }
+ 
+     @Test
+     public void shouldHandleYearMonthAuto() throws Exception {
+         final YearMonth o = YearMonth.now();
+         assertEquals(o, serializeDeserializeAuto(o));
+     }
+ 
+     @Test
+     public void shouldHandleZonedDateTimeAuto() throws Exception {
+         final ZonedDateTime o = ZonedDateTime.now();
+         assertEquals(o, serializeDeserializeAuto(o));
+     }
+ 
+     @Test
+     public void shouldHandleZonedOffsetAuto() throws Exception {
+         final ZoneOffset o = ZonedDateTime.now().getOffset();
+         assertEquals(o, serializeDeserializeAuto(o));
+     }
+ 
+     @Test
+     // Trying to fail the TypeDeserializer type detection
+     public void shouldSerializeDeserializeNestedCollectionsAndMapAndTypedValuesCorrectly() throws Exception {
+         final UUID uuid = UUID.randomUUID();
+         final List myList = new ArrayList<>();
+ 
+         final List myList2 = new ArrayList<>();
+         myList2.add(UUID.randomUUID());
+         myList2.add(33L);
+         myList2.add(84);
+         final Map map2 = new HashMap<>();
+         map2.put("eheh", UUID.randomUUID());
+         map2.put("normal", "normal");
+         myList2.add(map2);
+ 
+         final Map<String, Object> map1 = new HashMap<>();
+         map1.put("hello", "world");
+         map1.put("test", uuid);
+         map1.put("hehe", myList2);
+         myList.add(map1);
+ 
+         myList.add("kjkj");
+         myList.add(UUID.randomUUID());
+         assertEquals(myList, serializeDeserializeAuto(myList));
+ 
+         // no "@value" property
+         String s = "{\""+GraphSONTokens.VALUETYPE+"\":\""+GraphSONTokens.GREMLIN_TYPE_NAMESPACE +":uuid\", \"test\":2}";
+         Map map = new LinkedHashMap<>();
+         map.put(GraphSONTokens.VALUETYPE, "gremlin:uuid");
+         map.put("test", 2);
+         Object res = mapper.readValue(s, Object.class);
+         assertEquals(map, res);
+ 
+         // "@value" and "@type" property reversed
+         s = "{\""+GraphSONTokens.VALUEPROP+"\":2, \""+ GraphSONTokens.VALUETYPE+"\":\""+GraphSONTokens.GREMLIN_TYPE_NAMESPACE +":int64\"}";
+         res = mapper.readValue(s, Object.class);
+         assertEquals(res, 2L);
+         assertEquals(res.getClass(), Long.class);
+ 
+         // no "@type" property.
+         s = "{\""+GraphSONTokens.VALUEPROP+"\":2, \"id\":2}";
+         map = new LinkedHashMap<>();
+         map.put(GraphSONTokens.VALUEPROP, 2);
+         map.put("id", 2);
+         res = mapper.readValue(s, Object.class);
+         assertEquals(res, map);
+     }
+ 
+     @Test
+     public void shouldFailIfMoreThanTwoPropertiesInATypePattern() {
+         String s = "{\"" + GraphSONTokens.VALUEPROP + "\":2, \"" + GraphSONTokens.VALUETYPE + "\":\""+GraphSONTokens.GREMLIN_TYPE_NAMESPACE +":int64\", \"hello\": \"world\"}";
+         try {
+             mapper.readValue(s, Object.class);
+             fail("Should have failed deserializing because there's more than properties in the type.");
+         } catch (IOException e) {
+             assertThat(e.getMessage(), containsString("Detected the type pattern in the JSON payload but the map containing the types and values contains other fields. This is not allowed by the deserializer."));
+         }
+         s = "{\"" + GraphSONTokens.VALUETYPE + "\":\""+GraphSONTokens.GREMLIN_TYPE_NAMESPACE +":int64\",\"" + GraphSONTokens.VALUEPROP + "\":2, \"hello\": \"world\"}";
+         try {
+             mapper.readValue(s, Object.class);
+             fail("Should have failed deserializing because there's more than properties in the type.");
+         } catch (IOException e) {
+             assertThat(e.getMessage(), containsString("Detected the type pattern in the JSON payload but the map containing the types and values contains other fields. This is not allowed by the deserializer."));
+         }
+     }
+ 
+     @Test
+     public void shouldFailIfTypeSpecifiedIsNotSameTypeInPayload() {
+         final ZoneOffset o = ZonedDateTime.now().getOffset();
+         final ByteArrayOutputStream stream = new ByteArrayOutputStream();
+         try {
+             mapper.writeValue(stream, o);
+             final InputStream inputStream = new ByteArrayInputStream(stream.toByteArray());
+             // What has been serialized is a ZoneOffset with the type, but the user explicitly requires another type.
+             mapper.readValue(inputStream, Instant.class);
+             fail("Should have failed decoding the value");
+         } catch (Exception e) {
+             assertThat(e.getMessage(), containsString("Could not deserialize the JSON value as required. Nested exception: java.lang.InstantiationException: Cannot deserialize the value with the detected type contained in the JSON ('"+GraphSONTokens.GREMLIN_TYPE_NAMESPACE +":zoneoffset') to the type specified in parameter to the object mapper (class java.time.Instant). Those types are incompatible."));
+         }
+     }
+ 
+     @Test
+     public void shouldHandleRawPOJOs() throws Exception {
+         final FunObject funObject = new FunObject();
+         funObject.setVal("test");
+         assertEquals(funObject.toString(), serializeDeserialize(funObject, FunObject.class).toString());
+         assertEquals(funObject.getClass(), serializeDeserialize(funObject, FunObject.class).getClass());
+     }
+ 
+     @Test
+     public void shouldHandleMapWithTypesUsingEmbedTypeSetting() throws Exception {
+         final ObjectMapper mapper = GraphSONMapper.build()
+                 .version(GraphSONVersion.V2_0)
+                 .embedTypes(true)
+                 .create()
+                 .createMapper();
+ 
+         final Map<String,Object> m = new HashMap<>();
+         m.put("test", 100L);
+ 
+         final String json = mapper.writeValueAsString(m);
+         final Map read = mapper.readValue(json, HashMap.class);
+ 
+         assertEquals(100L, read.get("test"));
+     }
+ 
+     @Test
+     public void shouldNotHandleMapWithTypesUsingEmbedTypeSetting() throws Exception {
+         final ObjectMapper mapper = GraphSONMapper.build()
+                 .version(GraphSONVersion.V2_0)
+                 .embedTypes(false)
+                 .create()
+                 .createMapper();
+ 
+         final Map<String,Object> m = new HashMap<>();
+         m.put("test", 100L);
+ 
+         final String json = mapper.writeValueAsString(m);
+         final Map read = mapper.readValue(json, HashMap.class);
+ 
+         assertEquals(100, read.get("test"));
+     }
+ 
+     @Test
+     public void shouldLooseTypesInfoWithGraphSONNoType() throws Exception {
+         final ObjectMapper mapper = GraphSONMapper.build()
+                 .version(GraphSONVersion.V2_0)
+                 .typeInfo(TypeInfo.NO_TYPES)
+                 .create()
+                 .createMapper();
+ 
+         final UUID uuid = UUID.randomUUID();
+         final List myList = new ArrayList<>();
+ 
+         final List myList2 = new ArrayList<>();
+         myList2.add(UUID.randomUUID());
+         myList2.add(33L);
+         myList2.add(84);
+         final Map map2 = new HashMap<>();
+         map2.put("eheh", UUID.randomUUID());
+         map2.put("normal", "normal");
+         myList2.add(map2);
+ 
+         final Map<String, Object> map1 = new HashMap<>();
+         map1.put("hello", "world");
+         map1.put("test", uuid);
+         map1.put("hehe", myList2);
+         myList.add(map1);
+ 
+         myList.add("kjkj");
+         myList.add(UUID.randomUUID());
+ 
+         final String json = mapper.writeValueAsString(myList);
+         final Object read = mapper.readValue(json, Object.class);
+ 
+         // Not equals because of type loss
+         assertNotEquals(myList, read);
+     }
+ 
++    @Test
++    public void shouldHandleDefaultRemoteTraverser() throws Exception {
++        final DefaultRemoteTraverser<String> o = new DefaultRemoteTraverser<>("test", 100);
++        assertEquals(o, serializeDeserialize(o, Traverser.class));
++    }
+ 
+     // Class needs to be defined as statics as it's a nested class.
+     public static class FunObject {
+         private String val;
+ 
+         public FunObject() {
+         }
+ 
+         public String getVal() {
+             return this.val;
+         }
+ 
+         public void setVal(String s) {
+             this.val = s;
+         }
+ 
+         public String toString() {
+             return this.val;
+         }
+     }
+ 
+     public <T> T serializeDeserialize(final Object o, final Class<T> clazz) throws Exception {
+         try (final ByteArrayOutputStream stream = new ByteArrayOutputStream()) {
+             mapper.writeValue(stream, o);
+ 
+             try (final InputStream inputStream = new ByteArrayInputStream(stream.toByteArray())) {
+                 return mapper.readValue(inputStream, clazz);
+             }
+         }
+     }
+ 
+     public <T> T serializeDeserializeAuto(final Object o) throws Exception {
+         try (final ByteArrayOutputStream stream = new ByteArrayOutputStream()) {
+             mapper.writeValue(stream, o);
+ 
+             try (final InputStream inputStream = new ByteArrayInputStream(stream.toByteArray())) {
+                 // Object.class is the wildcard that triggers the auto discovery.
+                 return (T)mapper.readValue(inputStream, Object.class);
+             }
+         }
+     }
+ 
+ }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/67b4d113/gremlin-server/conf/gremlin-server-classic.yaml
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/67b4d113/gremlin-server/conf/gremlin-server-modern-readonly.yaml
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/67b4d113/gremlin-server/conf/gremlin-server-modern.yaml
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/67b4d113/gremlin-server/conf/gremlin-server-neo4j.yaml
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/67b4d113/gremlin-server/conf/gremlin-server-rest-secure.yaml
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/67b4d113/gremlin-server/conf/gremlin-server-secure.yaml
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/67b4d113/gremlin-server/conf/gremlin-server-spark.yaml
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/67b4d113/gremlin-server/conf/gremlin-server.yaml
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/67b4d113/gremlin-server/pom.xml
----------------------------------------------------------------------
diff --cc gremlin-server/pom.xml
index 971baca,9a9c077..8980e5d
--- a/gremlin-server/pom.xml
+++ b/gremlin-server/pom.xml
@@@ -46,10 -46,16 +46,21 @@@ limitations under the License
              <artifactId>commons-collections</artifactId>
          </dependency>
          <dependency>
+             <groupId>org.slf4j</groupId>
+             <artifactId>slf4j-log4j12</artifactId>
+             <version>${slf4j.version}</version>
+             <scope>optional</scope>
+         </dependency>
+         <dependency>
+             <groupId>log4j</groupId>
+             <artifactId>log4j</artifactId>
+             <scope>optional</scope>
+         </dependency>
++        <dependency>
 +            <groupId>com.github.ben-manes.caffeine</groupId>
 +            <artifactId>caffeine</artifactId>
 +            <version>2.3.1</version>
 +        </dependency>
          <!-- METRICS -->
          <dependency>
              <groupId>com.codahale.metrics</groupId>

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/67b4d113/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/GremlinServer.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/67b4d113/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/driver/remote/gremlin-server-integration.yaml
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/67b4d113/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/server/gremlin-server-integration.yaml
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/67b4d113/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/server/gremlin-server-performance.yaml
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/67b4d113/pom.xml
----------------------------------------------------------------------


[27/48] tinkerpop git commit: TINKERPOP-1274: GraphSON 2.0.

Posted by sp...@apache.org.
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/grateful-dead-v2d0.json
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/grateful-dead-v2d0.json b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/grateful-dead-v2d0.json
new file mode 100644
index 0000000..92c4d84
--- /dev/null
+++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/grateful-dead-v2d0.json
@@ -0,0 +1,808 @@
+{"id":1,"label":"song","inE":{"followedBy":[{"id":3059,"outV":153,"properties":{"weight":1}},{"id":276,"outV":5,"properties":{"weight":2}},{"id":3704,"outV":3,"properties":{"weight":2}},{"id":4383,"outV":62,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":0,"inV":2,"properties":{"weight":1}},{"id":1,"inV":3,"properties":{"weight":2}},{"id":2,"inV":4,"properties":{"weight":1}},{"id":3,"inV":5,"properties":{"weight":1}},{"id":4,"inV":6,"properties":{"weight":1}}],"sungBy":[{"id":7612,"inV":340}],"writtenBy":[{"id":7611,"inV":527}]},"properties":{"name":[{"id":0,"value":"HEY BO DIDDLEY"}],"songType":[{"id":2,"value":"cover"}],"performances":[{"id":1,"value":5}]}}
+{"id":2,"label":"song","inE":{"followedBy":[{"id":0,"outV":1,"properties":{"weight":1}},{"id":323,"outV":34,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":6190,"inV":123,"properties":{"weight":1}},{"id":6191,"inV":50,"properties":{"weight":1}}],"sungBy":[{"id":7666,"inV":525}],"writtenBy":[{"id":7665,"inV":525}]},"properties":{"name":[{"id":3,"value":"IM A MAN"}],"songType":[{"id":5,"value":"cover"}],"performances":[{"id":4,"value":1}]}}
+{"id":3,"label":"song","inE":{"followedBy":[{"id":1,"outV":1,"properties":{"weight":2}},{"id":2051,"outV":92,"properties":{"weight":4}},{"id":1412,"outV":83,"properties":{"weight":6}},{"id":6669,"outV":12,"properties":{"weight":1}},{"id":526,"outV":120,"properties":{"weight":2}},{"id":910,"outV":91,"properties":{"weight":3}},{"id":1166,"outV":26,"properties":{"weight":4}},{"id":6286,"outV":49,"properties":{"weight":1}},{"id":273,"outV":5,"properties":{"weight":40}},{"id":2194,"outV":235,"properties":{"weight":1}},{"id":1684,"outV":124,"properties":{"weight":1}},{"id":1941,"outV":148,"properties":{"weight":4}},{"id":3221,"outV":63,"properties":{"weight":1}},{"id":2712,"outV":13,"properties":{"weight":3}},{"id":6425,"outV":134,"properties":{"weight":2}},{"id":5787,"outV":76,"properties":{"weight":2}},{"id":5148,"outV":125,"properties":{"weight":4}},{"id":6692,"outV":141,"properties":{"weight":2}},{"id":6310,"outV":123,"properties":{"weight":1}},{"id":6448,"outV":187,"properties":{"wei
 ght":3}},{"id":2225,"outV":226,"properties":{"weight":1}},{"id":5042,"outV":209,"properties":{"weight":1}},{"id":4789,"outV":114,"properties":{"weight":2}},{"id":1464,"outV":81,"properties":{"weight":1}},{"id":2232,"outV":215,"properties":{"weight":1}},{"id":4665,"outV":154,"properties":{"weight":1}},{"id":2235,"outV":29,"properties":{"weight":163}},{"id":6208,"outV":319,"properties":{"weight":4}},{"id":706,"outV":206,"properties":{"weight":2}},{"id":835,"outV":171,"properties":{"weight":1}},{"id":5188,"outV":99,"properties":{"weight":1}},{"id":1862,"outV":94,"properties":{"weight":10}},{"id":1735,"outV":82,"properties":{"weight":1}},{"id":6343,"outV":21,"properties":{"weight":1}},{"id":4937,"outV":277,"properties":{"weight":1}},{"id":3276,"outV":160,"properties":{"weight":1}},{"id":3149,"outV":104,"properties":{"weight":1}},{"id":1358,"outV":130,"properties":{"weight":18}},{"id":4304,"outV":110,"properties":{"weight":1}},{"id":1105,"outV":59,"properties":{"weight":1}},{"id":722,"ou
 tV":80,"properties":{"weight":1}},{"id":4182,"outV":54,"properties":{"weight":1}},{"id":1499,"outV":164,"properties":{"weight":2}},{"id":2397,"outV":179,"properties":{"weight":1}},{"id":351,"outV":178,"properties":{"weight":1}},{"id":6623,"outV":127,"properties":{"weight":3}},{"id":2018,"outV":149,"properties":{"weight":1}},{"id":7011,"outV":89,"properties":{"weight":2}},{"id":5348,"outV":165,"properties":{"weight":1}},{"id":2278,"outV":25,"properties":{"weight":7}},{"id":1255,"outV":27,"properties":{"weight":2}},{"id":3048,"outV":153,"properties":{"weight":13}},{"id":5867,"outV":96,"properties":{"weight":116}},{"id":364,"outV":74,"properties":{"weight":2}},{"id":492,"outV":98,"properties":{"weight":1}},{"id":3948,"outV":138,"properties":{"weight":4}},{"id":4335,"outV":62,"properties":{"weight":1}},{"id":3312,"outV":252,"properties":{"weight":1}},{"id":5745,"outV":129,"properties":{"weight":1}},{"id":4596,"outV":85,"properties":{"weight":3}},{"id":5367,"outV":132,"properties":{"weig
 ht":1}},{"id":633,"outV":23,"properties":{"weight":1}},{"id":891,"outV":140,"properties":{"weight":2}},{"id":5375,"outV":69,"properties":{"weight":1}},{"id":6143,"outV":289,"properties":{"weight":3}}]},"outE":{"followedBy":[{"id":3712,"inV":27,"properties":{"weight":1}},{"id":3713,"inV":110,"properties":{"weight":4}},{"id":3714,"inV":215,"properties":{"weight":4}},{"id":3715,"inV":127,"properties":{"weight":10}},{"id":3716,"inV":83,"properties":{"weight":3}},{"id":3717,"inV":103,"properties":{"weight":2}},{"id":3718,"inV":68,"properties":{"weight":1}},{"id":3719,"inV":134,"properties":{"weight":2}},{"id":3720,"inV":25,"properties":{"weight":10}},{"id":3721,"inV":125,"properties":{"weight":54}},{"id":3722,"inV":130,"properties":{"weight":26}},{"id":3723,"inV":141,"properties":{"weight":2}},{"id":3724,"inV":145,"properties":{"weight":1}},{"id":3725,"inV":319,"properties":{"weight":3}},{"id":3726,"inV":12,"properties":{"weight":1}},{"id":3727,"inV":160,"properties":{"weight":37}},{"id"
 :3728,"inV":70,"properties":{"weight":2}},{"id":3729,"inV":123,"properties":{"weight":1}},{"id":3730,"inV":129,"properties":{"weight":1}},{"id":3731,"inV":30,"properties":{"weight":2}},{"id":3732,"inV":148,"properties":{"weight":1}},{"id":3733,"inV":211,"properties":{"weight":3}},{"id":3734,"inV":87,"properties":{"weight":13}},{"id":3735,"inV":164,"properties":{"weight":4}},{"id":3736,"inV":64,"properties":{"weight":2}},{"id":3737,"inV":320,"properties":{"weight":1}},{"id":3738,"inV":61,"properties":{"weight":3}},{"id":3739,"inV":210,"properties":{"weight":3}},{"id":3740,"inV":50,"properties":{"weight":7}},{"id":3741,"inV":128,"properties":{"weight":3}},{"id":3742,"inV":315,"properties":{"weight":1}},{"id":3743,"inV":261,"properties":{"weight":1}},{"id":3744,"inV":213,"properties":{"weight":13}},{"id":3745,"inV":72,"properties":{"weight":1}},{"id":3746,"inV":38,"properties":{"weight":4}},{"id":3747,"inV":204,"properties":{"weight":14}},{"id":3748,"inV":62,"properties":{"weight":2}},
 {"id":3749,"inV":150,"properties":{"weight":8}},{"id":3750,"inV":309,"properties":{"weight":1}},{"id":3751,"inV":131,"properties":{"weight":1}},{"id":3752,"inV":151,"properties":{"weight":1}},{"id":3753,"inV":321,"properties":{"weight":1}},{"id":3754,"inV":90,"properties":{"weight":2}},{"id":3755,"inV":82,"properties":{"weight":1}},{"id":3756,"inV":120,"properties":{"weight":1}},{"id":3757,"inV":46,"properties":{"weight":5}},{"id":3758,"inV":157,"properties":{"weight":5}},{"id":3759,"inV":59,"properties":{"weight":1}},{"id":3760,"inV":81,"properties":{"weight":1}},{"id":3761,"inV":86,"properties":{"weight":5}},{"id":3762,"inV":140,"properties":{"weight":1}},{"id":3763,"inV":201,"properties":{"weight":1}},{"id":3764,"inV":214,"properties":{"weight":1}},{"id":3765,"inV":185,"properties":{"weight":2}},{"id":3766,"inV":216,"properties":{"weight":1}},{"id":3767,"inV":217,"properties":{"weight":2}},{"id":3768,"inV":236,"properties":{"weight":5}},{"id":3769,"inV":193,"properties":{"weight"
 :1}},{"id":3770,"inV":79,"properties":{"weight":2}},{"id":3771,"inV":84,"properties":{"weight":1}},{"id":3772,"inV":23,"properties":{"weight":2}},{"id":3773,"inV":31,"properties":{"weight":2}},{"id":3774,"inV":240,"properties":{"weight":1}},{"id":3775,"inV":292,"properties":{"weight":1}},{"id":3776,"inV":9,"properties":{"weight":1}},{"id":3777,"inV":259,"properties":{"weight":1}},{"id":3694,"inV":5,"properties":{"weight":57}},{"id":3695,"inV":114,"properties":{"weight":30}},{"id":3696,"inV":74,"properties":{"weight":2}},{"id":3697,"inV":78,"properties":{"weight":3}},{"id":3698,"inV":10,"properties":{"weight":1}},{"id":3699,"inV":26,"properties":{"weight":4}},{"id":3700,"inV":153,"properties":{"weight":7}},{"id":3701,"inV":4,"properties":{"weight":4}},{"id":3702,"inV":317,"properties":{"weight":1}},{"id":3703,"inV":13,"properties":{"weight":5}},{"id":3704,"inV":1,"properties":{"weight":2}},{"id":3705,"inV":21,"properties":{"weight":2}},{"id":3706,"inV":57,"properties":{"weight":2}},{
 "id":3707,"inV":122,"properties":{"weight":2}},{"id":3708,"inV":318,"properties":{"weight":1}},{"id":3709,"inV":94,"properties":{"weight":26}},{"id":3710,"inV":96,"properties":{"weight":7}},{"id":3711,"inV":124,"properties":{"weight":15}}],"sungBy":[{"id":7808,"inV":351}],"writtenBy":[{"id":7807,"inV":671}]},"properties":{"name":[{"id":6,"value":"NOT FADE AWAY"}],"songType":[{"id":8,"value":"cover"}],"performances":[{"id":7,"value":531}]}}
+{"id":4,"label":"song","inE":{"followedBy":[{"id":128,"outV":97,"properties":{"weight":1}},{"id":1664,"outV":267,"properties":{"weight":1}},{"id":2,"outV":1,"properties":{"weight":1}},{"id":899,"outV":140,"properties":{"weight":1}},{"id":1667,"outV":124,"properties":{"weight":15}},{"id":4099,"outV":48,"properties":{"weight":1}},{"id":1156,"outV":26,"properties":{"weight":16}},{"id":773,"outV":122,"properties":{"weight":9}},{"id":6534,"outV":242,"properties":{"weight":1}},{"id":1032,"outV":73,"properties":{"weight":1}},{"id":6664,"outV":12,"properties":{"weight":3}},{"id":5129,"outV":222,"properties":{"weight":1}},{"id":5387,"outV":69,"properties":{"weight":1}},{"id":5517,"outV":43,"properties":{"weight":2}},{"id":5006,"outV":30,"properties":{"weight":2}},{"id":6030,"outV":204,"properties":{"weight":2}},{"id":2063,"outV":92,"properties":{"weight":1}},{"id":915,"outV":91,"properties":{"weight":2}},{"id":6940,"outV":84,"properties":{"weight":5}},{"id":2464,"outV":68,"properties":{"weig
 ht":1}},{"id":5795,"outV":76,"properties":{"weight":2}},{"id":3620,"outV":24,"properties":{"weight":2}},{"id":4772,"outV":114,"properties":{"weight":25}},{"id":2982,"outV":14,"properties":{"weight":3}},{"id":3367,"outV":184,"properties":{"weight":6}},{"id":2345,"outV":87,"properties":{"weight":2}},{"id":2861,"outV":101,"properties":{"weight":6}},{"id":1840,"outV":275,"properties":{"weight":1}},{"id":5425,"outV":102,"properties":{"weight":1}},{"id":180,"outV":70,"properties":{"weight":46}},{"id":2613,"outV":158,"properties":{"weight":1}},{"id":5434,"outV":217,"properties":{"weight":1}},{"id":5562,"outV":162,"properties":{"weight":2}},{"id":1469,"outV":81,"properties":{"weight":1}},{"id":446,"outV":38,"properties":{"weight":7}},{"id":2494,"outV":90,"properties":{"weight":3}},{"id":3266,"outV":160,"properties":{"weight":10}},{"id":326,"outV":34,"properties":{"weight":1}},{"id":583,"outV":120,"properties":{"weight":2}},{"id":6855,"outV":64,"properties":{"weight":12}},{"id":73,"outV":46,
 "properties":{"weight":4}},{"id":4425,"outV":212,"properties":{"weight":1}},{"id":1613,"outV":210,"properties":{"weight":2}},{"id":4941,"outV":86,"properties":{"weight":2}},{"id":6350,"outV":21,"properties":{"weight":1}},{"id":3535,"outV":201,"properties":{"weight":1}},{"id":980,"outV":11,"properties":{"weight":3}},{"id":1494,"outV":164,"properties":{"weight":3}},{"id":5206,"outV":99,"properties":{"weight":1}},{"id":5847,"outV":61,"properties":{"weight":2}},{"id":6490,"outV":187,"properties":{"weight":1}},{"id":2781,"outV":15,"properties":{"weight":4}},{"id":5600,"outV":42,"properties":{"weight":1}},{"id":353,"outV":74,"properties":{"weight":6}},{"id":5474,"outV":79,"properties":{"weight":1}},{"id":1891,"outV":103,"properties":{"weight":19}},{"id":3811,"outV":88,"properties":{"weight":2}},{"id":5989,"outV":50,"properties":{"weight":12}},{"id":4327,"outV":110,"properties":{"weight":2}},{"id":2538,"outV":57,"properties":{"weight":4}},{"id":3050,"outV":153,"properties":{"weight":13}},{
 "id":4970,"outV":236,"properties":{"weight":1}},{"id":2283,"outV":25,"properties":{"weight":9}},{"id":236,"outV":145,"properties":{"weight":1}},{"id":6126,"outV":72,"properties":{"weight":2}},{"id":5232,"outV":214,"properties":{"weight":2}},{"id":4594,"outV":85,"properties":{"weight":1}},{"id":1652,"outV":213,"properties":{"weight":3}},{"id":4084,"outV":109,"properties":{"weight":1}},{"id":629,"outV":23,"properties":{"weight":10}},{"id":3701,"outV":3,"properties":{"weight":4}},{"id":5621,"outV":22,"properties":{"weight":1}},{"id":7029,"outV":89,"properties":{"weight":1}},{"id":5238,"outV":32,"properties":{"weight":3}},{"id":2684,"outV":13,"properties":{"weight":9}},{"id":3325,"outV":268,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":5120,"inV":40,"properties":{"weight":5}},{"id":5121,"inV":33,"properties":{"weight":3}},{"id":5122,"inV":79,"properties":{"weight":1}},{"id":5123,"inV":292,"properties":{"weight":1}},{"id":5071,"inV":50,"properties":{"weight":9}},{"id":5072,"in
 V":12,"properties":{"weight":26}},{"id":5073,"inV":18,"properties":{"weight":4}},{"id":5074,"inV":24,"properties":{"weight":9}},{"id":5075,"inV":23,"properties":{"weight":63}},{"id":5076,"inV":13,"properties":{"weight":12}},{"id":5077,"inV":10,"properties":{"weight":4}},{"id":5078,"inV":11,"properties":{"weight":3}},{"id":5079,"inV":26,"properties":{"weight":18}},{"id":5080,"inV":22,"properties":{"weight":1}},{"id":5081,"inV":16,"properties":{"weight":2}},{"id":5082,"inV":49,"properties":{"weight":1}},{"id":5083,"inV":25,"properties":{"weight":2}},{"id":5084,"inV":51,"properties":{"weight":1}},{"id":5085,"inV":15,"properties":{"weight":1}},{"id":5086,"inV":112,"properties":{"weight":4}},{"id":5087,"inV":121,"properties":{"weight":1}},{"id":5088,"inV":32,"properties":{"weight":7}},{"id":5089,"inV":68,"properties":{"weight":2}},{"id":5090,"inV":120,"properties":{"weight":77}},{"id":5091,"inV":103,"properties":{"weight":1}},{"id":5092,"inV":42,"properties":{"weight":3}},{"id":5093,"inV
 ":85,"properties":{"weight":4}},{"id":5094,"inV":76,"properties":{"weight":5}},{"id":5095,"inV":181,"properties":{"weight":2}},{"id":5096,"inV":14,"properties":{"weight":2}},{"id":5097,"inV":122,"properties":{"weight":1}},{"id":5098,"inV":153,"properties":{"weight":3}},{"id":5099,"inV":96,"properties":{"weight":1}},{"id":5100,"inV":82,"properties":{"weight":3}},{"id":5101,"inV":110,"properties":{"weight":1}},{"id":5102,"inV":19,"properties":{"weight":6}},{"id":5103,"inV":129,"properties":{"weight":1}},{"id":5104,"inV":84,"properties":{"weight":1}},{"id":5105,"inV":88,"properties":{"weight":9}},{"id":5106,"inV":97,"properties":{"weight":1}},{"id":5107,"inV":114,"properties":{"weight":2}},{"id":5108,"inV":30,"properties":{"weight":8}},{"id":5109,"inV":31,"properties":{"weight":8}},{"id":5110,"inV":69,"properties":{"weight":4}},{"id":5111,"inV":127,"properties":{"weight":2}},{"id":5112,"inV":60,"properties":{"weight":1}},{"id":5113,"inV":39,"properties":{"weight":2}},{"id":5114,"inV":2
 1,"properties":{"weight":1}},{"id":5115,"inV":117,"properties":{"weight":1}},{"id":5116,"inV":78,"properties":{"weight":1}},{"id":5117,"inV":38,"properties":{"weight":1}},{"id":5118,"inV":169,"properties":{"weight":2}},{"id":5119,"inV":118,"properties":{"weight":1}}],"sungBy":[{"id":7064,"inV":340}],"writtenBy":[{"id":7063,"inV":339}]},"properties":{"name":[{"id":9,"value":"BERTHA"}],"songType":[{"id":11,"value":"original"}],"performances":[{"id":10,"value":394}]}}
+{"id":5,"label":"song","inE":{"followedBy":[{"id":194,"outV":70,"properties":{"weight":8}},{"id":962,"outV":67,"properties":{"weight":5}},{"id":3,"outV":1,"properties":{"weight":1}},{"id":5446,"outV":231,"properties":{"weight":5}},{"id":6344,"outV":21,"properties":{"weight":6}},{"id":1738,"outV":82,"properties":{"weight":1}},{"id":6666,"outV":12,"properties":{"weight":1}},{"id":1867,"outV":94,"properties":{"weight":15}},{"id":4300,"outV":110,"properties":{"weight":1}},{"id":847,"outV":171,"properties":{"weight":1}},{"id":2832,"outV":101,"properties":{"weight":3}},{"id":6032,"outV":115,"properties":{"weight":1}},{"id":1170,"outV":26,"properties":{"weight":1}},{"id":5330,"outV":238,"properties":{"weight":1}},{"id":1491,"outV":164,"properties":{"weight":3}},{"id":1429,"outV":83,"properties":{"weight":3}},{"id":3033,"outV":14,"properties":{"weight":1}},{"id":6298,"outV":49,"properties":{"weight":1}},{"id":1373,"outV":130,"properties":{"weight":11}},{"id":4447,"outV":113,"properties":{"w
 eight":1}},{"id":5151,"outV":125,"properties":{"weight":6}},{"id":5343,"outV":165,"properties":{"weight":2}},{"id":6431,"outV":134,"properties":{"weight":2}},{"id":1953,"outV":148,"properties":{"weight":10}},{"id":1634,"outV":210,"properties":{"weight":1}},{"id":2274,"outV":25,"properties":{"weight":8}},{"id":100,"outV":46,"properties":{"weight":1}},{"id":933,"outV":91,"properties":{"weight":1}},{"id":2021,"outV":149,"properties":{"weight":1}},{"id":6694,"outV":141,"properties":{"weight":2}},{"id":4009,"outV":225,"properties":{"weight":1}},{"id":682,"outV":219,"properties":{"weight":1}},{"id":3694,"outV":3,"properties":{"weight":57}},{"id":4718,"outV":186,"properties":{"weight":6}},{"id":3055,"outV":153,"properties":{"weight":9}},{"id":2480,"outV":68,"properties":{"weight":1}},{"id":2736,"outV":13,"properties":{"weight":3}},{"id":5426,"outV":102,"properties":{"weight":1}},{"id":6899,"outV":147,"properties":{"weight":1}},{"id":5879,"outV":96,"properties":{"weight":22}},{"id":6201,"ou
 tV":319,"properties":{"weight":2}},{"id":5370,"outV":132,"properties":{"weight":2}},{"id":700,"outV":206,"properties":{"weight":1}},{"id":2236,"outV":29,"properties":{"weight":5}},{"id":4604,"outV":85,"properties":{"weight":2}},{"id":5759,"outV":129,"properties":{"weight":6}}]},"outE":{"followedBy":[{"id":273,"inV":3,"properties":{"weight":40}},{"id":274,"inV":26,"properties":{"weight":3}},{"id":275,"inV":114,"properties":{"weight":40}},{"id":276,"inV":1,"properties":{"weight":2}},{"id":277,"inV":74,"properties":{"weight":3}},{"id":278,"inV":122,"properties":{"weight":3}},{"id":279,"inV":133,"properties":{"weight":2}},{"id":280,"inV":83,"properties":{"weight":1}},{"id":281,"inV":153,"properties":{"weight":5}},{"id":282,"inV":159,"properties":{"weight":1}},{"id":283,"inV":13,"properties":{"weight":3}},{"id":284,"inV":25,"properties":{"weight":19}},{"id":285,"inV":96,"properties":{"weight":10}},{"id":286,"inV":160,"properties":{"weight":2}},{"id":287,"inV":32,"properties":{"weight":1}
 },{"id":288,"inV":120,"properties":{"weight":16}},{"id":289,"inV":50,"properties":{"weight":1}},{"id":290,"inV":116,"properties":{"weight":1}},{"id":291,"inV":127,"properties":{"weight":6}},{"id":292,"inV":65,"properties":{"weight":1}},{"id":293,"inV":130,"properties":{"weight":3}},{"id":294,"inV":125,"properties":{"weight":5}},{"id":295,"inV":70,"properties":{"weight":13}},{"id":296,"inV":134,"properties":{"weight":1}},{"id":297,"inV":161,"properties":{"weight":1}},{"id":298,"inV":162,"properties":{"weight":1}},{"id":299,"inV":124,"properties":{"weight":3}},{"id":300,"inV":38,"properties":{"weight":1}},{"id":301,"inV":29,"properties":{"weight":11}},{"id":302,"inV":163,"properties":{"weight":1}},{"id":303,"inV":94,"properties":{"weight":5}},{"id":304,"inV":85,"properties":{"weight":1}},{"id":305,"inV":164,"properties":{"weight":6}},{"id":306,"inV":64,"properties":{"weight":1}},{"id":307,"inV":150,"properties":{"weight":1}},{"id":308,"inV":165,"properties":{"weight":7}},{"id":309,"in
 V":92,"properties":{"weight":1}},{"id":310,"inV":140,"properties":{"weight":1}},{"id":311,"inV":166,"properties":{"weight":1}}],"sungBy":[{"id":7582,"inV":340}],"writtenBy":[{"id":7581,"inV":446}]},"properties":{"name":[{"id":12,"value":"GOING DOWN THE ROAD FEELING BAD"}],"songType":[{"id":14,"value":"cover"}],"performances":[{"id":13,"value":293}]}}
+{"id":6,"label":"song","inE":{"followedBy":[{"id":4,"outV":1,"properties":{"weight":1}},{"id":2023,"outV":282,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":2406,"inV":293,"properties":{"weight":1}},{"id":2407,"inV":96,"properties":{"weight":1}}],"sungBy":[{"id":7782,"inV":351}],"writtenBy":[{"id":7781,"inV":527}]},"properties":{"name":[{"id":15,"value":"MONA"}],"songType":[{"id":17,"value":"cover"}],"performances":[{"id":16,"value":1}]}}
+{"id":7,"label":"song","inE":{"followedBy":[{"id":2607,"outV":295,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":5,"inV":8,"properties":{"weight":1}}]},"properties":{"name":[{"id":18,"value":"WHERE HAVE THE HEROES GONE"}],"songType":[{"id":20,"value":""}],"performances":[{"id":19,"value":0}]}}
+{"id":8,"label":"song","inE":{"followedBy":[{"id":4705,"outV":111,"properties":{"weight":1}},{"id":5,"outV":7,"properties":{"weight":1}},{"id":5901,"outV":96,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":2976,"inV":302,"properties":{"weight":1}},{"id":2977,"inV":96,"properties":{"weight":1}},{"id":2978,"inV":72,"properties":{"weight":1}}],"sungBy":[{"id":7814,"inV":351}],"writtenBy":[{"id":7813,"inV":674}]},"properties":{"name":[{"id":21,"value":"OH BOY"}],"songType":[{"id":23,"value":"cover"}],"performances":[{"id":22,"value":2}]}}
+{"id":9,"label":"song","inE":{"followedBy":[{"id":3776,"outV":3,"properties":{"weight":1}},{"id":65,"outV":46,"properties":{"weight":2}},{"id":1923,"outV":103,"properties":{"weight":3}},{"id":5956,"outV":50,"properties":{"weight":2}},{"id":3077,"outV":153,"properties":{"weight":2}},{"id":5832,"outV":76,"properties":{"weight":1}},{"id":1161,"outV":26,"properties":{"weight":8}},{"id":2699,"outV":13,"properties":{"weight":3}},{"id":6539,"outV":55,"properties":{"weight":1}},{"id":6667,"outV":12,"properties":{"weight":2}},{"id":2578,"outV":57,"properties":{"weight":2}},{"id":787,"outV":122,"properties":{"weight":3}},{"id":3542,"outV":201,"properties":{"weight":1}},{"id":2775,"outV":15,"properties":{"weight":5}},{"id":2840,"outV":101,"properties":{"weight":2}},{"id":4953,"outV":86,"properties":{"weight":2}},{"id":1572,"outV":18,"properties":{"weight":3}},{"id":229,"outV":70,"properties":{"weight":1}},{"id":4264,"outV":10,"properties":{"weight":1}},{"id":4969,"outV":236,"properties":{"weig
 ht":3}},{"id":3498,"outV":58,"properties":{"weight":2}},{"id":5226,"outV":216,"properties":{"weight":1}},{"id":5548,"outV":166,"properties":{"weight":1}},{"id":2990,"outV":14,"properties":{"weight":4}},{"id":3950,"outV":138,"properties":{"weight":1}},{"id":2488,"outV":68,"properties":{"weight":1}},{"id":6776,"outV":39,"properties":{"weight":1}},{"id":3641,"outV":24,"properties":{"weight":2}},{"id":1532,"outV":164,"properties":{"weight":2}},{"id":1853,"outV":94,"properties":{"weight":1}},{"id":638,"outV":23,"properties":{"weight":2}},{"id":6335,"outV":21,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":6,"inV":10,"properties":{"weight":3}},{"id":7,"inV":11,"properties":{"weight":2}},{"id":8,"inV":12,"properties":{"weight":3}},{"id":9,"inV":13,"properties":{"weight":6}},{"id":10,"inV":14,"properties":{"weight":3}},{"id":11,"inV":15,"properties":{"weight":3}},{"id":12,"inV":16,"properties":{"weight":1}},{"id":13,"inV":17,"properties":{"weight":1}},{"id":14,"inV":18,"properties"
 :{"weight":5}},{"id":15,"inV":19,"properties":{"weight":1}},{"id":16,"inV":20,"properties":{"weight":1}},{"id":17,"inV":21,"properties":{"weight":1}},{"id":18,"inV":22,"properties":{"weight":2}},{"id":19,"inV":23,"properties":{"weight":2}},{"id":20,"inV":24,"properties":{"weight":1}},{"id":21,"inV":25,"properties":{"weight":1}},{"id":22,"inV":26,"properties":{"weight":1}},{"id":23,"inV":27,"properties":{"weight":1}},{"id":24,"inV":28,"properties":{"weight":2}},{"id":25,"inV":29,"properties":{"weight":1}},{"id":26,"inV":30,"properties":{"weight":5}},{"id":27,"inV":31,"properties":{"weight":2}},{"id":28,"inV":32,"properties":{"weight":1}},{"id":29,"inV":33,"properties":{"weight":2}},{"id":30,"inV":34,"properties":{"weight":2}},{"id":31,"inV":35,"properties":{"weight":3}},{"id":32,"inV":36,"properties":{"weight":2}},{"id":33,"inV":37,"properties":{"weight":3}},{"id":34,"inV":38,"properties":{"weight":1}},{"id":35,"inV":39,"properties":{"weight":1}},{"id":36,"inV":40,"properties":{"weig
 ht":1}},{"id":37,"inV":41,"properties":{"weight":1}},{"id":38,"inV":42,"properties":{"weight":1}},{"id":39,"inV":43,"properties":{"weight":1}}],"sungBy":[{"id":7190,"inV":340}],"writtenBy":[{"id":7189,"inV":339}]},"properties":{"name":[{"id":24,"value":"HERE COMES SUNSHINE"}],"songType":[{"id":26,"value":"original"}],"performances":[{"id":25,"value":65}]}}
+{"id":10,"label":"song","inE":{"followedBy":[{"id":3841,"outV":60,"properties":{"weight":1}},{"id":1027,"outV":73,"properties":{"weight":5}},{"id":6,"outV":9,"properties":{"weight":3}},{"id":3335,"outV":155,"properties":{"weight":1}},{"id":4103,"outV":48,"properties":{"weight":5}},{"id":6279,"outV":49,"properties":{"weight":1}},{"id":4233,"outV":52,"properties":{"weight":1}},{"id":4878,"outV":100,"properties":{"weight":19}},{"id":5264,"outV":32,"properties":{"weight":2}},{"id":2196,"outV":75,"properties":{"weight":4}},{"id":151,"outV":108,"properties":{"weight":3}},{"id":1571,"outV":18,"properties":{"weight":5}},{"id":3619,"outV":24,"properties":{"weight":2}},{"id":3237,"outV":63,"properties":{"weight":3}},{"id":4647,"outV":154,"properties":{"weight":1}},{"id":4521,"outV":105,"properties":{"weight":3}},{"id":1195,"outV":26,"properties":{"weight":1}},{"id":6444,"outV":187,"properties":{"weight":9}},{"id":6956,"outV":84,"properties":{"weight":1}},{"id":687,"outV":157,"properties":{"we
 ight":1}},{"id":4784,"outV":114,"properties":{"weight":1}},{"id":6064,"outV":115,"properties":{"weight":1}},{"id":1714,"outV":82,"properties":{"weight":3}},{"id":3890,"outV":51,"properties":{"weight":9}},{"id":55,"outV":46,"properties":{"weight":1}},{"id":5175,"outV":71,"properties":{"weight":1}},{"id":1337,"outV":31,"properties":{"weight":1}},{"id":1083,"outV":59,"properties":{"weight":10}},{"id":4155,"outV":54,"properties":{"weight":6}},{"id":6077,"outV":72,"properties":{"weight":5}},{"id":5441,"outV":239,"properties":{"weight":1}},{"id":1987,"outV":152,"properties":{"weight":2}},{"id":1860,"outV":94,"properties":{"weight":1}},{"id":2116,"outV":17,"properties":{"weight":7}},{"id":3269,"outV":160,"properties":{"weight":2}},{"id":454,"outV":38,"properties":{"weight":1}},{"id":3142,"outV":104,"properties":{"weight":4}},{"id":2505,"outV":57,"properties":{"weight":12}},{"id":6603,"outV":127,"properties":{"weight":4}},{"id":6859,"outV":64,"properties":{"weight":1}},{"id":717,"outV":80,"
 properties":{"weight":9}},{"id":1360,"outV":130,"properties":{"weight":2}},{"id":3026,"outV":14,"properties":{"weight":1}},{"id":5972,"outV":50,"properties":{"weight":1}},{"id":5077,"outV":4,"properties":{"weight":4}},{"id":2392,"outV":87,"properties":{"weight":1}},{"id":1250,"outV":27,"properties":{"weight":10}},{"id":4706,"outV":111,"properties":{"weight":3}},{"id":6755,"outV":53,"properties":{"weight":1}},{"id":485,"outV":98,"properties":{"weight":4}},{"id":2917,"outV":78,"properties":{"weight":10}},{"id":3559,"outV":56,"properties":{"weight":16}},{"id":3436,"outV":58,"properties":{"weight":10}},{"id":3820,"outV":88,"properties":{"weight":1}},{"id":4463,"outV":202,"properties":{"weight":4}},{"id":880,"outV":189,"properties":{"weight":1}},{"id":6256,"outV":117,"properties":{"weight":1}},{"id":3698,"outV":3,"properties":{"weight":1}},{"id":2035,"outV":180,"properties":{"weight":1}},{"id":2291,"outV":25,"properties":{"weight":1}},{"id":3317,"outV":252,"properties":{"weight":1}},{"id
 ":2806,"outV":15,"properties":{"weight":2}},{"id":2427,"outV":68,"properties":{"weight":2}},{"id":6782,"outV":39,"properties":{"weight":4}},{"id":4351,"outV":62,"properties":{"weight":2}}]},"outE":{"followedBy":[{"id":4235,"inV":56,"properties":{"weight":13}},{"id":4236,"inV":27,"properties":{"weight":7}},{"id":4237,"inV":58,"properties":{"weight":11}},{"id":4238,"inV":80,"properties":{"weight":6}},{"id":4239,"inV":59,"properties":{"weight":9}},{"id":4240,"inV":100,"properties":{"weight":21}},{"id":4241,"inV":104,"properties":{"weight":5}},{"id":4242,"inV":50,"properties":{"weight":2}},{"id":4243,"inV":48,"properties":{"weight":8}},{"id":4244,"inV":54,"properties":{"weight":13}},{"id":4245,"inV":19,"properties":{"weight":9}},{"id":4246,"inV":72,"properties":{"weight":4}},{"id":4247,"inV":14,"properties":{"weight":1}},{"id":4248,"inV":122,"properties":{"weight":2}},{"id":4249,"inV":235,"properties":{"weight":1}},{"id":4250,"inV":218,"properties":{"weight":1}},{"id":4251,"inV":252,"pr
 operties":{"weight":1}},{"id":4252,"inV":89,"properties":{"weight":3}},{"id":4253,"inV":57,"properties":{"weight":12}},{"id":4254,"inV":49,"properties":{"weight":3}},{"id":4255,"inV":94,"properties":{"weight":3}},{"id":4256,"inV":153,"properties":{"weight":1}},{"id":4257,"inV":13,"properties":{"weight":1}},{"id":4258,"inV":160,"properties":{"weight":1}},{"id":4259,"inV":51,"properties":{"weight":10}},{"id":4260,"inV":18,"properties":{"weight":3}},{"id":4261,"inV":202,"properties":{"weight":4}},{"id":4262,"inV":17,"properties":{"weight":5}},{"id":4263,"inV":46,"properties":{"weight":1}},{"id":4264,"inV":9,"properties":{"weight":1}},{"id":4265,"inV":55,"properties":{"weight":1}},{"id":4266,"inV":125,"properties":{"weight":1}},{"id":4267,"inV":69,"properties":{"weight":2}},{"id":4268,"inV":98,"properties":{"weight":8}},{"id":4269,"inV":82,"properties":{"weight":4}},{"id":4270,"inV":154,"properties":{"weight":1}},{"id":4271,"inV":105,"properties":{"weight":7}},{"id":4272,"inV":112,"prop
 erties":{"weight":2}},{"id":4273,"inV":109,"properties":{"weight":1}},{"id":4274,"inV":42,"properties":{"weight":2}},{"id":4275,"inV":121,"properties":{"weight":1}},{"id":4276,"inV":73,"properties":{"weight":5}},{"id":4277,"inV":106,"properties":{"weight":1}},{"id":4278,"inV":116,"properties":{"weight":1}},{"id":4279,"inV":68,"properties":{"weight":2}},{"id":4280,"inV":152,"properties":{"weight":1}},{"id":4281,"inV":23,"properties":{"weight":6}},{"id":4282,"inV":88,"properties":{"weight":1}},{"id":4283,"inV":39,"properties":{"weight":4}},{"id":4284,"inV":12,"properties":{"weight":1}},{"id":4285,"inV":111,"properties":{"weight":1}},{"id":4286,"inV":99,"properties":{"weight":1}},{"id":4287,"inV":87,"properties":{"weight":2}},{"id":4288,"inV":108,"properties":{"weight":2}},{"id":4289,"inV":53,"properties":{"weight":4}},{"id":4290,"inV":26,"properties":{"weight":5}},{"id":4291,"inV":117,"properties":{"weight":2}},{"id":4292,"inV":115,"properties":{"weight":2}},{"id":4293,"inV":63,"prope
 rties":{"weight":3}},{"id":4294,"inV":103,"properties":{"weight":1}}],"sungBy":[{"id":7460,"inV":351}],"writtenBy":[{"id":7459,"inV":471}]},"properties":{"name":[{"id":27,"value":"BEAT IT ON DOWN THE LINE"}],"songType":[{"id":29,"value":"cover"}],"performances":[{"id":28,"value":325}]}}
+{"id":11,"label":"song","inE":{"followedBy":[{"id":1088,"outV":59,"properties":{"weight":14}},{"id":6273,"outV":49,"properties":{"weight":2}},{"id":1989,"outV":152,"properties":{"weight":2}},{"id":7,"outV":9,"properties":{"weight":2}},{"id":4552,"outV":105,"properties":{"weight":3}},{"id":521,"outV":205,"properties":{"weight":1}},{"id":714,"outV":80,"properties":{"weight":5}},{"id":3146,"outV":104,"properties":{"weight":3}},{"id":4876,"outV":100,"properties":{"weight":2}},{"id":2190,"outV":235,"properties":{"weight":1}},{"id":4496,"outV":202,"properties":{"weight":1}},{"id":2513,"outV":57,"properties":{"weight":4}},{"id":4053,"outV":173,"properties":{"weight":1}},{"id":5078,"outV":4,"properties":{"weight":3}},{"id":1309,"outV":27,"properties":{"weight":5}},{"id":4769,"outV":114,"properties":{"weight":1}},{"id":5025,"outV":30,"properties":{"weight":1}},{"id":3554,"outV":56,"properties":{"weight":7}},{"id":1064,"outV":73,"properties":{"weight":1}},{"id":2920,"outV":78,"properties":{"w
 eight":2}},{"id":6056,"outV":115,"properties":{"weight":2}},{"id":41,"outV":46,"properties":{"weight":2}},{"id":3434,"outV":58,"properties":{"weight":5}},{"id":6442,"outV":187,"properties":{"weight":7}},{"id":1775,"outV":234,"properties":{"weight":4}},{"id":3888,"outV":51,"properties":{"weight":1}},{"id":626,"outV":23,"properties":{"weight":1}},{"id":1396,"outV":190,"properties":{"weight":1}},{"id":4020,"outV":191,"properties":{"weight":1}},{"id":6772,"outV":39,"properties":{"weight":1}},{"id":3637,"outV":24,"properties":{"weight":2}},{"id":6072,"outV":72,"properties":{"weight":5}},{"id":4157,"outV":54,"properties":{"weight":2}}]},"outE":{"followedBy":[{"id":972,"inV":57,"properties":{"weight":4}},{"id":973,"inV":59,"properties":{"weight":3}},{"id":974,"inV":53,"properties":{"weight":4}},{"id":975,"inV":54,"properties":{"weight":15}},{"id":976,"inV":56,"properties":{"weight":3}},{"id":977,"inV":48,"properties":{"weight":3}},{"id":978,"inV":72,"properties":{"weight":4}},{"id":979,"in
 V":19,"properties":{"weight":9}},{"id":980,"inV":4,"properties":{"weight":3}},{"id":981,"inV":58,"properties":{"weight":6}},{"id":982,"inV":46,"properties":{"weight":1}},{"id":983,"inV":234,"properties":{"weight":7}},{"id":984,"inV":235,"properties":{"weight":2}},{"id":985,"inV":207,"properties":{"weight":4}},{"id":986,"inV":39,"properties":{"weight":3}},{"id":987,"inV":50,"properties":{"weight":1}},{"id":988,"inV":104,"properties":{"weight":2}},{"id":989,"inV":49,"properties":{"weight":1}},{"id":990,"inV":17,"properties":{"weight":3}},{"id":991,"inV":100,"properties":{"weight":1}},{"id":992,"inV":24,"properties":{"weight":1}},{"id":993,"inV":170,"properties":{"weight":2}},{"id":994,"inV":73,"properties":{"weight":1}},{"id":995,"inV":173,"properties":{"weight":1}},{"id":996,"inV":236,"properties":{"weight":1}},{"id":997,"inV":202,"properties":{"weight":3}},{"id":998,"inV":80,"properties":{"weight":2}},{"id":999,"inV":115,"properties":{"weight":4}},{"id":1000,"inV":105,"properties":{
 "weight":1}}],"sungBy":[{"id":7072,"inV":351}],"writtenBy":[{"id":7071,"inV":350}]},"properties":{"name":[{"id":30,"value":"BLACK THROATED WIND"}],"songType":[{"id":32,"value":"original"}],"performances":[{"id":31,"value":158}]}}
+{"id":12,"label":"song","inE":{"followedBy":[{"id":3072,"outV":153,"properties":{"weight":4}},{"id":2433,"outV":68,"properties":{"weight":1}},{"id":1410,"outV":83,"properties":{"weight":1}},{"id":3331,"outV":155,"properties":{"weight":2}},{"id":4227,"outV":52,"properties":{"weight":3}},{"id":1028,"outV":73,"properties":{"weight":12}},{"id":4102,"outV":48,"properties":{"weight":33}},{"id":8,"outV":9,"properties":{"weight":3}},{"id":6281,"outV":49,"properties":{"weight":2}},{"id":652,"outV":23,"properties":{"weight":2}},{"id":5388,"outV":69,"properties":{"weight":1}},{"id":525,"outV":120,"properties":{"weight":1}},{"id":3726,"outV":3,"properties":{"weight":1}},{"id":783,"outV":122,"properties":{"weight":1}},{"id":3855,"outV":60,"properties":{"weight":1}},{"id":1938,"outV":148,"properties":{"weight":1}},{"id":3986,"outV":106,"properties":{"weight":1}},{"id":916,"outV":91,"properties":{"weight":1}},{"id":1172,"outV":26,"properties":{"weight":4}},{"id":6935,"outV":84,"properties":{"weigh
 t":5}},{"id":3225,"outV":63,"properties":{"weight":4}},{"id":5017,"outV":30,"properties":{"weight":1}},{"id":155,"outV":108,"properties":{"weight":6}},{"id":2203,"outV":75,"properties":{"weight":3}},{"id":4893,"outV":100,"properties":{"weight":7}},{"id":4640,"outV":154,"properties":{"weight":10}},{"id":5665,"outV":169,"properties":{"weight":1}},{"id":1702,"outV":124,"properties":{"weight":1}},{"id":2598,"outV":112,"properties":{"weight":7}},{"id":5286,"outV":32,"properties":{"weight":4}},{"id":3879,"outV":51,"properties":{"weight":12}},{"id":4007,"outV":225,"properties":{"weight":1}},{"id":424,"outV":38,"properties":{"weight":5}},{"id":4522,"outV":105,"properties":{"weight":12}},{"id":5034,"outV":47,"properties":{"weight":1}},{"id":4779,"outV":114,"properties":{"weight":3}},{"id":6576,"outV":116,"properties":{"weight":1}},{"id":6835,"outV":64,"properties":{"weight":1}},{"id":6455,"outV":187,"properties":{"weight":12}},{"id":824,"outV":171,"properties":{"weight":1}},{"id":5304,"outV"
 :170,"properties":{"weight":2}},{"id":1722,"outV":82,"properties":{"weight":1}},{"id":6074,"outV":72,"properties":{"weight":4}},{"id":4284,"outV":10,"properties":{"weight":1}},{"id":2109,"outV":17,"properties":{"weight":24}},{"id":703,"outV":206,"properties":{"weight":2}},{"id":5440,"outV":239,"properties":{"weight":2}},{"id":5952,"outV":50,"properties":{"weight":7}},{"id":1858,"outV":94,"properties":{"weight":2}},{"id":1347,"outV":31,"properties":{"weight":1}},{"id":1605,"outV":18,"properties":{"weight":1}},{"id":4165,"outV":54,"properties":{"weight":17}},{"id":3654,"outV":24,"properties":{"weight":3}},{"id":4038,"outV":173,"properties":{"weight":1}},{"id":6598,"outV":127,"properties":{"weight":1}},{"id":3271,"outV":160,"properties":{"weight":1}},{"id":3527,"outV":223,"properties":{"weight":1}},{"id":1096,"outV":59,"properties":{"weight":26}},{"id":3144,"outV":104,"properties":{"weight":24}},{"id":1993,"outV":152,"properties":{"weight":2}},{"id":6985,"outV":175,"properties":{"weigh
 t":1}},{"id":6730,"outV":53,"properties":{"weight":4}},{"id":3019,"outV":14,"properties":{"weight":1}},{"id":3788,"outV":168,"properties":{"weight":1}},{"id":5072,"outV":4,"properties":{"weight":26}},{"id":2515,"outV":57,"properties":{"weight":3}},{"id":1365,"outV":130,"properties":{"weight":2}},{"id":2647,"outV":137,"properties":{"weight":1}},{"id":730,"outV":80,"properties":{"weight":12}},{"id":2780,"outV":15,"properties":{"weight":3}},{"id":482,"outV":98,"properties":{"weight":8}},{"id":3810,"outV":88,"properties":{"weight":6}},{"id":7013,"outV":89,"properties":{"weight":1}},{"id":4072,"outV":109,"properties":{"weight":1}},{"id":2281,"outV":25,"properties":{"weight":2}},{"id":2668,"outV":13,"properties":{"weight":3}},{"id":3565,"outV":56,"properties":{"weight":9}},{"id":1262,"outV":27,"properties":{"weight":17}},{"id":2031,"outV":180,"properties":{"weight":1}},{"id":6769,"outV":39,"properties":{"weight":2}},{"id":1779,"outV":234,"properties":{"weight":1}},{"id":4468,"outV":202,"p
 roperties":{"weight":4}},{"id":1909,"outV":103,"properties":{"weight":1}},{"id":2934,"outV":78,"properties":{"weight":1}},{"id":3446,"outV":58,"properties":{"weight":4}},{"id":381,"outV":74,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":6656,"inV":49,"properties":{"weight":9}},{"id":6657,"inV":19,"properties":{"weight":3}},{"id":6658,"inV":27,"properties":{"weight":9}},{"id":6659,"inV":252,"properties":{"weight":1}},{"id":6660,"inV":206,"properties":{"weight":1}},{"id":6661,"inV":89,"properties":{"weight":4}},{"id":6662,"inV":160,"properties":{"weight":1}},{"id":6663,"inV":15,"properties":{"weight":167}},{"id":6664,"inV":4,"properties":{"weight":3}},{"id":6665,"inV":202,"properties":{"weight":2}},{"id":6666,"inV":5,"properties":{"weight":1}},{"id":6667,"inV":9,"properties":{"weight":2}},{"id":6668,"inV":83,"properties":{"weight":3}},{"id":6669,"inV":3,"properties":{"weight":1}},{"id":6670,"inV":52,"properties":{"weight":1}},{"id":6671,"inV":25,"properties":{"weight":1}},{"
 id":6672,"inV":46,"properties":{"weight":1}},{"id":6673,"inV":123,"properties":{"weight":2}},{"id":6674,"inV":51,"properties":{"weight":4}},{"id":6675,"inV":17,"properties":{"weight":3}},{"id":6676,"inV":56,"properties":{"weight":5}},{"id":6677,"inV":98,"properties":{"weight":5}},{"id":6678,"inV":104,"properties":{"weight":4}},{"id":6679,"inV":69,"properties":{"weight":3}},{"id":6680,"inV":170,"properties":{"weight":2}},{"id":6681,"inV":82,"properties":{"weight":1}},{"id":6682,"inV":80,"properties":{"weight":2}},{"id":6683,"inV":215,"properties":{"weight":1}},{"id":6684,"inV":48,"properties":{"weight":1}},{"id":6685,"inV":14,"properties":{"weight":3}},{"id":6686,"inV":50,"properties":{"weight":2}},{"id":6687,"inV":24,"properties":{"weight":83}},{"id":6688,"inV":18,"properties":{"weight":1}},{"id":6689,"inV":39,"properties":{"weight":6}},{"id":6690,"inV":105,"properties":{"weight":1}},{"id":6691,"inV":131,"properties":{"weight":14}},{"id":6645,"inV":72,"properties":{"weight":7}},{"id
 ":6646,"inV":58,"properties":{"weight":7}},{"id":6647,"inV":57,"properties":{"weight":6}},{"id":6648,"inV":54,"properties":{"weight":8}},{"id":6649,"inV":59,"properties":{"weight":14}},{"id":6650,"inV":100,"properties":{"weight":7}},{"id":6651,"inV":53,"properties":{"weight":4}},{"id":6652,"inV":148,"properties":{"weight":1}},{"id":6653,"inV":218,"properties":{"weight":2}},{"id":6654,"inV":235,"properties":{"weight":2}},{"id":6655,"inV":130,"properties":{"weight":1}}],"sungBy":[{"id":7776,"inV":351}],"writtenBy":[{"id":7775,"inV":659}]},"properties":{"name":[{"id":33,"value":"ME AND MY UNCLE"}],"songType":[{"id":35,"value":"cover"}],"performances":[{"id":34,"value":616}]}}
+{"id":13,"label":"song","inE":{"followedBy":[{"id":4865,"outV":35,"properties":{"weight":4}},{"id":1026,"outV":73,"properties":{"weight":1}},{"id":3330,"outV":155,"properties":{"weight":2}},{"id":5636,"outV":22,"properties":{"weight":1}},{"id":775,"outV":122,"properties":{"weight":1}},{"id":1799,"outV":196,"properties":{"weight":2}},{"id":6407,"outV":134,"properties":{"weight":24}},{"id":9,"outV":9,"properties":{"weight":6}},{"id":4874,"outV":100,"properties":{"weight":6}},{"id":4108,"outV":48,"properties":{"weight":3}},{"id":5132,"outV":222,"properties":{"weight":1}},{"id":2830,"outV":101,"properties":{"weight":8}},{"id":3857,"outV":60,"properties":{"weight":35}},{"id":6931,"outV":84,"properties":{"weight":7}},{"id":533,"outV":120,"properties":{"weight":1}},{"id":6165,"outV":36,"properties":{"weight":1}},{"id":4630,"outV":154,"properties":{"weight":8}},{"id":5142,"outV":125,"properties":{"weight":11}},{"id":283,"outV":5,"properties":{"weight":3}},{"id":1567,"outV":18,"properties":{
 "weight":3}},{"id":1823,"outV":41,"properties":{"weight":4}},{"id":3359,"outV":184,"properties":{"weight":3}},{"id":3617,"outV":24,"properties":{"weight":1}},{"id":3108,"outV":153,"properties":{"weight":1}},{"id":3878,"outV":51,"properties":{"weight":6}},{"id":2347,"outV":87,"properties":{"weight":8}},{"id":6443,"outV":187,"properties":{"weight":47}},{"id":6700,"outV":141,"properties":{"weight":4}},{"id":5682,"outV":167,"properties":{"weight":1}},{"id":53,"outV":46,"properties":{"weight":4}},{"id":823,"outV":171,"properties":{"weight":24}},{"id":4151,"outV":218,"properties":{"weight":2}},{"id":5943,"outV":50,"properties":{"weight":1}},{"id":2617,"outV":158,"properties":{"weight":1}},{"id":3386,"outV":177,"properties":{"weight":2}},{"id":4411,"outV":327,"properties":{"weight":1}},{"id":1852,"outV":94,"properties":{"weight":4}},{"id":6206,"outV":319,"properties":{"weight":1}},{"id":1087,"outV":59,"properties":{"weight":5}},{"id":2111,"outV":17,"properties":{"weight":4}},{"id":4159,"ou
 tV":54,"properties":{"weight":16}},{"id":6723,"outV":53,"properties":{"weight":6}},{"id":6984,"outV":175,"properties":{"weight":1}},{"id":3145,"outV":104,"properties":{"weight":4}},{"id":4947,"outV":86,"properties":{"weight":1}},{"id":5203,"outV":99,"properties":{"weight":2}},{"id":1366,"outV":130,"properties":{"weight":12}},{"id":1622,"outV":210,"properties":{"weight":1}},{"id":2908,"outV":118,"properties":{"weight":1}},{"id":1885,"outV":103,"properties":{"weight":3}},{"id":4959,"outV":207,"properties":{"weight":6}},{"id":3435,"outV":58,"properties":{"weight":8}},{"id":6763,"outV":39,"properties":{"weight":8}},{"id":5741,"outV":129,"properties":{"weight":12}},{"id":366,"outV":74,"properties":{"weight":38}},{"id":2926,"outV":78,"properties":{"weight":3}},{"id":623,"outV":23,"properties":{"weight":1}},{"id":4721,"outV":186,"properties":{"weight":4}},{"id":2165,"outV":151,"properties":{"weight":1}},{"id":886,"outV":140,"properties":{"weight":1}},{"id":3703,"outV":3,"properties":{"weig
 ht":5}},{"id":7031,"outV":89,"properties":{"weight":4}},{"id":1411,"outV":83,"properties":{"weight":7}},{"id":3974,"outV":106,"properties":{"weight":2}},{"id":6278,"outV":49,"properties":{"weight":1}},{"id":912,"outV":91,"properties":{"weight":59}},{"id":2192,"outV":235,"properties":{"weight":1}},{"id":4759,"outV":37,"properties":{"weight":2}},{"id":1179,"outV":26,"properties":{"weight":2}},{"id":5789,"outV":76,"properties":{"weight":3}},{"id":4257,"outV":10,"properties":{"weight":1}},{"id":6561,"outV":172,"properties":{"weight":1}},{"id":4771,"outV":114,"properties":{"weight":3}},{"id":1454,"outV":81,"properties":{"weight":10}},{"id":6073,"outV":72,"properties":{"weight":13}},{"id":5306,"outV":170,"properties":{"weight":4}},{"id":4027,"outV":173,"properties":{"weight":3}},{"id":1725,"outV":82,"properties":{"weight":3}},{"id":960,"outV":67,"properties":{"weight":2}},{"id":1985,"outV":152,"properties":{"weight":1}},{"id":6594,"outV":127,"properties":{"weight":6}},{"id":6342,"outV":21
 ,"properties":{"weight":4}},{"id":455,"outV":139,"properties":{"weight":1}},{"id":3277,"outV":160,"properties":{"weight":3}},{"id":5837,"outV":258,"properties":{"weight":1}},{"id":208,"outV":70,"properties":{"weight":2}},{"id":2256,"outV":29,"properties":{"weight":1}},{"id":721,"outV":80,"properties":{"weight":1}},{"id":2771,"outV":15,"properties":{"weight":3}},{"id":5076,"outV":4,"properties":{"weight":12}},{"id":2519,"outV":57,"properties":{"weight":10}},{"id":4312,"outV":110,"properties":{"weight":1}},{"id":2268,"outV":25,"properties":{"weight":8}},{"id":2014,"outV":149,"properties":{"weight":1}},{"id":3552,"outV":56,"properties":{"weight":8}},{"id":481,"outV":98,"properties":{"weight":3}},{"id":1764,"outV":28,"properties":{"weight":3}},{"id":1258,"outV":27,"properties":{"weight":3}},{"id":1518,"outV":164,"properties":{"weight":1}},{"id":4846,"outV":119,"properties":{"weight":1}},{"id":4593,"outV":85,"properties":{"weight":2}},{"id":244,"outV":150,"properties":{"weight":3}},{"id"
 :1780,"outV":234,"properties":{"weight":2}},{"id":4344,"outV":62,"properties":{"weight":12}},{"id":2044,"outV":92,"properties":{"weight":2}},{"id":5374,"outV":69,"properties":{"weight":34}},{"id":5886,"outV":96,"properties":{"weight":15}}]},"outE":{"followedBy":[{"id":2688,"inV":94,"properties":{"weight":4}},{"id":2689,"inV":130,"properties":{"weight":11}},{"id":2690,"inV":83,"properties":{"weight":13}},{"id":2691,"inV":170,"properties":{"weight":1}},{"id":2692,"inV":51,"properties":{"weight":3}},{"id":2693,"inV":22,"properties":{"weight":2}},{"id":2694,"inV":296,"properties":{"weight":1}},{"id":2695,"inV":52,"properties":{"weight":1}},{"id":2696,"inV":17,"properties":{"weight":2}},{"id":2697,"inV":202,"properties":{"weight":3}},{"id":2698,"inV":27,"properties":{"weight":2}},{"id":2699,"inV":9,"properties":{"weight":3}},{"id":2700,"inV":25,"properties":{"weight":12}},{"id":2701,"inV":195,"properties":{"weight":2}},{"id":2702,"inV":206,"properties":{"weight":1}},{"id":2703,"inV":39,"
 properties":{"weight":1}},{"id":2704,"inV":69,"properties":{"weight":6}},{"id":2705,"inV":24,"properties":{"weight":1}},{"id":2706,"inV":82,"properties":{"weight":3}},{"id":2707,"inV":57,"properties":{"weight":1}},{"id":2708,"inV":134,"properties":{"weight":9}},{"id":2709,"inV":110,"properties":{"weight":1}},{"id":2710,"inV":99,"properties":{"weight":3}},{"id":2711,"inV":76,"properties":{"weight":4}},{"id":2712,"inV":3,"properties":{"weight":3}},{"id":2713,"inV":178,"properties":{"weight":1}},{"id":2714,"inV":184,"properties":{"weight":1}},{"id":2715,"inV":60,"properties":{"weight":21}},{"id":2716,"inV":148,"properties":{"weight":1}},{"id":2717,"inV":32,"properties":{"weight":1}},{"id":2718,"inV":91,"properties":{"weight":42}},{"id":2719,"inV":103,"properties":{"weight":1}},{"id":2720,"inV":114,"properties":{"weight":4}},{"id":2721,"inV":141,"properties":{"weight":4}},{"id":2722,"inV":154,"properties":{"weight":3}},{"id":2723,"inV":109,"properties":{"weight":2}},{"id":2724,"inV":125
 ,"properties":{"weight":9}},{"id":2725,"inV":85,"properties":{"weight":2}},{"id":2726,"inV":84,"properties":{"weight":5}},{"id":2727,"inV":50,"properties":{"weight":1}},{"id":2728,"inV":214,"properties":{"weight":1}},{"id":2729,"inV":72,"properties":{"weight":1}},{"id":2730,"inV":246,"properties":{"weight":1}},{"id":2731,"inV":129,"properties":{"weight":29}},{"id":2732,"inV":65,"properties":{"weight":2}},{"id":2733,"inV":133,"properties":{"weight":1}},{"id":2734,"inV":62,"properties":{"weight":1}},{"id":2735,"inV":29,"properties":{"weight":4}},{"id":2736,"inV":5,"properties":{"weight":3}},{"id":2737,"inV":183,"properties":{"weight":3}},{"id":2738,"inV":210,"properties":{"weight":1}},{"id":2739,"inV":128,"properties":{"weight":1}},{"id":2740,"inV":67,"properties":{"weight":1}},{"id":2741,"inV":212,"properties":{"weight":1}},{"id":2742,"inV":70,"properties":{"weight":2}},{"id":2743,"inV":75,"properties":{"weight":1}},{"id":2744,"inV":71,"properties":{"weight":1}},{"id":2745,"inV":168,
 "properties":{"weight":2}},{"id":2746,"inV":157,"properties":{"weight":1}},{"id":2747,"inV":92,"properties":{"weight":1}},{"id":2748,"inV":89,"properties":{"weight":5}},{"id":2749,"inV":81,"properties":{"weight":1}},{"id":2750,"inV":187,"properties":{"weight":1}},{"id":2751,"inV":164,"properties":{"weight":1}},{"id":2752,"inV":136,"properties":{"weight":1}},{"id":2753,"inV":46,"properties":{"weight":1}},{"id":2660,"inV":207,"properties":{"weight":3}},{"id":2661,"inV":122,"properties":{"weight":17}},{"id":2662,"inV":96,"properties":{"weight":157}},{"id":2663,"inV":104,"properties":{"weight":1}},{"id":2664,"inV":26,"properties":{"weight":14}},{"id":2665,"inV":123,"properties":{"weight":3}},{"id":2666,"inV":19,"properties":{"weight":12}},{"id":2667,"inV":100,"properties":{"weight":5}},{"id":2668,"inV":12,"properties":{"weight":3}},{"id":2669,"inV":49,"properties":{"weight":12}},{"id":2670,"inV":21,"properties":{"weight":4}},{"id":2671,"inV":120,"properties":{"weight":9}},{"id":2672,"in
 V":23,"properties":{"weight":5}},{"id":2673,"inV":59,"properties":{"weight":6}},{"id":2674,"inV":54,"properties":{"weight":5}},{"id":2675,"inV":80,"properties":{"weight":1}},{"id":2676,"inV":234,"properties":{"weight":1}},{"id":2677,"inV":53,"properties":{"weight":2}},{"id":2678,"inV":225,"properties":{"weight":1}},{"id":2679,"inV":235,"properties":{"weight":2}},{"id":2680,"inV":160,"properties":{"weight":3}},{"id":2681,"inV":56,"properties":{"weight":3}},{"id":2682,"inV":127,"properties":{"weight":6}},{"id":2683,"inV":18,"properties":{"weight":3}},{"id":2684,"inV":4,"properties":{"weight":9}},{"id":2685,"inV":15,"properties":{"weight":7}},{"id":2686,"inV":74,"properties":{"weight":86}},{"id":2687,"inV":153,"properties":{"weight":12}}],"sungBy":[{"id":7292,"inV":359}],"writtenBy":[{"id":7291,"inV":339}]},"properties":{"name":[{"id":36,"value":"PLAYING IN THE BAND"}],"songType":[{"id":38,"value":"original"}],"performances":[{"id":37,"value":582}]}}
+{"id":14,"label":"song","inE":{"followedBy":[{"id":6784,"outV":39,"properties":{"weight":10}},{"id":5251,"outV":32,"properties":{"weight":1}},{"id":4229,"outV":52,"properties":{"weight":3}},{"id":4745,"outV":294,"properties":{"weight":4}},{"id":10,"outV":9,"properties":{"weight":3}},{"id":6283,"outV":49,"properties":{"weight":2}},{"id":4364,"outV":62,"properties":{"weight":16}},{"id":4109,"outV":48,"properties":{"weight":10}},{"id":6544,"outV":55,"properties":{"weight":1}},{"id":4881,"outV":100,"properties":{"weight":20}},{"id":6034,"outV":115,"properties":{"weight":1}},{"id":531,"outV":120,"properties":{"weight":1}},{"id":3219,"outV":63,"properties":{"weight":2}},{"id":4758,"outV":37,"properties":{"weight":2}},{"id":4247,"outV":10,"properties":{"weight":1}},{"id":4631,"outV":154,"properties":{"weight":6}},{"id":3866,"outV":60,"properties":{"weight":2}},{"id":1947,"outV":148,"properties":{"weight":1}},{"id":1436,"outV":83,"properties":{"weight":7}},{"id":2844,"outV":101,"properties"
 :{"weight":1}},{"id":6685,"outV":12,"properties":{"weight":3}},{"id":1183,"outV":26,"properties":{"weight":2}},{"id":160,"outV":108,"properties":{"weight":2}},{"id":4517,"outV":105,"properties":{"weight":6}},{"id":6954,"outV":84,"properties":{"weight":4}},{"id":1451,"outV":81,"properties":{"weight":12}},{"id":1582,"outV":18,"properties":{"weight":4}},{"id":3892,"outV":51,"properties":{"weight":10}},{"id":2107,"outV":17,"properties":{"weight":19}},{"id":5820,"outV":76,"properties":{"weight":1}},{"id":6463,"outV":187,"properties":{"weight":26}},{"id":1090,"outV":59,"properties":{"weight":7}},{"id":1731,"outV":82,"properties":{"weight":4}},{"id":6083,"outV":72,"properties":{"weight":9}},{"id":4037,"outV":173,"properties":{"weight":1}},{"id":2375,"outV":87,"properties":{"weight":8}},{"id":4169,"outV":54,"properties":{"weight":36}},{"id":5578,"outV":42,"properties":{"weight":1}},{"id":716,"outV":80,"properties":{"weight":10}},{"id":5964,"outV":50,"properties":{"weight":2}},{"id":845,"out
 V":171,"properties":{"weight":11}},{"id":5709,"outV":20,"properties":{"weight":1}},{"id":5838,"outV":258,"properties":{"weight":1}},{"id":1232,"outV":248,"properties":{"weight":1}},{"id":6993,"outV":175,"properties":{"weight":1}},{"id":3666,"outV":24,"properties":{"weight":2}},{"id":3156,"outV":104,"properties":{"weight":6}},{"id":3796,"outV":88,"properties":{"weight":1}},{"id":6742,"outV":53,"properties":{"weight":15}},{"id":2523,"outV":57,"properties":{"weight":9}},{"id":864,"outV":189,"properties":{"weight":2}},{"id":3556,"outV":56,"properties":{"weight":21}},{"id":102,"outV":46,"properties":{"weight":1}},{"id":5096,"outV":4,"properties":{"weight":2}},{"id":489,"outV":98,"properties":{"weight":3}},{"id":1257,"outV":27,"properties":{"weight":19}},{"id":2030,"outV":180,"properties":{"weight":2}},{"id":2159,"outV":151,"properties":{"weight":1}},{"id":2803,"outV":15,"properties":{"weight":4}},{"id":2935,"outV":78,"properties":{"weight":1}},{"id":2426,"outV":68,"properties":{"weight":
 4}},{"id":3962,"outV":106,"properties":{"weight":2}},{"id":4474,"outV":202,"properties":{"weight":1}},{"id":123,"outV":97,"properties":{"weight":1}},{"id":4092,"outV":109,"properties":{"weight":1}},{"id":5628,"outV":22,"properties":{"weight":1}},{"id":1021,"outV":73,"properties":{"weight":20}},{"id":3455,"outV":58,"properties":{"weight":12}}]},"outE":{"followedBy":[{"id":2981,"inV":50,"properties":{"weight":2}},{"id":2982,"inV":4,"properties":{"weight":3}},{"id":2983,"inV":53,"properties":{"weight":8}},{"id":2984,"inV":57,"properties":{"weight":55}},{"id":2985,"inV":89,"properties":{"weight":2}},{"id":2986,"inV":122,"properties":{"weight":1}},{"id":2987,"inV":153,"properties":{"weight":1}},{"id":2988,"inV":72,"properties":{"weight":26}},{"id":2989,"inV":19,"properties":{"weight":17}},{"id":2990,"inV":9,"properties":{"weight":4}},{"id":2991,"inV":17,"properties":{"weight":13}},{"id":2992,"inV":46,"properties":{"weight":5}},{"id":2993,"inV":51,"properties":{"weight":15}},{"id":2994,"i
 nV":54,"properties":{"weight":28}},{"id":2995,"inV":202,"properties":{"weight":3}},{"id":2996,"inV":27,"properties":{"weight":6}},{"id":2997,"inV":52,"properties":{"weight":3}},{"id":2998,"inV":58,"properties":{"weight":1}},{"id":2999,"inV":56,"properties":{"weight":8}},{"id":3000,"inV":100,"properties":{"weight":12}},{"id":3001,"inV":99,"properties":{"weight":26}},{"id":3002,"inV":98,"properties":{"weight":3}},{"id":3003,"inV":104,"properties":{"weight":2}},{"id":3004,"inV":82,"properties":{"weight":6}},{"id":3005,"inV":215,"properties":{"weight":1}},{"id":3006,"inV":69,"properties":{"weight":2}},{"id":3007,"inV":103,"properties":{"weight":1}},{"id":3008,"inV":83,"properties":{"weight":8}},{"id":3009,"inV":101,"properties":{"weight":1}},{"id":3010,"inV":80,"properties":{"weight":8}},{"id":3011,"inV":121,"properties":{"weight":3}},{"id":3012,"inV":59,"properties":{"weight":1}},{"id":3013,"inV":26,"properties":{"weight":2}},{"id":3014,"inV":32,"properties":{"weight":2}},{"id":3015,"i
 nV":155,"properties":{"weight":1}},{"id":3016,"inV":42,"properties":{"weight":2}},{"id":3017,"inV":18,"properties":{"weight":1}},{"id":3018,"inV":105,"properties":{"weight":11}},{"id":3019,"inV":12,"properties":{"weight":1}},{"id":3020,"inV":49,"properties":{"weight":27}},{"id":3021,"inV":65,"properties":{"weight":2}},{"id":3022,"inV":85,"properties":{"weight":2}},{"id":3023,"inV":73,"properties":{"weight":8}},{"id":3024,"inV":106,"properties":{"weight":3}},{"id":3025,"inV":189,"properties":{"weight":3}},{"id":3026,"inV":10,"properties":{"weight":1}},{"id":3027,"inV":210,"properties":{"weight":3}},{"id":3028,"inV":76,"properties":{"weight":1}},{"id":3029,"inV":87,"properties":{"weight":1}},{"id":3030,"inV":96,"properties":{"weight":1}},{"id":3031,"inV":150,"properties":{"weight":1}},{"id":3032,"inV":66,"properties":{"weight":1}},{"id":3033,"inV":5,"properties":{"weight":1}},{"id":3034,"inV":91,"properties":{"weight":29}},{"id":3035,"inV":60,"properties":{"weight":6}},{"id":3036,"inV
 ":67,"properties":{"weight":1}},{"id":3037,"inV":74,"properties":{"weight":1}},{"id":3038,"inV":21,"properties":{"weight":1}},{"id":3039,"inV":169,"properties":{"weight":1}},{"id":3040,"inV":62,"properties":{"weight":1}},{"id":3041,"inV":39,"properties":{"weight":2}},{"id":3042,"inV":175,"properties":{"weight":1}},{"id":3043,"inV":172,"properties":{"weight":1}},{"id":3044,"inV":28,"properties":{"weight":5}},{"id":3045,"inV":173,"properties":{"weight":1}},{"id":3046,"inV":37,"properties":{"weight":5}},{"id":3047,"inV":35,"properties":{"weight":2}}],"sungBy":[{"id":7232,"inV":351}],"writtenBy":[{"id":7231,"inV":350}]},"properties":{"name":[{"id":39,"value":"LOOKS LIKE RAIN"}],"songType":[{"id":41,"value":"original"}],"performances":[{"id":40,"value":417}]}}
+{"id":15,"label":"song","inE":{"followedBy":[{"id":1152,"outV":26,"properties":{"weight":1}},{"id":769,"outV":122,"properties":{"weight":3}},{"id":5379,"outV":69,"properties":{"weight":4}},{"id":3844,"outV":60,"properties":{"weight":2}},{"id":1414,"outV":83,"properties":{"weight":2}},{"id":6663,"outV":12,"properties":{"weight":167}},{"id":4872,"outV":100,"properties":{"weight":9}},{"id":4105,"outV":48,"properties":{"weight":4}},{"id":11,"outV":9,"properties":{"weight":3}},{"id":4622,"outV":154,"properties":{"weight":1}},{"id":2833,"outV":101,"properties":{"weight":1}},{"id":2195,"outV":235,"properties":{"weight":1}},{"id":5141,"outV":125,"properties":{"weight":2}},{"id":3224,"outV":63,"properties":{"weight":2}},{"id":1945,"outV":148,"properties":{"weight":2}},{"id":5024,"outV":30,"properties":{"weight":2}},{"id":2597,"outV":112,"properties":{"weight":35}},{"id":1062,"outV":73,"properties":{"weight":1}},{"id":4776,"outV":114,"properties":{"weight":1}},{"id":5032,"outV":47,"properties
 ":{"weight":1}},{"id":6698,"outV":141,"properties":{"weight":1}},{"id":3885,"outV":51,"properties":{"weight":14}},{"id":1712,"outV":82,"properties":{"weight":4}},{"id":5301,"outV":170,"properties":{"weight":1}},{"id":1847,"outV":94,"properties":{"weight":6}},{"id":4153,"outV":54,"properties":{"weight":7}},{"id":1339,"outV":31,"properties":{"weight":2}},{"id":6075,"outV":72,"properties":{"weight":4}},{"id":60,"outV":46,"properties":{"weight":1}},{"id":2108,"outV":17,"properties":{"weight":8}},{"id":6460,"outV":187,"properties":{"weight":10}},{"id":3653,"outV":24,"properties":{"weight":14}},{"id":3147,"outV":104,"properties":{"weight":2}},{"id":6731,"outV":53,"properties":{"weight":1}},{"id":1101,"outV":59,"properties":{"weight":2}},{"id":4052,"outV":173,"properties":{"weight":1}},{"id":2518,"outV":57,"properties":{"weight":5}},{"id":476,"outV":98,"properties":{"weight":3}},{"id":1372,"outV":130,"properties":{"weight":1}},{"id":1245,"outV":27,"properties":{"weight":5}},{"id":5085,"out
 V":4,"properties":{"weight":1}},{"id":2272,"outV":25,"properties":{"weight":4}},{"id":4577,"outV":254,"properties":{"weight":1}},{"id":5735,"outV":129,"properties":{"weight":2}},{"id":3432,"outV":58,"properties":{"weight":7}},{"id":746,"outV":80,"properties":{"weight":1}},{"id":3562,"outV":56,"properties":{"weight":6}},{"id":2411,"outV":68,"properties":{"weight":1}},{"id":2924,"outV":78,"properties":{"weight":3}},{"id":4467,"outV":202,"properties":{"weight":6}},{"id":376,"outV":74,"properties":{"weight":1}},{"id":5242,"outV":32,"properties":{"weight":2}},{"id":6267,"outV":49,"properties":{"weight":1}},{"id":2685,"outV":13,"properties":{"weight":7}}]},"outE":{"followedBy":[{"id":2816,"inV":103,"properties":{"weight":1}},{"id":2817,"inV":62,"properties":{"weight":1}},{"id":2818,"inV":64,"properties":{"weight":1}},{"id":2819,"inV":75,"properties":{"weight":3}},{"id":2820,"inV":152,"properties":{"weight":1}},{"id":2821,"inV":117,"properties":{"weight":1}},{"id":2822,"inV":168,"propertie
 s":{"weight":1}},{"id":2823,"inV":188,"properties":{"weight":1}},{"id":2824,"inV":131,"properties":{"weight":4}},{"id":2825,"inV":28,"properties":{"weight":1}},{"id":2826,"inV":124,"properties":{"weight":1}},{"id":2827,"inV":190,"properties":{"weight":1}},{"id":2828,"inV":137,"properties":{"weight":1}},{"id":2755,"inV":19,"properties":{"weight":8}},{"id":2756,"inV":56,"properties":{"weight":22}},{"id":2757,"inV":104,"properties":{"weight":17}},{"id":2758,"inV":49,"properties":{"weight":4}},{"id":2759,"inV":122,"properties":{"weight":3}},{"id":2760,"inV":23,"properties":{"weight":2}},{"id":2761,"inV":27,"properties":{"weight":23}},{"id":2762,"inV":89,"properties":{"weight":7}},{"id":2763,"inV":46,"properties":{"weight":1}},{"id":2764,"inV":57,"properties":{"weight":7}},{"id":2765,"inV":59,"properties":{"weight":6}},{"id":2766,"inV":58,"properties":{"weight":18}},{"id":2767,"inV":54,"properties":{"weight":25}},{"id":2768,"inV":100,"properties":{"weight":24}},{"id":2769,"inV":39,"prope
 rties":{"weight":3}},{"id":2770,"inV":160,"properties":{"weight":5}},{"id":2771,"inV":13,"properties":{"weight":3}},{"id":2772,"inV":51,"properties":{"weight":14}},{"id":2773,"inV":94,"properties":{"weight":4}},{"id":2774,"inV":148,"properties":{"weight":1}},{"id":2775,"inV":9,"properties":{"weight":5}},{"id":2776,"inV":48,"properties":{"weight":17}},{"id":2777,"inV":55,"properties":{"weight":1}},{"id":2778,"inV":72,"properties":{"weight":3}},{"id":2779,"inV":52,"properties":{"weight":1}},{"id":2780,"inV":12,"properties":{"weight":3}},{"id":2781,"inV":4,"properties":{"weight":4}},{"id":2782,"inV":83,"properties":{"weight":2}},{"id":2783,"inV":202,"properties":{"weight":6}},{"id":2784,"inV":82,"properties":{"weight":3}},{"id":2785,"inV":74,"properties":{"weight":1}},{"id":2786,"inV":69,"properties":{"weight":7}},{"id":2787,"inV":98,"properties":{"weight":10}},{"id":2788,"inV":21,"properties":{"weight":1}},{"id":2789,"inV":125,"properties":{"weight":1}},{"id":2790,"inV":170,"propertie
 s":{"weight":3}},{"id":2791,"inV":26,"properties":{"weight":1}},{"id":2792,"inV":60,"properties":{"weight":1}},{"id":2793,"inV":294,"properties":{"weight":2}},{"id":2794,"inV":99,"properties":{"weight":3}},{"id":2795,"inV":17,"properties":{"weight":10}},{"id":2796,"inV":63,"properties":{"weight":5}},{"id":2797,"inV":68,"properties":{"weight":3}},{"id":2798,"inV":108,"properties":{"weight":6}},{"id":2799,"inV":109,"properties":{"weight":1}},{"id":2800,"inV":196,"properties":{"weight":3}},{"id":2801,"inV":91,"properties":{"weight":1}},{"id":2802,"inV":18,"properties":{"weight":1}},{"id":2803,"inV":14,"properties":{"weight":4}},{"id":2804,"inV":105,"properties":{"weight":8}},{"id":2805,"inV":101,"properties":{"weight":2}},{"id":2806,"inV":10,"properties":{"weight":2}},{"id":2807,"inV":73,"properties":{"weight":26}},{"id":2808,"inV":78,"properties":{"weight":1}},{"id":2809,"inV":32,"properties":{"weight":3}},{"id":2810,"inV":106,"properties":{"weight":2}},{"id":2811,"inV":180,"propertie
 s":{"weight":2}},{"id":2812,"inV":88,"properties":{"weight":1}},{"id":2813,"inV":97,"properties":{"weight":1}},{"id":2814,"inV":53,"properties":{"weight":3}},{"id":2815,"inV":115,"properties":{"weight":4}}],"sungBy":[{"id":7472,"inV":351}],"writtenBy":[{"id":7471,"inV":479}]},"properties":{"name":[{"id":42,"value":"BIG RIVER"}],"songType":[{"id":44,"value":"cover"}],"performances":[{"id":43,"value":397}]}}
+{"id":16,"label":"song","inE":{"followedBy":[{"id":7008,"outV":89,"properties":{"weight":1}},{"id":6467,"outV":187,"properties":{"weight":1}},{"id":4101,"outV":48,"properties":{"weight":1}},{"id":5637,"outV":22,"properties":{"weight":3}},{"id":6341,"outV":21,"properties":{"weight":1}},{"id":5382,"outV":69,"properties":{"weight":4}},{"id":3273,"outV":160,"properties":{"weight":2}},{"id":6537,"outV":55,"properties":{"weight":1}},{"id":3882,"outV":51,"properties":{"weight":12}},{"id":12,"outV":9,"properties":{"weight":1}},{"id":1260,"outV":27,"properties":{"weight":1}},{"id":4172,"outV":54,"properties":{"weight":1}},{"id":6285,"outV":49,"properties":{"weight":1}},{"id":368,"outV":74,"properties":{"weight":1}},{"id":4464,"outV":202,"properties":{"weight":1}},{"id":468,"outV":195,"properties":{"weight":3}},{"id":5303,"outV":170,"properties":{"weight":2}},{"id":472,"outV":98,"properties":{"weight":2}},{"id":2521,"outV":57,"properties":{"weight":1}},{"id":5081,"outV":4,"properties":{"weigh
 t":2}},{"id":5146,"outV":125,"properties":{"weight":1}},{"id":1405,"outV":83,"properties":{"weight":5}},{"id":1854,"outV":94,"properties":{"weight":2}},{"id":1950,"outV":148,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":2169,"inV":25,"properties":{"weight":1}},{"id":2170,"inV":101,"properties":{"weight":46}},{"id":2171,"inV":89,"properties":{"weight":2}},{"id":2172,"inV":130,"properties":{"weight":1}},{"id":2173,"inV":83,"properties":{"weight":1}}]},"properties":{"name":[{"id":45,"value":"WEATHER REPORT SUITE"}],"songType":[{"id":47,"value":""}],"performances":[{"id":46,"value":0}]}}
+{"id":17,"label":"song","inE":{"followedBy":[{"id":5955,"outV":50,"properties":{"weight":43}},{"id":5702,"outV":20,"properties":{"weight":2}},{"id":2696,"outV":13,"properties":{"weight":2}},{"id":6538,"outV":55,"properties":{"weight":1}},{"id":1163,"outV":26,"properties":{"weight":34}},{"id":13,"outV":9,"properties":{"weight":1}},{"id":402,"outV":38,"properties":{"weight":12}},{"id":5011,"outV":30,"properties":{"weight":3}},{"id":6675,"outV":12,"properties":{"weight":3}},{"id":1877,"outV":103,"properties":{"weight":2}},{"id":2522,"outV":57,"properties":{"weight":1}},{"id":475,"outV":98,"properties":{"weight":1}},{"id":3803,"outV":88,"properties":{"weight":4}},{"id":540,"outV":120,"properties":{"weight":1}},{"id":2588,"outV":112,"properties":{"weight":3}},{"id":3996,"outV":106,"properties":{"weight":1}},{"id":990,"outV":11,"properties":{"weight":3}},{"id":1570,"outV":18,"properties":{"weight":6}},{"id":2275,"outV":25,"properties":{"weight":1}},{"id":4262,"outV":10,"properties":{"weig
 ht":5}},{"id":2795,"outV":15,"properties":{"weight":10}},{"id":6955,"outV":84,"properties":{"weight":1}},{"id":2413,"outV":68,"properties":{"weight":9}},{"id":4077,"outV":109,"properties":{"weight":1}},{"id":2991,"outV":14,"properties":{"weight":13}},{"id":4912,"outV":100,"properties":{"weight":1}},{"id":3639,"outV":24,"properties":{"weight":13}},{"id":6583,"outV":116,"properties":{"weight":1}},{"id":58,"outV":46,"properties":{"weight":2}},{"id":635,"outV":23,"properties":{"weight":16}},{"id":5244,"outV":32,"properties":{"weight":19}},{"id":2942,"outV":78,"properties":{"weight":1}},{"id":6847,"outV":64,"properties":{"weight":7}}]},"outE":{"followedBy":[{"id":2112,"inV":24,"properties":{"weight":9}},{"id":2113,"inV":21,"properties":{"weight":1}},{"id":2114,"inV":46,"properties":{"weight":1}},{"id":2115,"inV":20,"properties":{"weight":2}},{"id":2116,"inV":10,"properties":{"weight":7}},{"id":2117,"inV":68,"properties":{"weight":25}},{"id":2118,"inV":32,"properties":{"weight":19}},{"id"
 :2119,"inV":103,"properties":{"weight":3}},{"id":2120,"inV":121,"properties":{"weight":3}},{"id":2121,"inV":112,"properties":{"weight":31}},{"id":2122,"inV":85,"properties":{"weight":1}},{"id":2123,"inV":101,"properties":{"weight":1}},{"id":2124,"inV":109,"properties":{"weight":1}},{"id":2125,"inV":73,"properties":{"weight":1}},{"id":2126,"inV":88,"properties":{"weight":8}},{"id":2127,"inV":111,"properties":{"weight":3}},{"id":2128,"inV":54,"properties":{"weight":2}},{"id":2129,"inV":97,"properties":{"weight":2}},{"id":2130,"inV":100,"properties":{"weight":1}},{"id":2131,"inV":42,"properties":{"weight":1}},{"id":2132,"inV":58,"properties":{"weight":2}},{"id":2133,"inV":244,"properties":{"weight":1}},{"id":2134,"inV":56,"properties":{"weight":1}},{"id":2135,"inV":63,"properties":{"weight":1}},{"id":2136,"inV":188,"properties":{"weight":2}},{"id":2137,"inV":71,"properties":{"weight":1}},{"id":2138,"inV":30,"properties":{"weight":2}},{"id":2139,"inV":31,"properties":{"weight":1}},{"id"
 :2140,"inV":77,"properties":{"weight":2}},{"id":2141,"inV":40,"properties":{"weight":1}},{"id":2142,"inV":33,"properties":{"weight":1}},{"id":2103,"inV":18,"properties":{"weight":17}},{"id":2104,"inV":39,"properties":{"weight":2}},{"id":2105,"inV":22,"properties":{"weight":4}},{"id":2106,"inV":50,"properties":{"weight":6}},{"id":2107,"inV":14,"properties":{"weight":19}},{"id":2108,"inV":15,"properties":{"weight":8}},{"id":2109,"inV":12,"properties":{"weight":24}},{"id":2110,"inV":23,"properties":{"weight":2}},{"id":2111,"inV":13,"properties":{"weight":4}}],"sungBy":[{"id":7364,"inV":340}],"writtenBy":[{"id":7363,"inV":339}]},"properties":{"name":[{"id":48,"value":"THEY LOVE EACH OTHER"}],"songType":[{"id":50,"value":"original"}],"performances":[{"id":49,"value":227}]}}
+{"id":18,"label":"song","inE":{"followedBy":[{"id":1024,"outV":73,"properties":{"weight":4}},{"id":4097,"outV":48,"properties":{"weight":13}},{"id":6276,"outV":49,"properties":{"weight":2}},{"id":2309,"outV":25,"properties":{"weight":1}},{"id":3333,"outV":155,"properties":{"weight":1}},{"id":4231,"outV":52,"properties":{"weight":1}},{"id":4360,"outV":62,"properties":{"weight":1}},{"id":3849,"outV":60,"properties":{"weight":1}},{"id":5257,"outV":32,"properties":{"weight":3}},{"id":5385,"outV":69,"properties":{"weight":2}},{"id":2189,"outV":235,"properties":{"weight":1}},{"id":14,"outV":9,"properties":{"weight":5}},{"id":654,"outV":23,"properties":{"weight":1}},{"id":5010,"outV":30,"properties":{"weight":2}},{"id":6546,"outV":55,"properties":{"weight":1}},{"id":4885,"outV":100,"properties":{"weight":11}},{"id":1814,"outV":273,"properties":{"weight":1}},{"id":1943,"outV":148,"properties":{"weight":1}},{"id":5145,"outV":125,"properties":{"weight":1}},{"id":6688,"outV":12,"properties":{"
 weight":1}},{"id":4642,"outV":154,"properties":{"weight":3}},{"id":2852,"outV":101,"properties":{"weight":1}},{"id":4260,"outV":10,"properties":{"weight":3}},{"id":3238,"outV":63,"properties":{"weight":1}},{"id":6695,"outV":141,"properties":{"weight":1}},{"id":3880,"outV":51,"properties":{"weight":12}},{"id":425,"outV":38,"properties":{"weight":2}},{"id":1193,"outV":26,"properties":{"weight":1}},{"id":2601,"outV":112,"properties":{"weight":1}},{"id":4524,"outV":105,"properties":{"weight":3}},{"id":45,"outV":46,"properties":{"weight":3}},{"id":4015,"outV":292,"properties":{"weight":1}},{"id":560,"outV":120,"properties":{"weight":1}},{"id":5299,"outV":170,"properties":{"weight":3}},{"id":6579,"outV":116,"properties":{"weight":1}},{"id":1716,"outV":82,"properties":{"weight":3}},{"id":4404,"outV":40,"properties":{"weight":1}},{"id":5429,"outV":315,"properties":{"weight":1}},{"id":4150,"outV":218,"properties":{"weight":1}},{"id":2103,"outV":17,"properties":{"weight":17}},{"id":4152,"outV
 ":54,"properties":{"weight":18}},{"id":6456,"outV":187,"properties":{"weight":8}},{"id":1849,"outV":94,"properties":{"weight":6}},{"id":827,"outV":171,"properties":{"weight":1}},{"id":6715,"outV":53,"properties":{"weight":6}},{"id":6205,"outV":319,"properties":{"weight":1}},{"id":1086,"outV":59,"properties":{"weight":21}},{"id":5439,"outV":239,"properties":{"weight":1}},{"id":6080,"outV":72,"properties":{"weight":3}},{"id":1986,"outV":152,"properties":{"weight":1}},{"id":3270,"outV":160,"properties":{"weight":1}},{"id":5192,"outV":99,"properties":{"weight":1}},{"id":3017,"outV":14,"properties":{"weight":1}},{"id":1356,"outV":31,"properties":{"weight":1}},{"id":3148,"outV":104,"properties":{"weight":19}},{"id":4044,"outV":173,"properties":{"weight":4}},{"id":5073,"outV":4,"properties":{"weight":4}},{"id":4692,"outV":33,"properties":{"weight":1}},{"id":5716,"outV":20,"properties":{"weight":1}},{"id":2517,"outV":57,"properties":{"weight":11}},{"id":5973,"outV":50,"properties":{"weight"
 :5}},{"id":3671,"outV":24,"properties":{"weight":3}},{"id":473,"outV":98,"properties":{"weight":6}},{"id":729,"outV":80,"properties":{"weight":5}},{"id":5850,"outV":61,"properties":{"weight":1}},{"id":1244,"outV":27,"properties":{"weight":16}},{"id":3807,"outV":88,"properties":{"weight":1}},{"id":3553,"outV":56,"properties":{"weight":16}},{"id":866,"outV":189,"properties":{"weight":1}},{"id":5602,"outV":42,"properties":{"weight":1}},{"id":355,"outV":74,"properties":{"weight":1}},{"id":3431,"outV":58,"properties":{"weight":8}},{"id":4967,"outV":207,"properties":{"weight":1}},{"id":7016,"outV":89,"properties":{"weight":3}},{"id":1642,"outV":213,"properties":{"weight":1}},{"id":2029,"outV":180,"properties":{"weight":1}},{"id":6765,"outV":39,"properties":{"weight":7}},{"id":6384,"outV":65,"properties":{"weight":1}},{"id":2802,"outV":15,"properties":{"weight":1}},{"id":3315,"outV":252,"properties":{"weight":1}},{"id":4851,"outV":119,"properties":{"weight":1}},{"id":3064,"outV":153,"prope
 rties":{"weight":2}},{"id":1401,"outV":190,"properties":{"weight":2}},{"id":2683,"outV":13,"properties":{"weight":3}},{"id":4476,"outV":202,"properties":{"weight":3}},{"id":2431,"outV":68,"properties":{"weight":3}}]},"outE":{"followedBy":[{"id":1536,"inV":59,"properties":{"weight":5}},{"id":1537,"inV":19,"properties":{"weight":17}},{"id":1538,"inV":100,"properties":{"weight":16}},{"id":1539,"inV":122,"properties":{"weight":6}},{"id":1540,"inV":46,"properties":{"weight":4}},{"id":1541,"inV":47,"properties":{"weight":1}},{"id":1542,"inV":74,"properties":{"weight":1}},{"id":1543,"inV":53,"properties":{"weight":7}},{"id":1544,"inV":94,"properties":{"weight":2}},{"id":1545,"inV":58,"properties":{"weight":13}},{"id":1546,"inV":57,"properties":{"weight":10}},{"id":1547,"inV":25,"properties":{"weight":1}},{"id":1548,"inV":39,"properties":{"weight":3}},{"id":1549,"inV":54,"properties":{"weight":29}},{"id":1550,"inV":120,"properties":{"weight":1}},{"id":1551,"inV":152,"properties":{"weight":1
 }},{"id":1552,"inV":89,"properties":{"weight":3}},{"id":1553,"inV":148,"properties":{"weight":1}},{"id":1554,"inV":252,"properties":{"weight":1}},{"id":1555,"inV":225,"properties":{"weight":1}},{"id":1556,"inV":80,"properties":{"weight":2}},{"id":1557,"inV":56,"properties":{"weight":11}},{"id":1558,"inV":27,"properties":{"weight":16}},{"id":1559,"inV":26,"properties":{"weight":1}},{"id":1560,"inV":206,"properties":{"weight":1}},{"id":1561,"inV":72,"properties":{"weight":5}},{"id":1562,"inV":23,"properties":{"weight":3}},{"id":1563,"inV":49,"properties":{"weight":3}},{"id":1564,"inV":51,"properties":{"weight":26}},{"id":1565,"inV":55,"properties":{"weight":2}},{"id":1566,"inV":202,"properties":{"weight":6}},{"id":1567,"inV":13,"properties":{"weight":3}},{"id":1568,"inV":83,"properties":{"weight":4}},{"id":1569,"inV":160,"properties":{"weight":2}},{"id":1570,"inV":17,"properties":{"weight":6}},{"id":1571,"inV":10,"properties":{"weight":5}},{"id":1572,"inV":9,"properties":{"weight":3}}
 ,{"id":1573,"inV":125,"properties":{"weight":2}},{"id":1574,"inV":98,"properties":{"weight":4}},{"id":1575,"inV":170,"properties":{"weight":5}},{"id":1576,"inV":69,"properties":{"weight":3}},{"id":1577,"inV":21,"properties":{"weight":1}},{"id":1578,"inV":82,"properties":{"weight":2}},{"id":1579,"inV":196,"properties":{"weight":1}},{"id":1580,"inV":104,"properties":{"weight":9}},{"id":1581,"inV":108,"properties":{"weight":4}},{"id":1582,"inV":14,"properties":{"weight":4}},{"id":1583,"inV":32,"properties":{"weight":4}},{"id":1584,"inV":50,"properties":{"weight":1}},{"id":1585,"inV":48,"properties":{"weight":7}},{"id":1586,"inV":101,"properties":{"weight":1}},{"id":1587,"inV":105,"properties":{"weight":5}},{"id":1588,"inV":208,"properties":{"weight":1}},{"id":1589,"inV":103,"properties":{"weight":2}},{"id":1590,"inV":42,"properties":{"weight":1}},{"id":1591,"inV":63,"properties":{"weight":2}},{"id":1592,"inV":24,"properties":{"weight":2}},{"id":1593,"inV":73,"properties":{"weight":7}},
 {"id":1594,"inV":222,"properties":{"weight":1}},{"id":1595,"inV":106,"properties":{"weight":1}},{"id":1596,"inV":189,"properties":{"weight":2}},{"id":1597,"inV":112,"properties":{"weight":1}},{"id":1598,"inV":68,"properties":{"weight":2}},{"id":1599,"inV":121,"properties":{"weight":1}},{"id":1600,"inV":180,"properties":{"weight":2}},{"id":1601,"inV":199,"properties":{"weight":1}},{"id":1602,"inV":88,"properties":{"weight":2}},{"id":1603,"inV":128,"properties":{"weight":1}},{"id":1604,"inV":60,"properties":{"weight":1}},{"id":1605,"inV":12,"properties":{"weight":1}},{"id":1606,"inV":75,"properties":{"weight":2}},{"id":1607,"inV":168,"properties":{"weight":1}},{"id":1608,"inV":175,"properties":{"weight":1}},{"id":1609,"inV":254,"properties":{"weight":1}},{"id":1610,"inV":174,"properties":{"weight":4}},{"id":1611,"inV":137,"properties":{"weight":1}},{"id":1612,"inV":173,"properties":{"weight":1}},{"id":1535,"inV":235,"properties":{"weight":1}}],"sungBy":[{"id":7554,"inV":351}],"written
 By":[{"id":7553,"inV":528}]},"properties":{"name":[{"id":51,"value":"EL PASO"}],"songType":[{"id":53,"value":"cover"}],"performances":[{"id":52,"value":388}]}}
+{"id":19,"label":"song","inE":{"followedBy":[{"id":1537,"outV":18,"properties":{"weight":17}},{"id":3969,"outV":106,"properties":{"weight":1}},{"id":6657,"outV":12,"properties":{"weight":3}},{"id":4098,"outV":48,"properties":{"weight":1}},{"id":6532,"outV":242,"properties":{"weight":1}},{"id":1159,"outV":26,"properties":{"weight":21}},{"id":6152,"outV":36,"properties":{"weight":6}},{"id":394,"outV":74,"properties":{"weight":1}},{"id":522,"outV":120,"properties":{"weight":2}},{"id":5130,"outV":222,"properties":{"weight":1}},{"id":3467,"outV":58,"properties":{"weight":8}},{"id":15,"outV":9,"properties":{"weight":1}},{"id":272,"outV":150,"properties":{"weight":1}},{"id":4880,"outV":100,"properties":{"weight":1}},{"id":5267,"outV":32,"properties":{"weight":12}},{"id":4245,"outV":10,"properties":{"weight":9}},{"id":790,"outV":122,"properties":{"weight":1}},{"id":2841,"outV":101,"properties":{"weight":18}},{"id":3097,"outV":153,"properties":{"weight":3}},{"id":411,"outV":38,"properties":{
 "weight":6}},{"id":2335,"outV":290,"properties":{"weight":2}},{"id":5535,"outV":43,"properties":{"weight":1}},{"id":1825,"outV":41,"properties":{"weight":1}},{"id":3874,"outV":60,"properties":{"weight":1}},{"id":4770,"outV":114,"properties":{"weight":4}},{"id":6308,"outV":123,"properties":{"weight":1}},{"id":2086,"outV":188,"properties":{"weight":1}},{"id":2215,"outV":75,"properties":{"weight":1}},{"id":5801,"outV":76,"properties":{"weight":5}},{"id":42,"outV":46,"properties":{"weight":5}},{"id":3628,"outV":24,"properties":{"weight":9}},{"id":2989,"outV":14,"properties":{"weight":17}},{"id":5167,"outV":71,"properties":{"weight":1}},{"id":6831,"outV":64,"properties":{"weight":7}},{"id":2354,"outV":87,"properties":{"weight":2}},{"id":5938,"outV":50,"properties":{"weight":19}},{"id":951,"outV":67,"properties":{"weight":2}},{"id":3511,"outV":223,"properties":{"weight":1}},{"id":1848,"outV":94,"properties":{"weight":1}},{"id":314,"outV":34,"properties":{"weight":2}},{"id":2621,"outV":158
 ,"properties":{"weight":2}},{"id":1472,"outV":81,"properties":{"weight":1}},{"id":6081,"outV":72,"properties":{"weight":24}},{"id":6978,"outV":175,"properties":{"weight":2}},{"id":2755,"outV":15,"properties":{"weight":8}},{"id":5701,"outV":20,"properties":{"weight":4}},{"id":3275,"outV":160,"properties":{"weight":2}},{"id":4171,"outV":54,"properties":{"weight":3}},{"id":206,"outV":70,"properties":{"weight":1}},{"id":4558,"outV":105,"properties":{"weight":1}},{"id":5200,"outV":99,"properties":{"weight":19}},{"id":5457,"outV":79,"properties":{"weight":4}},{"id":979,"outV":11,"properties":{"weight":9}},{"id":1620,"outV":210,"properties":{"weight":4}},{"id":5590,"outV":42,"properties":{"weight":4}},{"id":3799,"outV":88,"properties":{"weight":7}},{"id":4450,"outV":113,"properties":{"weight":1}},{"id":4962,"outV":207,"properties":{"weight":1}},{"id":6370,"outV":21,"properties":{"weight":1}},{"id":1763,"outV":28,"properties":{"weight":1}},{"id":2405,"outV":45,"properties":{"weight":1}},{"i
 d":2279,"outV":25,"properties":{"weight":4}},{"id":2408,"outV":68,"properties":{"weight":5}},{"id":5864,"outV":96,"properties":{"weight":1}},{"id":2666,"outV":13,"properties":{"weight":12}},{"id":1900,"outV":103,"properties":{"weight":22}},{"id":3564,"outV":56,"properties":{"weight":2}},{"id":5102,"outV":4,"properties":{"weight":6}},{"id":1776,"outV":234,"properties":{"weight":7}},{"id":4976,"outV":236,"properties":{"weight":3}},{"id":2546,"outV":57,"properties":{"weight":28}},{"id":627,"outV":23,"properties":{"weight":3}},{"id":4083,"outV":109,"properties":{"weight":4}},{"id":4470,"outV":202,"properties":{"weight":2}},{"id":5622,"outV":22,"properties":{"weight":3}},{"id":6391,"outV":65,"properties":{"weight":2}},{"id":6394,"outV":136,"properties":{"weight":1}},{"id":4349,"outV":62,"properties":{"weight":1}},{"id":126,"outV":97,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":3139,"inV":187,"properties":{"weight":402}},{"id":3140,"inV":39,"properties":{"weight":1}},{"id":314
 1,"inV":60,"properties":{"weight":1}}],"sungBy":[{"id":7100,"inV":340}],"writtenBy":[{"id":7099,"inV":339}]},"properties":{"name":[{"id":54,"value":"CHINA CAT SUNFLOWER"}],"songType":[{"id":56,"value":"original"}],"performances":[{"id":55,"value":554}]}}
+{"id":20,"label":"song","inE":{"followedBy":[{"id":5376,"outV":69,"properties":{"weight":1}},{"id":6592,"outV":116,"properties":{"weight":1}},{"id":2115,"outV":17,"properties":{"weight":2}},{"id":6084,"outV":72,"properties":{"weight":3}},{"id":4170,"outV":54,"properties":{"weight":4}},{"id":2955,"outV":78,"properties":{"weight":1}},{"id":1100,"outV":59,"properties":{"weight":5}},{"id":1164,"outV":26,"properties":{"weight":1}},{"id":2061,"outV":92,"properties":{"weight":1}},{"id":718,"outV":80,"properties":{"weight":2}},{"id":6543,"outV":55,"properties":{"weight":1}},{"id":6735,"outV":53,"properties":{"weight":1}},{"id":16,"outV":9,"properties":{"weight":1}},{"id":1809,"outV":199,"properties":{"weight":1}},{"id":3282,"outV":160,"properties":{"weight":1}},{"id":3609,"outV":56,"properties":{"weight":1}},{"id":1818,"outV":273,"properties":{"weight":1}},{"id":4894,"outV":100,"properties":{"weight":1}},{"id":479,"outV":98,"properties":{"weight":3}},{"id":2527,"outV":57,"properties":{"weig
 ht":3}},{"id":2027,"outV":180,"properties":{"weight":3}},{"id":3883,"outV":51,"properties":{"weight":4}},{"id":2287,"outV":25,"properties":{"weight":1}},{"id":4783,"outV":114,"properties":{"weight":1}},{"id":3442,"outV":58,"properties":{"weight":2}},{"id":4340,"outV":62,"properties":{"weight":1}},{"id":5300,"outV":170,"properties":{"weight":1}},{"id":5047,"outV":209,"properties":{"weight":1}},{"id":56,"outV":46,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":5699,"inV":51,"properties":{"weight":6}},{"id":5700,"inV":100,"properties":{"weight":4}},{"id":5701,"inV":19,"properties":{"weight":4}},{"id":5702,"inV":17,"properties":{"weight":2}},{"id":5703,"inV":56,"properties":{"weight":2}},{"id":5704,"inV":39,"properties":{"weight":1}},{"id":5705,"inV":52,"properties":{"weight":1}},{"id":5706,"inV":94,"properties":{"weight":1}},{"id":5707,"inV":58,"properties":{"weight":3}},{"id":5708,"inV":59,"properties":{"weight":3}},{"id":5709,"inV":14,"properties":{"weight":1}},{"id":5710,"i
 nV":55,"properties":{"weight":1}},{"id":5711,"inV":47,"properties":{"weight":1}},{"id":5712,"inV":27,"properties":{"weight":1}},{"id":5713,"inV":82,"properties":{"weight":1}},{"id":5714,"inV":83,"properties":{"weight":1}},{"id":5715,"inV":98,"properties":{"weight":2}},{"id":5716,"inV":18,"properties":{"weight":1}},{"id":5717,"inV":170,"properties":{"weight":2}},{"id":5718,"inV":180,"properties":{"weight":1}},{"id":5719,"inV":273,"properties":{"weight":2}},{"id":5720,"inV":199,"properties":{"weight":1}},{"id":5721,"inV":73,"properties":{"weight":1}},{"id":5722,"inV":197,"properties":{"weight":1}},{"id":5723,"inV":222,"properties":{"weight":1}},{"id":5724,"inV":104,"properties":{"weight":1}},{"id":5725,"inV":118,"properties":{"weight":1}},{"id":5726,"inV":215,"properties":{"weight":1}},{"id":5727,"inV":80,"properties":{"weight":1}},{"id":5728,"inV":173,"properties":{"weight":1}}],"sungBy":[{"id":7854,"inV":351}],"writtenBy":[{"id":7853,"inV":699}]},"properties":{"name":[{"id":57,"valu
 e":"THE RACE IS ON"}],"songType":[{"id":59,"value":"cover"}],"performances":[{"id":58,"value":59}]}}
+{"id":21,"label":"song","inE":{"followedBy":[{"id":5634,"outV":22,"properties":{"weight":3}},{"id":5384,"outV":69,"properties":{"weight":20}},{"id":777,"outV":122,"properties":{"weight":7}},{"id":907,"outV":174,"properties":{"weight":1}},{"id":3981,"outV":106,"properties":{"weight":1}},{"id":6413,"outV":134,"properties":{"weight":18}},{"id":3088,"outV":153,"properties":{"weight":1}},{"id":17,"outV":9,"properties":{"weight":1}},{"id":5137,"outV":125,"properties":{"weight":6}},{"id":4754,"outV":37,"properties":{"weight":6}},{"id":1427,"outV":83,"properties":{"weight":1}},{"id":3859,"outV":60,"properties":{"weight":12}},{"id":4888,"outV":100,"properties":{"weight":1}},{"id":6555,"outV":172,"properties":{"weight":2}},{"id":1949,"outV":148,"properties":{"weight":6}},{"id":3234,"outV":63,"properties":{"weight":1}},{"id":6179,"outV":36,"properties":{"weight":1}},{"id":932,"outV":91,"properties":{"weight":1}},{"id":2471,"outV":68,"properties":{"weight":1}},{"id":4519,"outV":105,"properties"
 :{"weight":1}},{"id":4775,"outV":114,"properties":{"weight":5}},{"id":1577,"outV":18,"properties":{"weight":1}},{"id":4650,"outV":154,"properties":{"weight":2}},{"id":5035,"outV":47,"properties":{"weight":1}},{"id":44,"outV":46,"properties":{"weight":2}},{"id":1711,"outV":82,"properties":{"weight":2}},{"id":816,"outV":171,"properties":{"weight":11}},{"id":5680,"outV":167,"properties":{"weight":1}},{"id":945,"outV":67,"properties":{"weight":2}},{"id":3633,"outV":24,"properties":{"weight":1}},{"id":6705,"outV":141,"properties":{"weight":2}},{"id":6450,"outV":187,"properties":{"weight":8}},{"id":6195,"outV":232,"properties":{"weight":2}},{"id":1845,"outV":94,"properties":{"weight":8}},{"id":3896,"outV":51,"properties":{"weight":1}},{"id":5305,"outV":170,"properties":{"weight":1}},{"id":6202,"outV":319,"properties":{"weight":3}},{"id":1981,"outV":281,"properties":{"weight":1}},{"id":4030,"outV":173,"properties":{"weight":2}},{"id":3263,"outV":160,"properties":{"weight":4}},{"id":1089,"o
 utV":59,"properties":{"weight":4}},{"id":2113,"outV":17,"properties":{"weight":1}},{"id":6722,"outV":53,"properties":{"weight":1}},{"id":2371,"outV":87,"properties":{"weight":2}},{"id":2500,"outV":90,"properties":{"weight":1}},{"id":5060,"outV":257,"properties":{"weight":1}},{"id":5957,"outV":50,"properties":{"weight":2}},{"id":6981,"outV":175,"properties":{"weight":5}},{"id":4166,"outV":54,"properties":{"weight":6}},{"id":713,"outV":80,"properties":{"weight":1}},{"id":3789,"outV":168,"properties":{"weight":1}},{"id":6605,"outV":127,"properties":{"weight":1}},{"id":5070,"outV":128,"properties":{"weight":1}},{"id":2512,"outV":57,"properties":{"weight":3}},{"id":2896,"outV":101,"properties":{"weight":1}},{"id":467,"outV":194,"properties":{"weight":1}},{"id":2645,"outV":137,"properties":{"weight":3}},{"id":470,"outV":195,"properties":{"weight":1}},{"id":1240,"outV":183,"properties":{"weight":1}},{"id":1368,"outV":130,"properties":{"weight":10}},{"id":1752,"outV":28,"properties":{"weigh
 t":8}},{"id":2904,"outV":118,"properties":{"weight":1}},{"id":6105,"outV":72,"properties":{"weight":1}},{"id":1242,"outV":27,"properties":{"weight":5}},{"id":5212,"outV":99,"properties":{"weight":1}},{"id":3038,"outV":14,"properties":{"weight":1}},{"id":2271,"outV":25,"properties":{"weight":4}},{"id":5855,"outV":61,"properties":{"weight":1}},{"id":2016,"outV":149,"properties":{"weight":8}},{"id":4451,"outV":113,"properties":{"weight":1}},{"id":484,"outV":98,"properties":{"weight":2}},{"id":2788,"outV":15,"properties":{"weight":1}},{"id":3433,"outV":58,"properties":{"weight":3}},{"id":5738,"outV":129,"properties":{"weight":2}},{"id":5866,"outV":96,"properties":{"weight":96}},{"id":4588,"outV":85,"properties":{"weight":5}},{"id":238,"outV":145,"properties":{"weight":1}},{"id":2670,"outV":13,"properties":{"weight":4}},{"id":4462,"outV":202,"properties":{"weight":2}},{"id":7022,"outV":89,"properties":{"weight":1}},{"id":5359,"outV":132,"properties":{"weight":2}},{"id":6768,"outV":39,"pr
 operties":{"weight":2}},{"id":2162,"outV":151,"properties":{"weight":1}},{"id":3190,"outV":104,"properties":{"weight":1}},{"id":2040,"outV":92,"properties":{"weight":2}},{"id":3705,"outV":3,"properties":{"weight":2}},{"id":3322,"outV":252,"properties":{"weight":1}},{"id":5114,"outV":4,"properties":{"weight":1}},{"id":4347,"outV":62,"properties":{"weight":3}},{"id":4859,"outV":35,"properties":{"weight":4}},{"id":1148,"outV":26,"properties":{"weight":3}},{"id":6268,"outV":49,"properties":{"weight":51}},{"id":637,"outV":23,"properties":{"weight":3}},{"id":382,"outV":74,"properties":{"weight":4}}]},"outE":{"followedBy":[{"id":6319,"inV":59,"properties":{"weight":3}},{"id":6320,"inV":96,"properties":{"weight":72}},{"id":6321,"inV":319,"prope

<TRUNCATED>

[36/48] tinkerpop git commit: TINKERPOP-1274: GraphSON 2.0.

Posted by sp...@apache.org.
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/data/grateful-dead.json
----------------------------------------------------------------------
diff --git a/data/grateful-dead.json b/data/grateful-dead.json
index cf01395..92c4d84 100644
--- a/data/grateful-dead.json
+++ b/data/grateful-dead.json
@@ -1,257 +1,257 @@
 {"id":1,"label":"song","inE":{"followedBy":[{"id":3059,"outV":153,"properties":{"weight":1}},{"id":276,"outV":5,"properties":{"weight":2}},{"id":3704,"outV":3,"properties":{"weight":2}},{"id":4383,"outV":62,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":0,"inV":2,"properties":{"weight":1}},{"id":1,"inV":3,"properties":{"weight":2}},{"id":2,"inV":4,"properties":{"weight":1}},{"id":3,"inV":5,"properties":{"weight":1}},{"id":4,"inV":6,"properties":{"weight":1}}],"sungBy":[{"id":7612,"inV":340}],"writtenBy":[{"id":7611,"inV":527}]},"properties":{"name":[{"id":0,"value":"HEY BO DIDDLEY"}],"songType":[{"id":2,"value":"cover"}],"performances":[{"id":1,"value":5}]}}
 {"id":2,"label":"song","inE":{"followedBy":[{"id":0,"outV":1,"properties":{"weight":1}},{"id":323,"outV":34,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":6190,"inV":123,"properties":{"weight":1}},{"id":6191,"inV":50,"properties":{"weight":1}}],"sungBy":[{"id":7666,"inV":525}],"writtenBy":[{"id":7665,"inV":525}]},"properties":{"name":[{"id":3,"value":"IM A MAN"}],"songType":[{"id":5,"value":"cover"}],"performances":[{"id":4,"value":1}]}}
-{"id":3,"label":"song","inE":{"followedBy":[{"id":1,"outV":1,"properties":{"weight":2}},{"id":2051,"outV":92,"properties":{"weight":4}},{"id":1412,"outV":83,"properties":{"weight":6}},{"id":6669,"outV":12,"properties":{"weight":1}},{"id":1166,"outV":26,"properties":{"weight":4}},{"id":6286,"outV":49,"properties":{"weight":1}},{"id":910,"outV":91,"properties":{"weight":3}},{"id":526,"outV":120,"properties":{"weight":2}},{"id":273,"outV":5,"properties":{"weight":40}},{"id":2194,"outV":235,"properties":{"weight":1}},{"id":1684,"outV":124,"properties":{"weight":1}},{"id":3221,"outV":63,"properties":{"weight":1}},{"id":1941,"outV":148,"properties":{"weight":4}},{"id":2712,"outV":13,"properties":{"weight":3}},{"id":6425,"outV":134,"properties":{"weight":2}},{"id":5787,"outV":76,"properties":{"weight":2}},{"id":5148,"outV":125,"properties":{"weight":4}},{"id":6692,"outV":141,"properties":{"weight":2}},{"id":6310,"outV":123,"properties":{"weight":1}},{"id":6448,"outV":187,"properties":{"wei
 ght":3}},{"id":2225,"outV":226,"properties":{"weight":1}},{"id":5042,"outV":209,"properties":{"weight":1}},{"id":4789,"outV":114,"properties":{"weight":2}},{"id":1464,"outV":81,"properties":{"weight":1}},{"id":2232,"outV":215,"properties":{"weight":1}},{"id":4665,"outV":154,"properties":{"weight":1}},{"id":2235,"outV":29,"properties":{"weight":163}},{"id":6208,"outV":319,"properties":{"weight":4}},{"id":706,"outV":206,"properties":{"weight":2}},{"id":835,"outV":171,"properties":{"weight":1}},{"id":5188,"outV":99,"properties":{"weight":1}},{"id":1862,"outV":94,"properties":{"weight":10}},{"id":6343,"outV":21,"properties":{"weight":1}},{"id":1735,"outV":82,"properties":{"weight":1}},{"id":4937,"outV":277,"properties":{"weight":1}},{"id":3276,"outV":160,"properties":{"weight":1}},{"id":3149,"outV":104,"properties":{"weight":1}},{"id":1358,"outV":130,"properties":{"weight":18}},{"id":4304,"outV":110,"properties":{"weight":1}},{"id":1105,"outV":59,"properties":{"weight":1}},{"id":722,"ou
 tV":80,"properties":{"weight":1}},{"id":4182,"outV":54,"properties":{"weight":1}},{"id":1499,"outV":164,"properties":{"weight":2}},{"id":2397,"outV":179,"properties":{"weight":1}},{"id":6623,"outV":127,"properties":{"weight":3}},{"id":351,"outV":178,"properties":{"weight":1}},{"id":2018,"outV":149,"properties":{"weight":1}},{"id":7011,"outV":89,"properties":{"weight":2}},{"id":5348,"outV":165,"properties":{"weight":1}},{"id":2278,"outV":25,"properties":{"weight":7}},{"id":1255,"outV":27,"properties":{"weight":2}},{"id":3048,"outV":153,"properties":{"weight":13}},{"id":5867,"outV":96,"properties":{"weight":116}},{"id":364,"outV":74,"properties":{"weight":2}},{"id":492,"outV":98,"properties":{"weight":1}},{"id":3948,"outV":138,"properties":{"weight":4}},{"id":4335,"outV":62,"properties":{"weight":1}},{"id":3312,"outV":252,"properties":{"weight":1}},{"id":5745,"outV":129,"properties":{"weight":1}},{"id":4596,"outV":85,"properties":{"weight":3}},{"id":5367,"outV":132,"properties":{"weig
 ht":1}},{"id":633,"outV":23,"properties":{"weight":1}},{"id":891,"outV":140,"properties":{"weight":2}},{"id":5375,"outV":69,"properties":{"weight":1}},{"id":6143,"outV":289,"properties":{"weight":3}}]},"outE":{"followedBy":[{"id":3712,"inV":27,"properties":{"weight":1}},{"id":3713,"inV":110,"properties":{"weight":4}},{"id":3714,"inV":215,"properties":{"weight":4}},{"id":3715,"inV":127,"properties":{"weight":10}},{"id":3716,"inV":83,"properties":{"weight":3}},{"id":3717,"inV":103,"properties":{"weight":2}},{"id":3718,"inV":68,"properties":{"weight":1}},{"id":3719,"inV":134,"properties":{"weight":2}},{"id":3720,"inV":25,"properties":{"weight":10}},{"id":3721,"inV":125,"properties":{"weight":54}},{"id":3722,"inV":130,"properties":{"weight":26}},{"id":3723,"inV":141,"properties":{"weight":2}},{"id":3724,"inV":145,"properties":{"weight":1}},{"id":3725,"inV":319,"properties":{"weight":3}},{"id":3726,"inV":12,"properties":{"weight":1}},{"id":3727,"inV":160,"properties":{"weight":37}},{"id"
 :3728,"inV":70,"properties":{"weight":2}},{"id":3729,"inV":123,"properties":{"weight":1}},{"id":3730,"inV":129,"properties":{"weight":1}},{"id":3731,"inV":30,"properties":{"weight":2}},{"id":3732,"inV":148,"properties":{"weight":1}},{"id":3733,"inV":211,"properties":{"weight":3}},{"id":3734,"inV":87,"properties":{"weight":13}},{"id":3735,"inV":164,"properties":{"weight":4}},{"id":3736,"inV":64,"properties":{"weight":2}},{"id":3737,"inV":320,"properties":{"weight":1}},{"id":3738,"inV":61,"properties":{"weight":3}},{"id":3739,"inV":210,"properties":{"weight":3}},{"id":3740,"inV":50,"properties":{"weight":7}},{"id":3741,"inV":128,"properties":{"weight":3}},{"id":3742,"inV":315,"properties":{"weight":1}},{"id":3743,"inV":261,"properties":{"weight":1}},{"id":3744,"inV":213,"properties":{"weight":13}},{"id":3745,"inV":72,"properties":{"weight":1}},{"id":3746,"inV":38,"properties":{"weight":4}},{"id":3747,"inV":204,"properties":{"weight":14}},{"id":3748,"inV":62,"properties":{"weight":2}},
 {"id":3749,"inV":150,"properties":{"weight":8}},{"id":3750,"inV":309,"properties":{"weight":1}},{"id":3751,"inV":131,"properties":{"weight":1}},{"id":3752,"inV":151,"properties":{"weight":1}},{"id":3753,"inV":321,"properties":{"weight":1}},{"id":3754,"inV":90,"properties":{"weight":2}},{"id":3755,"inV":82,"properties":{"weight":1}},{"id":3756,"inV":120,"properties":{"weight":1}},{"id":3757,"inV":46,"properties":{"weight":5}},{"id":3758,"inV":157,"properties":{"weight":5}},{"id":3759,"inV":59,"properties":{"weight":1}},{"id":3760,"inV":81,"properties":{"weight":1}},{"id":3761,"inV":86,"properties":{"weight":5}},{"id":3762,"inV":140,"properties":{"weight":1}},{"id":3763,"inV":201,"properties":{"weight":1}},{"id":3764,"inV":214,"properties":{"weight":1}},{"id":3765,"inV":185,"properties":{"weight":2}},{"id":3766,"inV":216,"properties":{"weight":1}},{"id":3767,"inV":217,"properties":{"weight":2}},{"id":3768,"inV":236,"properties":{"weight":5}},{"id":3769,"inV":193,"properties":{"weight"
 :1}},{"id":3770,"inV":79,"properties":{"weight":2}},{"id":3771,"inV":84,"properties":{"weight":1}},{"id":3772,"inV":23,"properties":{"weight":2}},{"id":3773,"inV":31,"properties":{"weight":2}},{"id":3774,"inV":240,"properties":{"weight":1}},{"id":3775,"inV":292,"properties":{"weight":1}},{"id":3776,"inV":9,"properties":{"weight":1}},{"id":3777,"inV":259,"properties":{"weight":1}},{"id":3694,"inV":5,"properties":{"weight":57}},{"id":3695,"inV":114,"properties":{"weight":30}},{"id":3696,"inV":74,"properties":{"weight":2}},{"id":3697,"inV":78,"properties":{"weight":3}},{"id":3698,"inV":10,"properties":{"weight":1}},{"id":3699,"inV":26,"properties":{"weight":4}},{"id":3700,"inV":153,"properties":{"weight":7}},{"id":3701,"inV":4,"properties":{"weight":4}},{"id":3702,"inV":317,"properties":{"weight":1}},{"id":3703,"inV":13,"properties":{"weight":5}},{"id":3704,"inV":1,"properties":{"weight":2}},{"id":3705,"inV":21,"properties":{"weight":2}},{"id":3706,"inV":57,"properties":{"weight":2}},{
 "id":3707,"inV":122,"properties":{"weight":2}},{"id":3708,"inV":318,"properties":{"weight":1}},{"id":3709,"inV":94,"properties":{"weight":26}},{"id":3710,"inV":96,"properties":{"weight":7}},{"id":3711,"inV":124,"properties":{"weight":15}}],"sungBy":[{"id":7808,"inV":351}],"writtenBy":[{"id":7807,"inV":671}]},"properties":{"name":[{"id":6,"value":"NOT FADE AWAY"}],"songType":[{"id":8,"value":"cover"}],"performances":[{"id":7,"value":531}]}}
-{"id":4,"label":"song","inE":{"followedBy":[{"id":128,"outV":97,"properties":{"weight":1}},{"id":1664,"outV":267,"properties":{"weight":1}},{"id":2,"outV":1,"properties":{"weight":1}},{"id":4099,"outV":48,"properties":{"weight":1}},{"id":1667,"outV":124,"properties":{"weight":15}},{"id":899,"outV":140,"properties":{"weight":1}},{"id":1156,"outV":26,"properties":{"weight":16}},{"id":773,"outV":122,"properties":{"weight":9}},{"id":6534,"outV":242,"properties":{"weight":1}},{"id":6664,"outV":12,"properties":{"weight":3}},{"id":1032,"outV":73,"properties":{"weight":1}},{"id":5129,"outV":222,"properties":{"weight":1}},{"id":5387,"outV":69,"properties":{"weight":1}},{"id":5517,"outV":43,"properties":{"weight":2}},{"id":5006,"outV":30,"properties":{"weight":2}},{"id":6030,"outV":204,"properties":{"weight":2}},{"id":2063,"outV":92,"properties":{"weight":1}},{"id":915,"outV":91,"properties":{"weight":2}},{"id":6940,"outV":84,"properties":{"weight":5}},{"id":2464,"outV":68,"properties":{"weig
 ht":1}},{"id":5795,"outV":76,"properties":{"weight":2}},{"id":3620,"outV":24,"properties":{"weight":2}},{"id":4772,"outV":114,"properties":{"weight":25}},{"id":2982,"outV":14,"properties":{"weight":3}},{"id":3367,"outV":184,"properties":{"weight":6}},{"id":2345,"outV":87,"properties":{"weight":2}},{"id":2861,"outV":101,"properties":{"weight":6}},{"id":1840,"outV":275,"properties":{"weight":1}},{"id":5425,"outV":102,"properties":{"weight":1}},{"id":180,"outV":70,"properties":{"weight":46}},{"id":2613,"outV":158,"properties":{"weight":1}},{"id":5562,"outV":162,"properties":{"weight":2}},{"id":5434,"outV":217,"properties":{"weight":1}},{"id":1469,"outV":81,"properties":{"weight":1}},{"id":446,"outV":38,"properties":{"weight":7}},{"id":2494,"outV":90,"properties":{"weight":3}},{"id":3266,"outV":160,"properties":{"weight":10}},{"id":326,"outV":34,"properties":{"weight":1}},{"id":6855,"outV":64,"properties":{"weight":12}},{"id":583,"outV":120,"properties":{"weight":2}},{"id":73,"outV":46,
 "properties":{"weight":4}},{"id":4425,"outV":212,"properties":{"weight":1}},{"id":4941,"outV":86,"properties":{"weight":2}},{"id":1613,"outV":210,"properties":{"weight":2}},{"id":6350,"outV":21,"properties":{"weight":1}},{"id":3535,"outV":201,"properties":{"weight":1}},{"id":980,"outV":11,"properties":{"weight":3}},{"id":5206,"outV":99,"properties":{"weight":1}},{"id":1494,"outV":164,"properties":{"weight":3}},{"id":5847,"outV":61,"properties":{"weight":2}},{"id":6490,"outV":187,"properties":{"weight":1}},{"id":2781,"outV":15,"properties":{"weight":4}},{"id":5600,"outV":42,"properties":{"weight":1}},{"id":353,"outV":74,"properties":{"weight":6}},{"id":5474,"outV":79,"properties":{"weight":1}},{"id":3811,"outV":88,"properties":{"weight":2}},{"id":1891,"outV":103,"properties":{"weight":19}},{"id":5989,"outV":50,"properties":{"weight":12}},{"id":4327,"outV":110,"properties":{"weight":2}},{"id":2538,"outV":57,"properties":{"weight":4}},{"id":3050,"outV":153,"properties":{"weight":13}},{
 "id":4970,"outV":236,"properties":{"weight":1}},{"id":2283,"outV":25,"properties":{"weight":9}},{"id":236,"outV":145,"properties":{"weight":1}},{"id":6126,"outV":72,"properties":{"weight":2}},{"id":5232,"outV":214,"properties":{"weight":2}},{"id":4594,"outV":85,"properties":{"weight":1}},{"id":4084,"outV":109,"properties":{"weight":1}},{"id":1652,"outV":213,"properties":{"weight":3}},{"id":3701,"outV":3,"properties":{"weight":4}},{"id":5621,"outV":22,"properties":{"weight":1}},{"id":629,"outV":23,"properties":{"weight":10}},{"id":7029,"outV":89,"properties":{"weight":1}},{"id":5238,"outV":32,"properties":{"weight":3}},{"id":2684,"outV":13,"properties":{"weight":9}},{"id":3325,"outV":268,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":5120,"inV":40,"properties":{"weight":5}},{"id":5121,"inV":33,"properties":{"weight":3}},{"id":5122,"inV":79,"properties":{"weight":1}},{"id":5123,"inV":292,"properties":{"weight":1}},{"id":5071,"inV":50,"properties":{"weight":9}},{"id":5072,"in
 V":12,"properties":{"weight":26}},{"id":5073,"inV":18,"properties":{"weight":4}},{"id":5074,"inV":24,"properties":{"weight":9}},{"id":5075,"inV":23,"properties":{"weight":63}},{"id":5076,"inV":13,"properties":{"weight":12}},{"id":5077,"inV":10,"properties":{"weight":4}},{"id":5078,"inV":11,"properties":{"weight":3}},{"id":5079,"inV":26,"properties":{"weight":18}},{"id":5080,"inV":22,"properties":{"weight":1}},{"id":5081,"inV":16,"properties":{"weight":2}},{"id":5082,"inV":49,"properties":{"weight":1}},{"id":5083,"inV":25,"properties":{"weight":2}},{"id":5084,"inV":51,"properties":{"weight":1}},{"id":5085,"inV":15,"properties":{"weight":1}},{"id":5086,"inV":112,"properties":{"weight":4}},{"id":5087,"inV":121,"properties":{"weight":1}},{"id":5088,"inV":32,"properties":{"weight":7}},{"id":5089,"inV":68,"properties":{"weight":2}},{"id":5090,"inV":120,"properties":{"weight":77}},{"id":5091,"inV":103,"properties":{"weight":1}},{"id":5092,"inV":42,"properties":{"weight":3}},{"id":5093,"inV
 ":85,"properties":{"weight":4}},{"id":5094,"inV":76,"properties":{"weight":5}},{"id":5095,"inV":181,"properties":{"weight":2}},{"id":5096,"inV":14,"properties":{"weight":2}},{"id":5097,"inV":122,"properties":{"weight":1}},{"id":5098,"inV":153,"properties":{"weight":3}},{"id":5099,"inV":96,"properties":{"weight":1}},{"id":5100,"inV":82,"properties":{"weight":3}},{"id":5101,"inV":110,"properties":{"weight":1}},{"id":5102,"inV":19,"properties":{"weight":6}},{"id":5103,"inV":129,"properties":{"weight":1}},{"id":5104,"inV":84,"properties":{"weight":1}},{"id":5105,"inV":88,"properties":{"weight":9}},{"id":5106,"inV":97,"properties":{"weight":1}},{"id":5107,"inV":114,"properties":{"weight":2}},{"id":5108,"inV":30,"properties":{"weight":8}},{"id":5109,"inV":31,"properties":{"weight":8}},{"id":5110,"inV":69,"properties":{"weight":4}},{"id":5111,"inV":127,"properties":{"weight":2}},{"id":5112,"inV":60,"properties":{"weight":1}},{"id":5113,"inV":39,"properties":{"weight":2}},{"id":5114,"inV":2
 1,"properties":{"weight":1}},{"id":5115,"inV":117,"properties":{"weight":1}},{"id":5116,"inV":78,"properties":{"weight":1}},{"id":5117,"inV":38,"properties":{"weight":1}},{"id":5118,"inV":169,"properties":{"weight":2}},{"id":5119,"inV":118,"properties":{"weight":1}}],"sungBy":[{"id":7064,"inV":340}],"writtenBy":[{"id":7063,"inV":339}]},"properties":{"name":[{"id":9,"value":"BERTHA"}],"songType":[{"id":11,"value":"original"}],"performances":[{"id":10,"value":394}]}}
-{"id":5,"label":"song","inE":{"followedBy":[{"id":962,"outV":67,"properties":{"weight":5}},{"id":194,"outV":70,"properties":{"weight":8}},{"id":3,"outV":1,"properties":{"weight":1}},{"id":5446,"outV":231,"properties":{"weight":5}},{"id":6344,"outV":21,"properties":{"weight":6}},{"id":6666,"outV":12,"properties":{"weight":1}},{"id":1738,"outV":82,"properties":{"weight":1}},{"id":1867,"outV":94,"properties":{"weight":15}},{"id":4300,"outV":110,"properties":{"weight":1}},{"id":847,"outV":171,"properties":{"weight":1}},{"id":2832,"outV":101,"properties":{"weight":3}},{"id":6032,"outV":115,"properties":{"weight":1}},{"id":1170,"outV":26,"properties":{"weight":1}},{"id":5330,"outV":238,"properties":{"weight":1}},{"id":1491,"outV":164,"properties":{"weight":3}},{"id":1429,"outV":83,"properties":{"weight":3}},{"id":3033,"outV":14,"properties":{"weight":1}},{"id":6298,"outV":49,"properties":{"weight":1}},{"id":1373,"outV":130,"properties":{"weight":11}},{"id":4447,"outV":113,"properties":{"w
 eight":1}},{"id":5151,"outV":125,"properties":{"weight":6}},{"id":6431,"outV":134,"properties":{"weight":2}},{"id":5343,"outV":165,"properties":{"weight":2}},{"id":1953,"outV":148,"properties":{"weight":10}},{"id":2274,"outV":25,"properties":{"weight":8}},{"id":1634,"outV":210,"properties":{"weight":1}},{"id":100,"outV":46,"properties":{"weight":1}},{"id":933,"outV":91,"properties":{"weight":1}},{"id":2021,"outV":149,"properties":{"weight":1}},{"id":6694,"outV":141,"properties":{"weight":2}},{"id":4009,"outV":225,"properties":{"weight":1}},{"id":682,"outV":219,"properties":{"weight":1}},{"id":3694,"outV":3,"properties":{"weight":57}},{"id":4718,"outV":186,"properties":{"weight":6}},{"id":3055,"outV":153,"properties":{"weight":9}},{"id":2736,"outV":13,"properties":{"weight":3}},{"id":2480,"outV":68,"properties":{"weight":1}},{"id":5426,"outV":102,"properties":{"weight":1}},{"id":6899,"outV":147,"properties":{"weight":1}},{"id":5879,"outV":96,"properties":{"weight":22}},{"id":6201,"ou
 tV":319,"properties":{"weight":2}},{"id":5370,"outV":132,"properties":{"weight":2}},{"id":2236,"outV":29,"properties":{"weight":5}},{"id":4604,"outV":85,"properties":{"weight":2}},{"id":700,"outV":206,"properties":{"weight":1}},{"id":5759,"outV":129,"properties":{"weight":6}}]},"outE":{"followedBy":[{"id":273,"inV":3,"properties":{"weight":40}},{"id":274,"inV":26,"properties":{"weight":3}},{"id":275,"inV":114,"properties":{"weight":40}},{"id":276,"inV":1,"properties":{"weight":2}},{"id":277,"inV":74,"properties":{"weight":3}},{"id":278,"inV":122,"properties":{"weight":3}},{"id":279,"inV":133,"properties":{"weight":2}},{"id":280,"inV":83,"properties":{"weight":1}},{"id":281,"inV":153,"properties":{"weight":5}},{"id":282,"inV":159,"properties":{"weight":1}},{"id":283,"inV":13,"properties":{"weight":3}},{"id":284,"inV":25,"properties":{"weight":19}},{"id":285,"inV":96,"properties":{"weight":10}},{"id":286,"inV":160,"properties":{"weight":2}},{"id":287,"inV":32,"properties":{"weight":1}
 },{"id":288,"inV":120,"properties":{"weight":16}},{"id":289,"inV":50,"properties":{"weight":1}},{"id":290,"inV":116,"properties":{"weight":1}},{"id":291,"inV":127,"properties":{"weight":6}},{"id":292,"inV":65,"properties":{"weight":1}},{"id":293,"inV":130,"properties":{"weight":3}},{"id":294,"inV":125,"properties":{"weight":5}},{"id":295,"inV":70,"properties":{"weight":13}},{"id":296,"inV":134,"properties":{"weight":1}},{"id":297,"inV":161,"properties":{"weight":1}},{"id":298,"inV":162,"properties":{"weight":1}},{"id":299,"inV":124,"properties":{"weight":3}},{"id":300,"inV":38,"properties":{"weight":1}},{"id":301,"inV":29,"properties":{"weight":11}},{"id":302,"inV":163,"properties":{"weight":1}},{"id":303,"inV":94,"properties":{"weight":5}},{"id":304,"inV":85,"properties":{"weight":1}},{"id":305,"inV":164,"properties":{"weight":6}},{"id":306,"inV":64,"properties":{"weight":1}},{"id":307,"inV":150,"properties":{"weight":1}},{"id":308,"inV":165,"properties":{"weight":7}},{"id":309,"in
 V":92,"properties":{"weight":1}},{"id":310,"inV":140,"properties":{"weight":1}},{"id":311,"inV":166,"properties":{"weight":1}}],"sungBy":[{"id":7582,"inV":340}],"writtenBy":[{"id":7581,"inV":446}]},"properties":{"name":[{"id":12,"value":"GOING DOWN THE ROAD FEELING BAD"}],"songType":[{"id":14,"value":"cover"}],"performances":[{"id":13,"value":293}]}}
+{"id":3,"label":"song","inE":{"followedBy":[{"id":1,"outV":1,"properties":{"weight":2}},{"id":2051,"outV":92,"properties":{"weight":4}},{"id":1412,"outV":83,"properties":{"weight":6}},{"id":6669,"outV":12,"properties":{"weight":1}},{"id":526,"outV":120,"properties":{"weight":2}},{"id":910,"outV":91,"properties":{"weight":3}},{"id":1166,"outV":26,"properties":{"weight":4}},{"id":6286,"outV":49,"properties":{"weight":1}},{"id":273,"outV":5,"properties":{"weight":40}},{"id":2194,"outV":235,"properties":{"weight":1}},{"id":1684,"outV":124,"properties":{"weight":1}},{"id":1941,"outV":148,"properties":{"weight":4}},{"id":3221,"outV":63,"properties":{"weight":1}},{"id":2712,"outV":13,"properties":{"weight":3}},{"id":6425,"outV":134,"properties":{"weight":2}},{"id":5787,"outV":76,"properties":{"weight":2}},{"id":5148,"outV":125,"properties":{"weight":4}},{"id":6692,"outV":141,"properties":{"weight":2}},{"id":6310,"outV":123,"properties":{"weight":1}},{"id":6448,"outV":187,"properties":{"wei
 ght":3}},{"id":2225,"outV":226,"properties":{"weight":1}},{"id":5042,"outV":209,"properties":{"weight":1}},{"id":4789,"outV":114,"properties":{"weight":2}},{"id":1464,"outV":81,"properties":{"weight":1}},{"id":2232,"outV":215,"properties":{"weight":1}},{"id":4665,"outV":154,"properties":{"weight":1}},{"id":2235,"outV":29,"properties":{"weight":163}},{"id":6208,"outV":319,"properties":{"weight":4}},{"id":706,"outV":206,"properties":{"weight":2}},{"id":835,"outV":171,"properties":{"weight":1}},{"id":5188,"outV":99,"properties":{"weight":1}},{"id":1862,"outV":94,"properties":{"weight":10}},{"id":1735,"outV":82,"properties":{"weight":1}},{"id":6343,"outV":21,"properties":{"weight":1}},{"id":4937,"outV":277,"properties":{"weight":1}},{"id":3276,"outV":160,"properties":{"weight":1}},{"id":3149,"outV":104,"properties":{"weight":1}},{"id":1358,"outV":130,"properties":{"weight":18}},{"id":4304,"outV":110,"properties":{"weight":1}},{"id":1105,"outV":59,"properties":{"weight":1}},{"id":722,"ou
 tV":80,"properties":{"weight":1}},{"id":4182,"outV":54,"properties":{"weight":1}},{"id":1499,"outV":164,"properties":{"weight":2}},{"id":2397,"outV":179,"properties":{"weight":1}},{"id":351,"outV":178,"properties":{"weight":1}},{"id":6623,"outV":127,"properties":{"weight":3}},{"id":2018,"outV":149,"properties":{"weight":1}},{"id":7011,"outV":89,"properties":{"weight":2}},{"id":5348,"outV":165,"properties":{"weight":1}},{"id":2278,"outV":25,"properties":{"weight":7}},{"id":1255,"outV":27,"properties":{"weight":2}},{"id":3048,"outV":153,"properties":{"weight":13}},{"id":5867,"outV":96,"properties":{"weight":116}},{"id":364,"outV":74,"properties":{"weight":2}},{"id":492,"outV":98,"properties":{"weight":1}},{"id":3948,"outV":138,"properties":{"weight":4}},{"id":4335,"outV":62,"properties":{"weight":1}},{"id":3312,"outV":252,"properties":{"weight":1}},{"id":5745,"outV":129,"properties":{"weight":1}},{"id":4596,"outV":85,"properties":{"weight":3}},{"id":5367,"outV":132,"properties":{"weig
 ht":1}},{"id":633,"outV":23,"properties":{"weight":1}},{"id":891,"outV":140,"properties":{"weight":2}},{"id":5375,"outV":69,"properties":{"weight":1}},{"id":6143,"outV":289,"properties":{"weight":3}}]},"outE":{"followedBy":[{"id":3712,"inV":27,"properties":{"weight":1}},{"id":3713,"inV":110,"properties":{"weight":4}},{"id":3714,"inV":215,"properties":{"weight":4}},{"id":3715,"inV":127,"properties":{"weight":10}},{"id":3716,"inV":83,"properties":{"weight":3}},{"id":3717,"inV":103,"properties":{"weight":2}},{"id":3718,"inV":68,"properties":{"weight":1}},{"id":3719,"inV":134,"properties":{"weight":2}},{"id":3720,"inV":25,"properties":{"weight":10}},{"id":3721,"inV":125,"properties":{"weight":54}},{"id":3722,"inV":130,"properties":{"weight":26}},{"id":3723,"inV":141,"properties":{"weight":2}},{"id":3724,"inV":145,"properties":{"weight":1}},{"id":3725,"inV":319,"properties":{"weight":3}},{"id":3726,"inV":12,"properties":{"weight":1}},{"id":3727,"inV":160,"properties":{"weight":37}},{"id"
 :3728,"inV":70,"properties":{"weight":2}},{"id":3729,"inV":123,"properties":{"weight":1}},{"id":3730,"inV":129,"properties":{"weight":1}},{"id":3731,"inV":30,"properties":{"weight":2}},{"id":3732,"inV":148,"properties":{"weight":1}},{"id":3733,"inV":211,"properties":{"weight":3}},{"id":3734,"inV":87,"properties":{"weight":13}},{"id":3735,"inV":164,"properties":{"weight":4}},{"id":3736,"inV":64,"properties":{"weight":2}},{"id":3737,"inV":320,"properties":{"weight":1}},{"id":3738,"inV":61,"properties":{"weight":3}},{"id":3739,"inV":210,"properties":{"weight":3}},{"id":3740,"inV":50,"properties":{"weight":7}},{"id":3741,"inV":128,"properties":{"weight":3}},{"id":3742,"inV":315,"properties":{"weight":1}},{"id":3743,"inV":261,"properties":{"weight":1}},{"id":3744,"inV":213,"properties":{"weight":13}},{"id":3745,"inV":72,"properties":{"weight":1}},{"id":3746,"inV":38,"properties":{"weight":4}},{"id":3747,"inV":204,"properties":{"weight":14}},{"id":3748,"inV":62,"properties":{"weight":2}},
 {"id":3749,"inV":150,"properties":{"weight":8}},{"id":3750,"inV":309,"properties":{"weight":1}},{"id":3751,"inV":131,"properties":{"weight":1}},{"id":3752,"inV":151,"properties":{"weight":1}},{"id":3753,"inV":321,"properties":{"weight":1}},{"id":3754,"inV":90,"properties":{"weight":2}},{"id":3755,"inV":82,"properties":{"weight":1}},{"id":3756,"inV":120,"properties":{"weight":1}},{"id":3757,"inV":46,"properties":{"weight":5}},{"id":3758,"inV":157,"properties":{"weight":5}},{"id":3759,"inV":59,"properties":{"weight":1}},{"id":3760,"inV":81,"properties":{"weight":1}},{"id":3761,"inV":86,"properties":{"weight":5}},{"id":3762,"inV":140,"properties":{"weight":1}},{"id":3763,"inV":201,"properties":{"weight":1}},{"id":3764,"inV":214,"properties":{"weight":1}},{"id":3765,"inV":185,"properties":{"weight":2}},{"id":3766,"inV":216,"properties":{"weight":1}},{"id":3767,"inV":217,"properties":{"weight":2}},{"id":3768,"inV":236,"properties":{"weight":5}},{"id":3769,"inV":193,"properties":{"weight"
 :1}},{"id":3770,"inV":79,"properties":{"weight":2}},{"id":3771,"inV":84,"properties":{"weight":1}},{"id":3772,"inV":23,"properties":{"weight":2}},{"id":3773,"inV":31,"properties":{"weight":2}},{"id":3774,"inV":240,"properties":{"weight":1}},{"id":3775,"inV":292,"properties":{"weight":1}},{"id":3776,"inV":9,"properties":{"weight":1}},{"id":3777,"inV":259,"properties":{"weight":1}},{"id":3694,"inV":5,"properties":{"weight":57}},{"id":3695,"inV":114,"properties":{"weight":30}},{"id":3696,"inV":74,"properties":{"weight":2}},{"id":3697,"inV":78,"properties":{"weight":3}},{"id":3698,"inV":10,"properties":{"weight":1}},{"id":3699,"inV":26,"properties":{"weight":4}},{"id":3700,"inV":153,"properties":{"weight":7}},{"id":3701,"inV":4,"properties":{"weight":4}},{"id":3702,"inV":317,"properties":{"weight":1}},{"id":3703,"inV":13,"properties":{"weight":5}},{"id":3704,"inV":1,"properties":{"weight":2}},{"id":3705,"inV":21,"properties":{"weight":2}},{"id":3706,"inV":57,"properties":{"weight":2}},{
 "id":3707,"inV":122,"properties":{"weight":2}},{"id":3708,"inV":318,"properties":{"weight":1}},{"id":3709,"inV":94,"properties":{"weight":26}},{"id":3710,"inV":96,"properties":{"weight":7}},{"id":3711,"inV":124,"properties":{"weight":15}}],"sungBy":[{"id":7808,"inV":351}],"writtenBy":[{"id":7807,"inV":671}]},"properties":{"name":[{"id":6,"value":"NOT FADE AWAY"}],"songType":[{"id":8,"value":"cover"}],"performances":[{"id":7,"value":531}]}}
+{"id":4,"label":"song","inE":{"followedBy":[{"id":128,"outV":97,"properties":{"weight":1}},{"id":1664,"outV":267,"properties":{"weight":1}},{"id":2,"outV":1,"properties":{"weight":1}},{"id":899,"outV":140,"properties":{"weight":1}},{"id":1667,"outV":124,"properties":{"weight":15}},{"id":4099,"outV":48,"properties":{"weight":1}},{"id":1156,"outV":26,"properties":{"weight":16}},{"id":773,"outV":122,"properties":{"weight":9}},{"id":6534,"outV":242,"properties":{"weight":1}},{"id":1032,"outV":73,"properties":{"weight":1}},{"id":6664,"outV":12,"properties":{"weight":3}},{"id":5129,"outV":222,"properties":{"weight":1}},{"id":5387,"outV":69,"properties":{"weight":1}},{"id":5517,"outV":43,"properties":{"weight":2}},{"id":5006,"outV":30,"properties":{"weight":2}},{"id":6030,"outV":204,"properties":{"weight":2}},{"id":2063,"outV":92,"properties":{"weight":1}},{"id":915,"outV":91,"properties":{"weight":2}},{"id":6940,"outV":84,"properties":{"weight":5}},{"id":2464,"outV":68,"properties":{"weig
 ht":1}},{"id":5795,"outV":76,"properties":{"weight":2}},{"id":3620,"outV":24,"properties":{"weight":2}},{"id":4772,"outV":114,"properties":{"weight":25}},{"id":2982,"outV":14,"properties":{"weight":3}},{"id":3367,"outV":184,"properties":{"weight":6}},{"id":2345,"outV":87,"properties":{"weight":2}},{"id":2861,"outV":101,"properties":{"weight":6}},{"id":1840,"outV":275,"properties":{"weight":1}},{"id":5425,"outV":102,"properties":{"weight":1}},{"id":180,"outV":70,"properties":{"weight":46}},{"id":2613,"outV":158,"properties":{"weight":1}},{"id":5434,"outV":217,"properties":{"weight":1}},{"id":5562,"outV":162,"properties":{"weight":2}},{"id":1469,"outV":81,"properties":{"weight":1}},{"id":446,"outV":38,"properties":{"weight":7}},{"id":2494,"outV":90,"properties":{"weight":3}},{"id":3266,"outV":160,"properties":{"weight":10}},{"id":326,"outV":34,"properties":{"weight":1}},{"id":583,"outV":120,"properties":{"weight":2}},{"id":6855,"outV":64,"properties":{"weight":12}},{"id":73,"outV":46,
 "properties":{"weight":4}},{"id":4425,"outV":212,"properties":{"weight":1}},{"id":1613,"outV":210,"properties":{"weight":2}},{"id":4941,"outV":86,"properties":{"weight":2}},{"id":6350,"outV":21,"properties":{"weight":1}},{"id":3535,"outV":201,"properties":{"weight":1}},{"id":980,"outV":11,"properties":{"weight":3}},{"id":1494,"outV":164,"properties":{"weight":3}},{"id":5206,"outV":99,"properties":{"weight":1}},{"id":5847,"outV":61,"properties":{"weight":2}},{"id":6490,"outV":187,"properties":{"weight":1}},{"id":2781,"outV":15,"properties":{"weight":4}},{"id":5600,"outV":42,"properties":{"weight":1}},{"id":353,"outV":74,"properties":{"weight":6}},{"id":5474,"outV":79,"properties":{"weight":1}},{"id":1891,"outV":103,"properties":{"weight":19}},{"id":3811,"outV":88,"properties":{"weight":2}},{"id":5989,"outV":50,"properties":{"weight":12}},{"id":4327,"outV":110,"properties":{"weight":2}},{"id":2538,"outV":57,"properties":{"weight":4}},{"id":3050,"outV":153,"properties":{"weight":13}},{
 "id":4970,"outV":236,"properties":{"weight":1}},{"id":2283,"outV":25,"properties":{"weight":9}},{"id":236,"outV":145,"properties":{"weight":1}},{"id":6126,"outV":72,"properties":{"weight":2}},{"id":5232,"outV":214,"properties":{"weight":2}},{"id":4594,"outV":85,"properties":{"weight":1}},{"id":1652,"outV":213,"properties":{"weight":3}},{"id":4084,"outV":109,"properties":{"weight":1}},{"id":629,"outV":23,"properties":{"weight":10}},{"id":3701,"outV":3,"properties":{"weight":4}},{"id":5621,"outV":22,"properties":{"weight":1}},{"id":7029,"outV":89,"properties":{"weight":1}},{"id":5238,"outV":32,"properties":{"weight":3}},{"id":2684,"outV":13,"properties":{"weight":9}},{"id":3325,"outV":268,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":5120,"inV":40,"properties":{"weight":5}},{"id":5121,"inV":33,"properties":{"weight":3}},{"id":5122,"inV":79,"properties":{"weight":1}},{"id":5123,"inV":292,"properties":{"weight":1}},{"id":5071,"inV":50,"properties":{"weight":9}},{"id":5072,"in
 V":12,"properties":{"weight":26}},{"id":5073,"inV":18,"properties":{"weight":4}},{"id":5074,"inV":24,"properties":{"weight":9}},{"id":5075,"inV":23,"properties":{"weight":63}},{"id":5076,"inV":13,"properties":{"weight":12}},{"id":5077,"inV":10,"properties":{"weight":4}},{"id":5078,"inV":11,"properties":{"weight":3}},{"id":5079,"inV":26,"properties":{"weight":18}},{"id":5080,"inV":22,"properties":{"weight":1}},{"id":5081,"inV":16,"properties":{"weight":2}},{"id":5082,"inV":49,"properties":{"weight":1}},{"id":5083,"inV":25,"properties":{"weight":2}},{"id":5084,"inV":51,"properties":{"weight":1}},{"id":5085,"inV":15,"properties":{"weight":1}},{"id":5086,"inV":112,"properties":{"weight":4}},{"id":5087,"inV":121,"properties":{"weight":1}},{"id":5088,"inV":32,"properties":{"weight":7}},{"id":5089,"inV":68,"properties":{"weight":2}},{"id":5090,"inV":120,"properties":{"weight":77}},{"id":5091,"inV":103,"properties":{"weight":1}},{"id":5092,"inV":42,"properties":{"weight":3}},{"id":5093,"inV
 ":85,"properties":{"weight":4}},{"id":5094,"inV":76,"properties":{"weight":5}},{"id":5095,"inV":181,"properties":{"weight":2}},{"id":5096,"inV":14,"properties":{"weight":2}},{"id":5097,"inV":122,"properties":{"weight":1}},{"id":5098,"inV":153,"properties":{"weight":3}},{"id":5099,"inV":96,"properties":{"weight":1}},{"id":5100,"inV":82,"properties":{"weight":3}},{"id":5101,"inV":110,"properties":{"weight":1}},{"id":5102,"inV":19,"properties":{"weight":6}},{"id":5103,"inV":129,"properties":{"weight":1}},{"id":5104,"inV":84,"properties":{"weight":1}},{"id":5105,"inV":88,"properties":{"weight":9}},{"id":5106,"inV":97,"properties":{"weight":1}},{"id":5107,"inV":114,"properties":{"weight":2}},{"id":5108,"inV":30,"properties":{"weight":8}},{"id":5109,"inV":31,"properties":{"weight":8}},{"id":5110,"inV":69,"properties":{"weight":4}},{"id":5111,"inV":127,"properties":{"weight":2}},{"id":5112,"inV":60,"properties":{"weight":1}},{"id":5113,"inV":39,"properties":{"weight":2}},{"id":5114,"inV":2
 1,"properties":{"weight":1}},{"id":5115,"inV":117,"properties":{"weight":1}},{"id":5116,"inV":78,"properties":{"weight":1}},{"id":5117,"inV":38,"properties":{"weight":1}},{"id":5118,"inV":169,"properties":{"weight":2}},{"id":5119,"inV":118,"properties":{"weight":1}}],"sungBy":[{"id":7064,"inV":340}],"writtenBy":[{"id":7063,"inV":339}]},"properties":{"name":[{"id":9,"value":"BERTHA"}],"songType":[{"id":11,"value":"original"}],"performances":[{"id":10,"value":394}]}}
+{"id":5,"label":"song","inE":{"followedBy":[{"id":194,"outV":70,"properties":{"weight":8}},{"id":962,"outV":67,"properties":{"weight":5}},{"id":3,"outV":1,"properties":{"weight":1}},{"id":5446,"outV":231,"properties":{"weight":5}},{"id":6344,"outV":21,"properties":{"weight":6}},{"id":1738,"outV":82,"properties":{"weight":1}},{"id":6666,"outV":12,"properties":{"weight":1}},{"id":1867,"outV":94,"properties":{"weight":15}},{"id":4300,"outV":110,"properties":{"weight":1}},{"id":847,"outV":171,"properties":{"weight":1}},{"id":2832,"outV":101,"properties":{"weight":3}},{"id":6032,"outV":115,"properties":{"weight":1}},{"id":1170,"outV":26,"properties":{"weight":1}},{"id":5330,"outV":238,"properties":{"weight":1}},{"id":1491,"outV":164,"properties":{"weight":3}},{"id":1429,"outV":83,"properties":{"weight":3}},{"id":3033,"outV":14,"properties":{"weight":1}},{"id":6298,"outV":49,"properties":{"weight":1}},{"id":1373,"outV":130,"properties":{"weight":11}},{"id":4447,"outV":113,"properties":{"w
 eight":1}},{"id":5151,"outV":125,"properties":{"weight":6}},{"id":5343,"outV":165,"properties":{"weight":2}},{"id":6431,"outV":134,"properties":{"weight":2}},{"id":1953,"outV":148,"properties":{"weight":10}},{"id":1634,"outV":210,"properties":{"weight":1}},{"id":2274,"outV":25,"properties":{"weight":8}},{"id":100,"outV":46,"properties":{"weight":1}},{"id":933,"outV":91,"properties":{"weight":1}},{"id":2021,"outV":149,"properties":{"weight":1}},{"id":6694,"outV":141,"properties":{"weight":2}},{"id":4009,"outV":225,"properties":{"weight":1}},{"id":682,"outV":219,"properties":{"weight":1}},{"id":3694,"outV":3,"properties":{"weight":57}},{"id":4718,"outV":186,"properties":{"weight":6}},{"id":3055,"outV":153,"properties":{"weight":9}},{"id":2480,"outV":68,"properties":{"weight":1}},{"id":2736,"outV":13,"properties":{"weight":3}},{"id":5426,"outV":102,"properties":{"weight":1}},{"id":6899,"outV":147,"properties":{"weight":1}},{"id":5879,"outV":96,"properties":{"weight":22}},{"id":6201,"ou
 tV":319,"properties":{"weight":2}},{"id":5370,"outV":132,"properties":{"weight":2}},{"id":700,"outV":206,"properties":{"weight":1}},{"id":2236,"outV":29,"properties":{"weight":5}},{"id":4604,"outV":85,"properties":{"weight":2}},{"id":5759,"outV":129,"properties":{"weight":6}}]},"outE":{"followedBy":[{"id":273,"inV":3,"properties":{"weight":40}},{"id":274,"inV":26,"properties":{"weight":3}},{"id":275,"inV":114,"properties":{"weight":40}},{"id":276,"inV":1,"properties":{"weight":2}},{"id":277,"inV":74,"properties":{"weight":3}},{"id":278,"inV":122,"properties":{"weight":3}},{"id":279,"inV":133,"properties":{"weight":2}},{"id":280,"inV":83,"properties":{"weight":1}},{"id":281,"inV":153,"properties":{"weight":5}},{"id":282,"inV":159,"properties":{"weight":1}},{"id":283,"inV":13,"properties":{"weight":3}},{"id":284,"inV":25,"properties":{"weight":19}},{"id":285,"inV":96,"properties":{"weight":10}},{"id":286,"inV":160,"properties":{"weight":2}},{"id":287,"inV":32,"properties":{"weight":1}
 },{"id":288,"inV":120,"properties":{"weight":16}},{"id":289,"inV":50,"properties":{"weight":1}},{"id":290,"inV":116,"properties":{"weight":1}},{"id":291,"inV":127,"properties":{"weight":6}},{"id":292,"inV":65,"properties":{"weight":1}},{"id":293,"inV":130,"properties":{"weight":3}},{"id":294,"inV":125,"properties":{"weight":5}},{"id":295,"inV":70,"properties":{"weight":13}},{"id":296,"inV":134,"properties":{"weight":1}},{"id":297,"inV":161,"properties":{"weight":1}},{"id":298,"inV":162,"properties":{"weight":1}},{"id":299,"inV":124,"properties":{"weight":3}},{"id":300,"inV":38,"properties":{"weight":1}},{"id":301,"inV":29,"properties":{"weight":11}},{"id":302,"inV":163,"properties":{"weight":1}},{"id":303,"inV":94,"properties":{"weight":5}},{"id":304,"inV":85,"properties":{"weight":1}},{"id":305,"inV":164,"properties":{"weight":6}},{"id":306,"inV":64,"properties":{"weight":1}},{"id":307,"inV":150,"properties":{"weight":1}},{"id":308,"inV":165,"properties":{"weight":7}},{"id":309,"in
 V":92,"properties":{"weight":1}},{"id":310,"inV":140,"properties":{"weight":1}},{"id":311,"inV":166,"properties":{"weight":1}}],"sungBy":[{"id":7582,"inV":340}],"writtenBy":[{"id":7581,"inV":446}]},"properties":{"name":[{"id":12,"value":"GOING DOWN THE ROAD FEELING BAD"}],"songType":[{"id":14,"value":"cover"}],"performances":[{"id":13,"value":293}]}}
 {"id":6,"label":"song","inE":{"followedBy":[{"id":4,"outV":1,"properties":{"weight":1}},{"id":2023,"outV":282,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":2406,"inV":293,"properties":{"weight":1}},{"id":2407,"inV":96,"properties":{"weight":1}}],"sungBy":[{"id":7782,"inV":351}],"writtenBy":[{"id":7781,"inV":527}]},"properties":{"name":[{"id":15,"value":"MONA"}],"songType":[{"id":17,"value":"cover"}],"performances":[{"id":16,"value":1}]}}
 {"id":7,"label":"song","inE":{"followedBy":[{"id":2607,"outV":295,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":5,"inV":8,"properties":{"weight":1}}]},"properties":{"name":[{"id":18,"value":"WHERE HAVE THE HEROES GONE"}],"songType":[{"id":20,"value":""}],"performances":[{"id":19,"value":0}]}}
 {"id":8,"label":"song","inE":{"followedBy":[{"id":4705,"outV":111,"properties":{"weight":1}},{"id":5,"outV":7,"properties":{"weight":1}},{"id":5901,"outV":96,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":2976,"inV":302,"properties":{"weight":1}},{"id":2977,"inV":96,"properties":{"weight":1}},{"id":2978,"inV":72,"properties":{"weight":1}}],"sungBy":[{"id":7814,"inV":351}],"writtenBy":[{"id":7813,"inV":674}]},"properties":{"name":[{"id":21,"value":"OH BOY"}],"songType":[{"id":23,"value":"cover"}],"performances":[{"id":22,"value":2}]}}
-{"id":9,"label":"song","inE":{"followedBy":[{"id":3776,"outV":3,"properties":{"weight":1}},{"id":65,"outV":46,"properties":{"weight":2}},{"id":1923,"outV":103,"properties":{"weight":3}},{"id":5956,"outV":50,"properties":{"weight":2}},{"id":3077,"outV":153,"properties":{"weight":2}},{"id":5832,"outV":76,"properties":{"weight":1}},{"id":1161,"outV":26,"properties":{"weight":8}},{"id":6667,"outV":12,"properties":{"weight":2}},{"id":2699,"outV":13,"properties":{"weight":3}},{"id":6539,"outV":55,"properties":{"weight":1}},{"id":2578,"outV":57,"properties":{"weight":2}},{"id":787,"outV":122,"properties":{"weight":3}},{"id":3542,"outV":201,"properties":{"weight":1}},{"id":2775,"outV":15,"properties":{"weight":5}},{"id":2840,"outV":101,"properties":{"weight":2}},{"id":4953,"outV":86,"properties":{"weight":2}},{"id":1572,"outV":18,"properties":{"weight":3}},{"id":229,"outV":70,"properties":{"weight":1}},{"id":4264,"outV":10,"properties":{"weight":1}},{"id":4969,"outV":236,"properties":{"weig
 ht":3}},{"id":3498,"outV":58,"properties":{"weight":2}},{"id":5226,"outV":216,"properties":{"weight":1}},{"id":5548,"outV":166,"properties":{"weight":1}},{"id":2990,"outV":14,"properties":{"weight":4}},{"id":3950,"outV":138,"properties":{"weight":1}},{"id":6776,"outV":39,"properties":{"weight":1}},{"id":2488,"outV":68,"properties":{"weight":1}},{"id":3641,"outV":24,"properties":{"weight":2}},{"id":1532,"outV":164,"properties":{"weight":2}},{"id":1853,"outV":94,"properties":{"weight":1}},{"id":638,"outV":23,"properties":{"weight":2}},{"id":6335,"outV":21,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":6,"inV":10,"properties":{"weight":3}},{"id":7,"inV":11,"properties":{"weight":2}},{"id":8,"inV":12,"properties":{"weight":3}},{"id":9,"inV":13,"properties":{"weight":6}},{"id":10,"inV":14,"properties":{"weight":3}},{"id":11,"inV":15,"properties":{"weight":3}},{"id":12,"inV":16,"properties":{"weight":1}},{"id":13,"inV":17,"properties":{"weight":1}},{"id":14,"inV":18,"properties"
 :{"weight":5}},{"id":15,"inV":19,"properties":{"weight":1}},{"id":16,"inV":20,"properties":{"weight":1}},{"id":17,"inV":21,"properties":{"weight":1}},{"id":18,"inV":22,"properties":{"weight":2}},{"id":19,"inV":23,"properties":{"weight":2}},{"id":20,"inV":24,"properties":{"weight":1}},{"id":21,"inV":25,"properties":{"weight":1}},{"id":22,"inV":26,"properties":{"weight":1}},{"id":23,"inV":27,"properties":{"weight":1}},{"id":24,"inV":28,"properties":{"weight":2}},{"id":25,"inV":29,"properties":{"weight":1}},{"id":26,"inV":30,"properties":{"weight":5}},{"id":27,"inV":31,"properties":{"weight":2}},{"id":28,"inV":32,"properties":{"weight":1}},{"id":29,"inV":33,"properties":{"weight":2}},{"id":30,"inV":34,"properties":{"weight":2}},{"id":31,"inV":35,"properties":{"weight":3}},{"id":32,"inV":36,"properties":{"weight":2}},{"id":33,"inV":37,"properties":{"weight":3}},{"id":34,"inV":38,"properties":{"weight":1}},{"id":35,"inV":39,"properties":{"weight":1}},{"id":36,"inV":40,"properties":{"weig
 ht":1}},{"id":37,"inV":41,"properties":{"weight":1}},{"id":38,"inV":42,"properties":{"weight":1}},{"id":39,"inV":43,"properties":{"weight":1}}],"sungBy":[{"id":7190,"inV":340}],"writtenBy":[{"id":7189,"inV":339}]},"properties":{"name":[{"id":24,"value":"HERE COMES SUNSHINE"}],"songType":[{"id":26,"value":"original"}],"performances":[{"id":25,"value":65}]}}
-{"id":10,"label":"song","inE":{"followedBy":[{"id":3841,"outV":60,"properties":{"weight":1}},{"id":1027,"outV":73,"properties":{"weight":5}},{"id":6,"outV":9,"properties":{"weight":3}},{"id":4103,"outV":48,"properties":{"weight":5}},{"id":6279,"outV":49,"properties":{"weight":1}},{"id":3335,"outV":155,"properties":{"weight":1}},{"id":4233,"outV":52,"properties":{"weight":1}},{"id":4878,"outV":100,"properties":{"weight":19}},{"id":5264,"outV":32,"properties":{"weight":2}},{"id":2196,"outV":75,"properties":{"weight":4}},{"id":151,"outV":108,"properties":{"weight":3}},{"id":1571,"outV":18,"properties":{"weight":5}},{"id":3619,"outV":24,"properties":{"weight":2}},{"id":3237,"outV":63,"properties":{"weight":3}},{"id":4647,"outV":154,"properties":{"weight":1}},{"id":4521,"outV":105,"properties":{"weight":3}},{"id":1195,"outV":26,"properties":{"weight":1}},{"id":6956,"outV":84,"properties":{"weight":1}},{"id":6444,"outV":187,"properties":{"weight":9}},{"id":687,"outV":157,"properties":{"we
 ight":1}},{"id":4784,"outV":114,"properties":{"weight":1}},{"id":6064,"outV":115,"properties":{"weight":1}},{"id":3890,"outV":51,"properties":{"weight":9}},{"id":1714,"outV":82,"properties":{"weight":3}},{"id":55,"outV":46,"properties":{"weight":1}},{"id":5175,"outV":71,"properties":{"weight":1}},{"id":1337,"outV":31,"properties":{"weight":1}},{"id":4155,"outV":54,"properties":{"weight":6}},{"id":1083,"outV":59,"properties":{"weight":10}},{"id":6077,"outV":72,"properties":{"weight":5}},{"id":5441,"outV":239,"properties":{"weight":1}},{"id":1987,"outV":152,"properties":{"weight":2}},{"id":2116,"outV":17,"properties":{"weight":7}},{"id":1860,"outV":94,"properties":{"weight":1}},{"id":3269,"outV":160,"properties":{"weight":2}},{"id":454,"outV":38,"properties":{"weight":1}},{"id":3142,"outV":104,"properties":{"weight":4}},{"id":2505,"outV":57,"properties":{"weight":12}},{"id":6859,"outV":64,"properties":{"weight":1}},{"id":6603,"outV":127,"properties":{"weight":4}},{"id":717,"outV":80,"
 properties":{"weight":9}},{"id":1360,"outV":130,"properties":{"weight":2}},{"id":3026,"outV":14,"properties":{"weight":1}},{"id":5972,"outV":50,"properties":{"weight":1}},{"id":5077,"outV":4,"properties":{"weight":4}},{"id":2392,"outV":87,"properties":{"weight":1}},{"id":1250,"outV":27,"properties":{"weight":10}},{"id":4706,"outV":111,"properties":{"weight":3}},{"id":6755,"outV":53,"properties":{"weight":1}},{"id":2917,"outV":78,"properties":{"weight":10}},{"id":485,"outV":98,"properties":{"weight":4}},{"id":3559,"outV":56,"properties":{"weight":16}},{"id":3436,"outV":58,"properties":{"weight":10}},{"id":3820,"outV":88,"properties":{"weight":1}},{"id":4463,"outV":202,"properties":{"weight":4}},{"id":6256,"outV":117,"properties":{"weight":1}},{"id":880,"outV":189,"properties":{"weight":1}},{"id":3698,"outV":3,"properties":{"weight":1}},{"id":2291,"outV":25,"properties":{"weight":1}},{"id":2035,"outV":180,"properties":{"weight":1}},{"id":3317,"outV":252,"properties":{"weight":1}},{"id
 ":2806,"outV":15,"properties":{"weight":2}},{"id":2427,"outV":68,"properties":{"weight":2}},{"id":6782,"outV":39,"properties":{"weight":4}},{"id":4351,"outV":62,"properties":{"weight":2}}]},"outE":{"followedBy":[{"id":4235,"inV":56,"properties":{"weight":13}},{"id":4236,"inV":27,"properties":{"weight":7}},{"id":4237,"inV":58,"properties":{"weight":11}},{"id":4238,"inV":80,"properties":{"weight":6}},{"id":4239,"inV":59,"properties":{"weight":9}},{"id":4240,"inV":100,"properties":{"weight":21}},{"id":4241,"inV":104,"properties":{"weight":5}},{"id":4242,"inV":50,"properties":{"weight":2}},{"id":4243,"inV":48,"properties":{"weight":8}},{"id":4244,"inV":54,"properties":{"weight":13}},{"id":4245,"inV":19,"properties":{"weight":9}},{"id":4246,"inV":72,"properties":{"weight":4}},{"id":4247,"inV":14,"properties":{"weight":1}},{"id":4248,"inV":122,"properties":{"weight":2}},{"id":4249,"inV":235,"properties":{"weight":1}},{"id":4250,"inV":218,"properties":{"weight":1}},{"id":4251,"inV":252,"pr
 operties":{"weight":1}},{"id":4252,"inV":89,"properties":{"weight":3}},{"id":4253,"inV":57,"properties":{"weight":12}},{"id":4254,"inV":49,"properties":{"weight":3}},{"id":4255,"inV":94,"properties":{"weight":3}},{"id":4256,"inV":153,"properties":{"weight":1}},{"id":4257,"inV":13,"properties":{"weight":1}},{"id":4258,"inV":160,"properties":{"weight":1}},{"id":4259,"inV":51,"properties":{"weight":10}},{"id":4260,"inV":18,"properties":{"weight":3}},{"id":4261,"inV":202,"properties":{"weight":4}},{"id":4262,"inV":17,"properties":{"weight":5}},{"id":4263,"inV":46,"properties":{"weight":1}},{"id":4264,"inV":9,"properties":{"weight":1}},{"id":4265,"inV":55,"properties":{"weight":1}},{"id":4266,"inV":125,"properties":{"weight":1}},{"id":4267,"inV":69,"properties":{"weight":2}},{"id":4268,"inV":98,"properties":{"weight":8}},{"id":4269,"inV":82,"properties":{"weight":4}},{"id":4270,"inV":154,"properties":{"weight":1}},{"id":4271,"inV":105,"properties":{"weight":7}},{"id":4272,"inV":112,"prop
 erties":{"weight":2}},{"id":4273,"inV":109,"properties":{"weight":1}},{"id":4274,"inV":42,"properties":{"weight":2}},{"id":4275,"inV":121,"properties":{"weight":1}},{"id":4276,"inV":73,"properties":{"weight":5}},{"id":4277,"inV":106,"properties":{"weight":1}},{"id":4278,"inV":116,"properties":{"weight":1}},{"id":4279,"inV":68,"properties":{"weight":2}},{"id":4280,"inV":152,"properties":{"weight":1}},{"id":4281,"inV":23,"properties":{"weight":6}},{"id":4282,"inV":88,"properties":{"weight":1}},{"id":4283,"inV":39,"properties":{"weight":4}},{"id":4284,"inV":12,"properties":{"weight":1}},{"id":4285,"inV":111,"properties":{"weight":1}},{"id":4286,"inV":99,"properties":{"weight":1}},{"id":4287,"inV":87,"properties":{"weight":2}},{"id":4288,"inV":108,"properties":{"weight":2}},{"id":4289,"inV":53,"properties":{"weight":4}},{"id":4290,"inV":26,"properties":{"weight":5}},{"id":4291,"inV":117,"properties":{"weight":2}},{"id":4292,"inV":115,"properties":{"weight":2}},{"id":4293,"inV":63,"prope
 rties":{"weight":3}},{"id":4294,"inV":103,"properties":{"weight":1}}],"sungBy":[{"id":7460,"inV":351}],"writtenBy":[{"id":7459,"inV":471}]},"properties":{"name":[{"id":27,"value":"BEAT IT ON DOWN THE LINE"}],"songType":[{"id":29,"value":"cover"}],"performances":[{"id":28,"value":325}]}}
-{"id":11,"label":"song","inE":{"followedBy":[{"id":1088,"outV":59,"properties":{"weight":14}},{"id":6273,"outV":49,"properties":{"weight":2}},{"id":1989,"outV":152,"properties":{"weight":2}},{"id":7,"outV":9,"properties":{"weight":2}},{"id":4552,"outV":105,"properties":{"weight":3}},{"id":521,"outV":205,"properties":{"weight":1}},{"id":714,"outV":80,"properties":{"weight":5}},{"id":3146,"outV":104,"properties":{"weight":3}},{"id":4876,"outV":100,"properties":{"weight":2}},{"id":2190,"outV":235,"properties":{"weight":1}},{"id":4496,"outV":202,"properties":{"weight":1}},{"id":2513,"outV":57,"properties":{"weight":4}},{"id":4053,"outV":173,"properties":{"weight":1}},{"id":5078,"outV":4,"properties":{"weight":3}},{"id":1309,"outV":27,"properties":{"weight":5}},{"id":5025,"outV":30,"properties":{"weight":1}},{"id":4769,"outV":114,"properties":{"weight":1}},{"id":3554,"outV":56,"properties":{"weight":7}},{"id":1064,"outV":73,"properties":{"weight":1}},{"id":2920,"outV":78,"properties":{"w
 eight":2}},{"id":6056,"outV":115,"properties":{"weight":2}},{"id":41,"outV":46,"properties":{"weight":2}},{"id":3434,"outV":58,"properties":{"weight":5}},{"id":6442,"outV":187,"properties":{"weight":7}},{"id":1775,"outV":234,"properties":{"weight":4}},{"id":3888,"outV":51,"properties":{"weight":1}},{"id":626,"outV":23,"properties":{"weight":1}},{"id":6772,"outV":39,"properties":{"weight":1}},{"id":1396,"outV":190,"properties":{"weight":1}},{"id":4020,"outV":191,"properties":{"weight":1}},{"id":3637,"outV":24,"properties":{"weight":2}},{"id":6072,"outV":72,"properties":{"weight":5}},{"id":4157,"outV":54,"properties":{"weight":2}}]},"outE":{"followedBy":[{"id":972,"inV":57,"properties":{"weight":4}},{"id":973,"inV":59,"properties":{"weight":3}},{"id":974,"inV":53,"properties":{"weight":4}},{"id":975,"inV":54,"properties":{"weight":15}},{"id":976,"inV":56,"properties":{"weight":3}},{"id":977,"inV":48,"properties":{"weight":3}},{"id":978,"inV":72,"properties":{"weight":4}},{"id":979,"in
 V":19,"properties":{"weight":9}},{"id":980,"inV":4,"properties":{"weight":3}},{"id":981,"inV":58,"properties":{"weight":6}},{"id":982,"inV":46,"properties":{"weight":1}},{"id":983,"inV":234,"properties":{"weight":7}},{"id":984,"inV":235,"properties":{"weight":2}},{"id":985,"inV":207,"properties":{"weight":4}},{"id":986,"inV":39,"properties":{"weight":3}},{"id":987,"inV":50,"properties":{"weight":1}},{"id":988,"inV":104,"properties":{"weight":2}},{"id":989,"inV":49,"properties":{"weight":1}},{"id":990,"inV":17,"properties":{"weight":3}},{"id":991,"inV":100,"properties":{"weight":1}},{"id":992,"inV":24,"properties":{"weight":1}},{"id":993,"inV":170,"properties":{"weight":2}},{"id":994,"inV":73,"properties":{"weight":1}},{"id":995,"inV":173,"properties":{"weight":1}},{"id":996,"inV":236,"properties":{"weight":1}},{"id":997,"inV":202,"properties":{"weight":3}},{"id":998,"inV":80,"properties":{"weight":2}},{"id":999,"inV":115,"properties":{"weight":4}},{"id":1000,"inV":105,"properties":{
 "weight":1}}],"sungBy":[{"id":7072,"inV":351}],"writtenBy":[{"id":7071,"inV":350}]},"properties":{"name":[{"id":30,"value":"BLACK THROATED WIND"}],"songType":[{"id":32,"value":"original"}],"performances":[{"id":31,"value":158}]}}
-{"id":12,"label":"song","inE":{"followedBy":[{"id":3072,"outV":153,"properties":{"weight":4}},{"id":2433,"outV":68,"properties":{"weight":1}},{"id":1410,"outV":83,"properties":{"weight":1}},{"id":4227,"outV":52,"properties":{"weight":3}},{"id":3331,"outV":155,"properties":{"weight":2}},{"id":1028,"outV":73,"properties":{"weight":12}},{"id":4102,"outV":48,"properties":{"weight":33}},{"id":8,"outV":9,"properties":{"weight":3}},{"id":6281,"outV":49,"properties":{"weight":2}},{"id":652,"outV":23,"properties":{"weight":2}},{"id":5388,"outV":69,"properties":{"weight":1}},{"id":525,"outV":120,"properties":{"weight":1}},{"id":3726,"outV":3,"properties":{"weight":1}},{"id":3855,"outV":60,"properties":{"weight":1}},{"id":783,"outV":122,"properties":{"weight":1}},{"id":3986,"outV":106,"properties":{"weight":1}},{"id":1938,"outV":148,"properties":{"weight":1}},{"id":1172,"outV":26,"properties":{"weight":4}},{"id":916,"outV":91,"properties":{"weight":1}},{"id":6935,"outV":84,"properties":{"weigh
 t":5}},{"id":5017,"outV":30,"properties":{"weight":1}},{"id":3225,"outV":63,"properties":{"weight":4}},{"id":2203,"outV":75,"properties":{"weight":3}},{"id":155,"outV":108,"properties":{"weight":6}},{"id":4893,"outV":100,"properties":{"weight":7}},{"id":4640,"outV":154,"properties":{"weight":10}},{"id":5665,"outV":169,"properties":{"weight":1}},{"id":5286,"outV":32,"properties":{"weight":4}},{"id":2598,"outV":112,"properties":{"weight":7}},{"id":1702,"outV":124,"properties":{"weight":1}},{"id":3879,"outV":51,"properties":{"weight":12}},{"id":4007,"outV":225,"properties":{"weight":1}},{"id":424,"outV":38,"properties":{"weight":5}},{"id":5034,"outV":47,"properties":{"weight":1}},{"id":4522,"outV":105,"properties":{"weight":12}},{"id":4779,"outV":114,"properties":{"weight":3}},{"id":6576,"outV":116,"properties":{"weight":1}},{"id":6835,"outV":64,"properties":{"weight":1}},{"id":6455,"outV":187,"properties":{"weight":12}},{"id":5304,"outV":170,"properties":{"weight":2}},{"id":824,"outV"
 :171,"properties":{"weight":1}},{"id":6074,"outV":72,"properties":{"weight":4}},{"id":1722,"outV":82,"properties":{"weight":1}},{"id":4284,"outV":10,"properties":{"weight":1}},{"id":2109,"outV":17,"properties":{"weight":24}},{"id":703,"outV":206,"properties":{"weight":2}},{"id":5952,"outV":50,"properties":{"weight":7}},{"id":5440,"outV":239,"properties":{"weight":2}},{"id":1858,"outV":94,"properties":{"weight":2}},{"id":1347,"outV":31,"properties":{"weight":1}},{"id":1605,"outV":18,"properties":{"weight":1}},{"id":4165,"outV":54,"properties":{"weight":17}},{"id":3654,"outV":24,"properties":{"weight":3}},{"id":6598,"outV":127,"properties":{"weight":1}},{"id":4038,"outV":173,"properties":{"weight":1}},{"id":3271,"outV":160,"properties":{"weight":1}},{"id":3527,"outV":223,"properties":{"weight":1}},{"id":1096,"outV":59,"properties":{"weight":26}},{"id":3144,"outV":104,"properties":{"weight":24}},{"id":1993,"outV":152,"properties":{"weight":2}},{"id":6985,"outV":175,"properties":{"weigh
 t":1}},{"id":6730,"outV":53,"properties":{"weight":4}},{"id":3019,"outV":14,"properties":{"weight":1}},{"id":3788,"outV":168,"properties":{"weight":1}},{"id":5072,"outV":4,"properties":{"weight":26}},{"id":2515,"outV":57,"properties":{"weight":3}},{"id":1365,"outV":130,"properties":{"weight":2}},{"id":2647,"outV":137,"properties":{"weight":1}},{"id":730,"outV":80,"properties":{"weight":12}},{"id":2780,"outV":15,"properties":{"weight":3}},{"id":3810,"outV":88,"properties":{"weight":6}},{"id":482,"outV":98,"properties":{"weight":8}},{"id":7013,"outV":89,"properties":{"weight":1}},{"id":4072,"outV":109,"properties":{"weight":1}},{"id":2281,"outV":25,"properties":{"weight":2}},{"id":2668,"outV":13,"properties":{"weight":3}},{"id":3565,"outV":56,"properties":{"weight":9}},{"id":1262,"outV":27,"properties":{"weight":17}},{"id":2031,"outV":180,"properties":{"weight":1}},{"id":6769,"outV":39,"properties":{"weight":2}},{"id":1779,"outV":234,"properties":{"weight":1}},{"id":4468,"outV":202,"p
 roperties":{"weight":4}},{"id":1909,"outV":103,"properties":{"weight":1}},{"id":3446,"outV":58,"properties":{"weight":4}},{"id":2934,"outV":78,"properties":{"weight":1}},{"id":381,"outV":74,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":6656,"inV":49,"properties":{"weight":9}},{"id":6657,"inV":19,"properties":{"weight":3}},{"id":6658,"inV":27,"properties":{"weight":9}},{"id":6659,"inV":252,"properties":{"weight":1}},{"id":6660,"inV":206,"properties":{"weight":1}},{"id":6661,"inV":89,"properties":{"weight":4}},{"id":6662,"inV":160,"properties":{"weight":1}},{"id":6663,"inV":15,"properties":{"weight":167}},{"id":6664,"inV":4,"properties":{"weight":3}},{"id":6665,"inV":202,"properties":{"weight":2}},{"id":6666,"inV":5,"properties":{"weight":1}},{"id":6667,"inV":9,"properties":{"weight":2}},{"id":6668,"inV":83,"properties":{"weight":3}},{"id":6669,"inV":3,"properties":{"weight":1}},{"id":6670,"inV":52,"properties":{"weight":1}},{"id":6671,"inV":25,"properties":{"weight":1}},{"
 id":6672,"inV":46,"properties":{"weight":1}},{"id":6673,"inV":123,"properties":{"weight":2}},{"id":6674,"inV":51,"properties":{"weight":4}},{"id":6675,"inV":17,"properties":{"weight":3}},{"id":6676,"inV":56,"properties":{"weight":5}},{"id":6677,"inV":98,"properties":{"weight":5}},{"id":6678,"inV":104,"properties":{"weight":4}},{"id":6679,"inV":69,"properties":{"weight":3}},{"id":6680,"inV":170,"properties":{"weight":2}},{"id":6681,"inV":82,"properties":{"weight":1}},{"id":6682,"inV":80,"properties":{"weight":2}},{"id":6683,"inV":215,"properties":{"weight":1}},{"id":6684,"inV":48,"properties":{"weight":1}},{"id":6685,"inV":14,"properties":{"weight":3}},{"id":6686,"inV":50,"properties":{"weight":2}},{"id":6687,"inV":24,"properties":{"weight":83}},{"id":6688,"inV":18,"properties":{"weight":1}},{"id":6689,"inV":39,"properties":{"weight":6}},{"id":6690,"inV":105,"properties":{"weight":1}},{"id":6691,"inV":131,"properties":{"weight":14}},{"id":6645,"inV":72,"properties":{"weight":7}},{"id
 ":6646,"inV":58,"properties":{"weight":7}},{"id":6647,"inV":57,"properties":{"weight":6}},{"id":6648,"inV":54,"properties":{"weight":8}},{"id":6649,"inV":59,"properties":{"weight":14}},{"id":6650,"inV":100,"properties":{"weight":7}},{"id":6651,"inV":53,"properties":{"weight":4}},{"id":6652,"inV":148,"properties":{"weight":1}},{"id":6653,"inV":218,"properties":{"weight":2}},{"id":6654,"inV":235,"properties":{"weight":2}},{"id":6655,"inV":130,"properties":{"weight":1}}],"sungBy":[{"id":7776,"inV":351}],"writtenBy":[{"id":7775,"inV":659}]},"properties":{"name":[{"id":33,"value":"ME AND MY UNCLE"}],"songType":[{"id":35,"value":"cover"}],"performances":[{"id":34,"value":616}]}}
-{"id":13,"label":"song","inE":{"followedBy":[{"id":4865,"outV":35,"properties":{"weight":4}},{"id":1026,"outV":73,"properties":{"weight":1}},{"id":3330,"outV":155,"properties":{"weight":2}},{"id":5636,"outV":22,"properties":{"weight":1}},{"id":775,"outV":122,"properties":{"weight":1}},{"id":6407,"outV":134,"properties":{"weight":24}},{"id":1799,"outV":196,"properties":{"weight":2}},{"id":9,"outV":9,"properties":{"weight":6}},{"id":4874,"outV":100,"properties":{"weight":6}},{"id":4108,"outV":48,"properties":{"weight":3}},{"id":5132,"outV":222,"properties":{"weight":1}},{"id":2830,"outV":101,"properties":{"weight":8}},{"id":3857,"outV":60,"properties":{"weight":35}},{"id":6931,"outV":84,"properties":{"weight":7}},{"id":6165,"outV":36,"properties":{"weight":1}},{"id":533,"outV":120,"properties":{"weight":1}},{"id":5142,"outV":125,"properties":{"weight":11}},{"id":4630,"outV":154,"properties":{"weight":8}},{"id":283,"outV":5,"properties":{"weight":3}},{"id":1567,"outV":18,"properties":{
 "weight":3}},{"id":1823,"outV":41,"properties":{"weight":4}},{"id":3359,"outV":184,"properties":{"weight":3}},{"id":3617,"outV":24,"properties":{"weight":1}},{"id":3108,"outV":153,"properties":{"weight":1}},{"id":3878,"outV":51,"properties":{"weight":6}},{"id":2347,"outV":87,"properties":{"weight":8}},{"id":6443,"outV":187,"properties":{"weight":47}},{"id":6700,"outV":141,"properties":{"weight":4}},{"id":5682,"outV":167,"properties":{"weight":1}},{"id":53,"outV":46,"properties":{"weight":4}},{"id":5943,"outV":50,"properties":{"weight":1}},{"id":823,"outV":171,"properties":{"weight":24}},{"id":4151,"outV":218,"properties":{"weight":2}},{"id":2617,"outV":158,"properties":{"weight":1}},{"id":3386,"outV":177,"properties":{"weight":2}},{"id":4411,"outV":327,"properties":{"weight":1}},{"id":1852,"outV":94,"properties":{"weight":4}},{"id":6206,"outV":319,"properties":{"weight":1}},{"id":2111,"outV":17,"properties":{"weight":4}},{"id":4159,"outV":54,"properties":{"weight":16}},{"id":1087,"o
 utV":59,"properties":{"weight":5}},{"id":6723,"outV":53,"properties":{"weight":6}},{"id":6984,"outV":175,"properties":{"weight":1}},{"id":3145,"outV":104,"properties":{"weight":4}},{"id":4947,"outV":86,"properties":{"weight":1}},{"id":5203,"outV":99,"properties":{"weight":2}},{"id":1366,"outV":130,"properties":{"weight":12}},{"id":1622,"outV":210,"properties":{"weight":1}},{"id":2908,"outV":118,"properties":{"weight":1}},{"id":1885,"outV":103,"properties":{"weight":3}},{"id":4959,"outV":207,"properties":{"weight":6}},{"id":6763,"outV":39,"properties":{"weight":8}},{"id":3435,"outV":58,"properties":{"weight":8}},{"id":5741,"outV":129,"properties":{"weight":12}},{"id":366,"outV":74,"properties":{"weight":38}},{"id":2926,"outV":78,"properties":{"weight":3}},{"id":623,"outV":23,"properties":{"weight":1}},{"id":4721,"outV":186,"properties":{"weight":4}},{"id":2165,"outV":151,"properties":{"weight":1}},{"id":886,"outV":140,"properties":{"weight":1}},{"id":3703,"outV":3,"properties":{"weig
 ht":5}},{"id":7031,"outV":89,"properties":{"weight":4}},{"id":1411,"outV":83,"properties":{"weight":7}},{"id":6278,"outV":49,"properties":{"weight":1}},{"id":3974,"outV":106,"properties":{"weight":2}},{"id":912,"outV":91,"properties":{"weight":59}},{"id":2192,"outV":235,"properties":{"weight":1}},{"id":4759,"outV":37,"properties":{"weight":2}},{"id":1179,"outV":26,"properties":{"weight":2}},{"id":5789,"outV":76,"properties":{"weight":3}},{"id":4257,"outV":10,"properties":{"weight":1}},{"id":6561,"outV":172,"properties":{"weight":1}},{"id":4771,"outV":114,"properties":{"weight":3}},{"id":1454,"outV":81,"properties":{"weight":10}},{"id":6073,"outV":72,"properties":{"weight":13}},{"id":5306,"outV":170,"properties":{"weight":4}},{"id":4027,"outV":173,"properties":{"weight":3}},{"id":1725,"outV":82,"properties":{"weight":3}},{"id":960,"outV":67,"properties":{"weight":2}},{"id":1985,"outV":152,"properties":{"weight":1}},{"id":6594,"outV":127,"properties":{"weight":6}},{"id":6342,"outV":21
 ,"properties":{"weight":4}},{"id":455,"outV":139,"properties":{"weight":1}},{"id":3277,"outV":160,"properties":{"weight":3}},{"id":5837,"outV":258,"properties":{"weight":1}},{"id":2256,"outV":29,"properties":{"weight":1}},{"id":208,"outV":70,"properties":{"weight":2}},{"id":721,"outV":80,"properties":{"weight":1}},{"id":2771,"outV":15,"properties":{"weight":3}},{"id":5076,"outV":4,"properties":{"weight":12}},{"id":2519,"outV":57,"properties":{"weight":10}},{"id":4312,"outV":110,"properties":{"weight":1}},{"id":2268,"outV":25,"properties":{"weight":8}},{"id":2014,"outV":149,"properties":{"weight":1}},{"id":3552,"outV":56,"properties":{"weight":8}},{"id":481,"outV":98,"properties":{"weight":3}},{"id":1764,"outV":28,"properties":{"weight":3}},{"id":1258,"outV":27,"properties":{"weight":3}},{"id":4846,"outV":119,"properties":{"weight":1}},{"id":1518,"outV":164,"properties":{"weight":1}},{"id":4593,"outV":85,"properties":{"weight":2}},{"id":244,"outV":150,"properties":{"weight":3}},{"id"
 :1780,"outV":234,"properties":{"weight":2}},{"id":4344,"outV":62,"properties":{"weight":12}},{"id":2044,"outV":92,"properties":{"weight":2}},{"id":5374,"outV":69,"properties":{"weight":34}},{"id":5886,"outV":96,"properties":{"weight":15}}]},"outE":{"followedBy":[{"id":2688,"inV":94,"properties":{"weight":4}},{"id":2689,"inV":130,"properties":{"weight":11}},{"id":2690,"inV":83,"properties":{"weight":13}},{"id":2691,"inV":170,"properties":{"weight":1}},{"id":2692,"inV":51,"properties":{"weight":3}},{"id":2693,"inV":22,"properties":{"weight":2}},{"id":2694,"inV":296,"properties":{"weight":1}},{"id":2695,"inV":52,"properties":{"weight":1}},{"id":2696,"inV":17,"properties":{"weight":2}},{"id":2697,"inV":202,"properties":{"weight":3}},{"id":2698,"inV":27,"properties":{"weight":2}},{"id":2699,"inV":9,"properties":{"weight":3}},{"id":2700,"inV":25,"properties":{"weight":12}},{"id":2701,"inV":195,"properties":{"weight":2}},{"id":2702,"inV":206,"properties":{"weight":1}},{"id":2703,"inV":39,"
 properties":{"weight":1}},{"id":2704,"inV":69,"properties":{"weight":6}},{"id":2705,"inV":24,"properties":{"weight":1}},{"id":2706,"inV":82,"properties":{"weight":3}},{"id":2707,"inV":57,"properties":{"weight":1}},{"id":2708,"inV":134,"properties":{"weight":9}},{"id":2709,"inV":110,"properties":{"weight":1}},{"id":2710,"inV":99,"properties":{"weight":3}},{"id":2711,"inV":76,"properties":{"weight":4}},{"id":2712,"inV":3,"properties":{"weight":3}},{"id":2713,"inV":178,"properties":{"weight":1}},{"id":2714,"inV":184,"properties":{"weight":1}},{"id":2715,"inV":60,"properties":{"weight":21}},{"id":2716,"inV":148,"properties":{"weight":1}},{"id":2717,"inV":32,"properties":{"weight":1}},{"id":2718,"inV":91,"properties":{"weight":42}},{"id":2719,"inV":103,"properties":{"weight":1}},{"id":2720,"inV":114,"properties":{"weight":4}},{"id":2721,"inV":141,"properties":{"weight":4}},{"id":2722,"inV":154,"properties":{"weight":3}},{"id":2723,"inV":109,"properties":{"weight":2}},{"id":2724,"inV":125
 ,"properties":{"weight":9}},{"id":2725,"inV":85,"properties":{"weight":2}},{"id":2726,"inV":84,"properties":{"weight":5}},{"id":2727,"inV":50,"properties":{"weight":1}},{"id":2728,"inV":214,"properties":{"weight":1}},{"id":2729,"inV":72,"properties":{"weight":1}},{"id":2730,"inV":246,"properties":{"weight":1}},{"id":2731,"inV":129,"properties":{"weight":29}},{"id":2732,"inV":65,"properties":{"weight":2}},{"id":2733,"inV":133,"properties":{"weight":1}},{"id":2734,"inV":62,"properties":{"weight":1}},{"id":2735,"inV":29,"properties":{"weight":4}},{"id":2736,"inV":5,"properties":{"weight":3}},{"id":2737,"inV":183,"properties":{"weight":3}},{"id":2738,"inV":210,"properties":{"weight":1}},{"id":2739,"inV":128,"properties":{"weight":1}},{"id":2740,"inV":67,"properties":{"weight":1}},{"id":2741,"inV":212,"properties":{"weight":1}},{"id":2742,"inV":70,"properties":{"weight":2}},{"id":2743,"inV":75,"properties":{"weight":1}},{"id":2744,"inV":71,"properties":{"weight":1}},{"id":2745,"inV":168,
 "properties":{"weight":2}},{"id":2746,"inV":157,"properties":{"weight":1}},{"id":2747,"inV":92,"properties":{"weight":1}},{"id":2748,"inV":89,"properties":{"weight":5}},{"id":2749,"inV":81,"properties":{"weight":1}},{"id":2750,"inV":187,"properties":{"weight":1}},{"id":2751,"inV":164,"properties":{"weight":1}},{"id":2752,"inV":136,"properties":{"weight":1}},{"id":2753,"inV":46,"properties":{"weight":1}},{"id":2660,"inV":207,"properties":{"weight":3}},{"id":2661,"inV":122,"properties":{"weight":17}},{"id":2662,"inV":96,"properties":{"weight":157}},{"id":2663,"inV":104,"properties":{"weight":1}},{"id":2664,"inV":26,"properties":{"weight":14}},{"id":2665,"inV":123,"properties":{"weight":3}},{"id":2666,"inV":19,"properties":{"weight":12}},{"id":2667,"inV":100,"properties":{"weight":5}},{"id":2668,"inV":12,"properties":{"weight":3}},{"id":2669,"inV":49,"properties":{"weight":12}},{"id":2670,"inV":21,"properties":{"weight":4}},{"id":2671,"inV":120,"properties":{"weight":9}},{"id":2672,"in
 V":23,"properties":{"weight":5}},{"id":2673,"inV":59,"properties":{"weight":6}},{"id":2674,"inV":54,"properties":{"weight":5}},{"id":2675,"inV":80,"properties":{"weight":1}},{"id":2676,"inV":234,"properties":{"weight":1}},{"id":2677,"inV":53,"properties":{"weight":2}},{"id":2678,"inV":225,"properties":{"weight":1}},{"id":2679,"inV":235,"properties":{"weight":2}},{"id":2680,"inV":160,"properties":{"weight":3}},{"id":2681,"inV":56,"properties":{"weight":3}},{"id":2682,"inV":127,"properties":{"weight":6}},{"id":2683,"inV":18,"properties":{"weight":3}},{"id":2684,"inV":4,"properties":{"weight":9}},{"id":2685,"inV":15,"properties":{"weight":7}},{"id":2686,"inV":74,"properties":{"weight":86}},{"id":2687,"inV":153,"properties":{"weight":12}}],"sungBy":[{"id":7292,"inV":359}],"writtenBy":[{"id":7291,"inV":339}]},"properties":{"name":[{"id":36,"value":"PLAYING IN THE BAND"}],"songType":[{"id":38,"value":"original"}],"performances":[{"id":37,"value":582}]}}
-{"id":14,"label":"song","inE":{"followedBy":[{"id":6784,"outV":39,"properties":{"weight":10}},{"id":5251,"outV":32,"properties":{"weight":1}},{"id":4229,"outV":52,"properties":{"weight":3}},{"id":4745,"outV":294,"properties":{"weight":4}},{"id":10,"outV":9,"properties":{"weight":3}},{"id":6283,"outV":49,"properties":{"weight":2}},{"id":4364,"outV":62,"properties":{"weight":16}},{"id":4109,"outV":48,"properties":{"weight":10}},{"id":6544,"outV":55,"properties":{"weight":1}},{"id":4881,"outV":100,"properties":{"weight":20}},{"id":6034,"outV":115,"properties":{"weight":1}},{"id":3219,"outV":63,"properties":{"weight":2}},{"id":531,"outV":120,"properties":{"weight":1}},{"id":4758,"outV":37,"properties":{"weight":2}},{"id":4247,"outV":10,"properties":{"weight":1}},{"id":4631,"outV":154,"properties":{"weight":6}},{"id":3866,"outV":60,"properties":{"weight":2}},{"id":1947,"outV":148,"properties":{"weight":1}},{"id":1436,"outV":83,"properties":{"weight":7}},{"id":2844,"outV":101,"properties"
 :{"weight":1}},{"id":6685,"outV":12,"properties":{"weight":3}},{"id":1183,"outV":26,"properties":{"weight":2}},{"id":160,"outV":108,"properties":{"weight":2}},{"id":4517,"outV":105,"properties":{"weight":6}},{"id":6954,"outV":84,"properties":{"weight":4}},{"id":1451,"outV":81,"properties":{"weight":12}},{"id":1582,"outV":18,"properties":{"weight":4}},{"id":3892,"outV":51,"properties":{"weight":10}},{"id":2107,"outV":17,"properties":{"weight":19}},{"id":5820,"outV":76,"properties":{"weight":1}},{"id":6463,"outV":187,"properties":{"weight":26}},{"id":1090,"outV":59,"properties":{"weight":7}},{"id":6083,"outV":72,"properties":{"weight":9}},{"id":1731,"outV":82,"properties":{"weight":4}},{"id":4037,"outV":173,"properties":{"weight":1}},{"id":2375,"outV":87,"properties":{"weight":8}},{"id":4169,"outV":54,"properties":{"weight":36}},{"id":5578,"outV":42,"properties":{"weight":1}},{"id":5964,"outV":50,"properties":{"weight":2}},{"id":716,"outV":80,"properties":{"weight":10}},{"id":5709,"ou
 tV":20,"properties":{"weight":1}},{"id":845,"outV":171,"properties":{"weight":11}},{"id":5838,"outV":258,"properties":{"weight":1}},{"id":1232,"outV":248,"properties":{"weight":1}},{"id":6993,"outV":175,"properties":{"weight":1}},{"id":3666,"outV":24,"properties":{"weight":2}},{"id":3796,"outV":88,"properties":{"weight":1}},{"id":3156,"outV":104,"properties":{"weight":6}},{"id":6742,"outV":53,"properties":{"weight":15}},{"id":2523,"outV":57,"properties":{"weight":9}},{"id":864,"outV":189,"properties":{"weight":2}},{"id":3556,"outV":56,"properties":{"weight":21}},{"id":102,"outV":46,"properties":{"weight":1}},{"id":5096,"outV":4,"properties":{"weight":2}},{"id":1257,"outV":27,"properties":{"weight":19}},{"id":489,"outV":98,"properties":{"weight":3}},{"id":2030,"outV":180,"properties":{"weight":2}},{"id":2159,"outV":151,"properties":{"weight":1}},{"id":2803,"outV":15,"properties":{"weight":4}},{"id":2935,"outV":78,"properties":{"weight":1}},{"id":2426,"outV":68,"properties":{"weight":
 4}},{"id":3962,"outV":106,"properties":{"weight":2}},{"id":4474,"outV":202,"properties":{"weight":1}},{"id":123,"outV":97,"properties":{"weight":1}},{"id":5628,"outV":22,"properties":{"weight":1}},{"id":4092,"outV":109,"properties":{"weight":1}},{"id":1021,"outV":73,"properties":{"weight":20}},{"id":3455,"outV":58,"properties":{"weight":12}}]},"outE":{"followedBy":[{"id":2981,"inV":50,"properties":{"weight":2}},{"id":2982,"inV":4,"properties":{"weight":3}},{"id":2983,"inV":53,"properties":{"weight":8}},{"id":2984,"inV":57,"properties":{"weight":55}},{"id":2985,"inV":89,"properties":{"weight":2}},{"id":2986,"inV":122,"properties":{"weight":1}},{"id":2987,"inV":153,"properties":{"weight":1}},{"id":2988,"inV":72,"properties":{"weight":26}},{"id":2989,"inV":19,"properties":{"weight":17}},{"id":2990,"inV":9,"properties":{"weight":4}},{"id":2991,"inV":17,"properties":{"weight":13}},{"id":2992,"inV":46,"properties":{"weight":5}},{"id":2993,"inV":51,"properties":{"weight":15}},{"id":2994,"i
 nV":54,"properties":{"weight":28}},{"id":2995,"inV":202,"properties":{"weight":3}},{"id":2996,"inV":27,"properties":{"weight":6}},{"id":2997,"inV":52,"properties":{"weight":3}},{"id":2998,"inV":58,"properties":{"weight":1}},{"id":2999,"inV":56,"properties":{"weight":8}},{"id":3000,"inV":100,"properties":{"weight":12}},{"id":3001,"inV":99,"properties":{"weight":26}},{"id":3002,"inV":98,"properties":{"weight":3}},{"id":3003,"inV":104,"properties":{"weight":2}},{"id":3004,"inV":82,"properties":{"weight":6}},{"id":3005,"inV":215,"properties":{"weight":1}},{"id":3006,"inV":69,"properties":{"weight":2}},{"id":3007,"inV":103,"properties":{"weight":1}},{"id":3008,"inV":83,"properties":{"weight":8}},{"id":3009,"inV":101,"properties":{"weight":1}},{"id":3010,"inV":80,"properties":{"weight":8}},{"id":3011,"inV":121,"properties":{"weight":3}},{"id":3012,"inV":59,"properties":{"weight":1}},{"id":3013,"inV":26,"properties":{"weight":2}},{"id":3014,"inV":32,"properties":{"weight":2}},{"id":3015,"i
 nV":155,"properties":{"weight":1}},{"id":3016,"inV":42,"properties":{"weight":2}},{"id":3017,"inV":18,"properties":{"weight":1}},{"id":3018,"inV":105,"properties":{"weight":11}},{"id":3019,"inV":12,"properties":{"weight":1}},{"id":3020,"inV":49,"properties":{"weight":27}},{"id":3021,"inV":65,"properties":{"weight":2}},{"id":3022,"inV":85,"properties":{"weight":2}},{"id":3023,"inV":73,"properties":{"weight":8}},{"id":3024,"inV":106,"properties":{"weight":3}},{"id":3025,"inV":189,"properties":{"weight":3}},{"id":3026,"inV":10,"properties":{"weight":1}},{"id":3027,"inV":210,"properties":{"weight":3}},{"id":3028,"inV":76,"properties":{"weight":1}},{"id":3029,"inV":87,"properties":{"weight":1}},{"id":3030,"inV":96,"properties":{"weight":1}},{"id":3031,"inV":150,"properties":{"weight":1}},{"id":3032,"inV":66,"properties":{"weight":1}},{"id":3033,"inV":5,"properties":{"weight":1}},{"id":3034,"inV":91,"properties":{"weight":29}},{"id":3035,"inV":60,"properties":{"weight":6}},{"id":3036,"inV
 ":67,"properties":{"weight":1}},{"id":3037,"inV":74,"properties":{"weight":1}},{"id":3038,"inV":21,"properties":{"weight":1}},{"id":3039,"inV":169,"properties":{"weight":1}},{"id":3040,"inV":62,"properties":{"weight":1}},{"id":3041,"inV":39,"properties":{"weight":2}},{"id":3042,"inV":175,"properties":{"weight":1}},{"id":3043,"inV":172,"properties":{"weight":1}},{"id":3044,"inV":28,"properties":{"weight":5}},{"id":3045,"inV":173,"properties":{"weight":1}},{"id":3046,"inV":37,"properties":{"weight":5}},{"id":3047,"inV":35,"properties":{"weight":2}}],"sungBy":[{"id":7232,"inV":351}],"writtenBy":[{"id":7231,"inV":350}]},"properties":{"name":[{"id":39,"value":"LOOKS LIKE RAIN"}],"songType":[{"id":41,"value":"original"}],"performances":[{"id":40,"value":417}]}}
-{"id":15,"label":"song","inE":{"followedBy":[{"id":1152,"outV":26,"properties":{"weight":1}},{"id":769,"outV":122,"properties":{"weight":3}},{"id":5379,"outV":69,"properties":{"weight":4}},{"id":3844,"outV":60,"properties":{"weight":2}},{"id":1414,"outV":83,"properties":{"weight":2}},{"id":6663,"outV":12,"properties":{"weight":167}},{"id":4872,"outV":100,"properties":{"weight":9}},{"id":4105,"outV":48,"properties":{"weight":4}},{"id":11,"outV":9,"properties":{"weight":3}},{"id":4622,"outV":154,"properties":{"weight":1}},{"id":2833,"outV":101,"properties":{"weight":1}},{"id":2195,"outV":235,"properties":{"weight":1}},{"id":5141,"outV":125,"properties":{"weight":2}},{"id":3224,"outV":63,"properties":{"weight":2}},{"id":1945,"outV":148,"properties":{"weight":2}},{"id":5024,"outV":30,"properties":{"weight":2}},{"id":2597,"outV":112,"properties":{"weight":35}},{"id":1062,"outV":73,"properties":{"weight":1}},{"id":5032,"outV":47,"properties":{"weight":1}},{"id":4776,"outV":114,"properties
 ":{"weight":1}},{"id":6698,"outV":141,"properties":{"weight":1}},{"id":3885,"outV":51,"properties":{"weight":14}},{"id":1712,"outV":82,"properties":{"weight":4}},{"id":5301,"outV":170,"properties":{"weight":1}},{"id":1847,"outV":94,"properties":{"weight":6}},{"id":4153,"outV":54,"properties":{"weight":7}},{"id":1339,"outV":31,"properties":{"weight":2}},{"id":6075,"outV":72,"properties":{"weight":4}},{"id":2108,"outV":17,"properties":{"weight":8}},{"id":60,"outV":46,"properties":{"weight":1}},{"id":6460,"outV":187,"properties":{"weight":10}},{"id":3653,"outV":24,"properties":{"weight":14}},{"id":6731,"outV":53,"properties":{"weight":1}},{"id":3147,"outV":104,"properties":{"weight":2}},{"id":1101,"outV":59,"properties":{"weight":2}},{"id":4052,"outV":173,"properties":{"weight":1}},{"id":2518,"outV":57,"properties":{"weight":5}},{"id":476,"outV":98,"properties":{"weight":3}},{"id":1372,"outV":130,"properties":{"weight":1}},{"id":5085,"outV":4,"properties":{"weight":1}},{"id":1245,"outV
 ":27,"properties":{"weight":5}},{"id":2272,"outV":25,"properties":{"weight":4}},{"id":4577,"outV":254,"properties":{"weight":1}},{"id":5735,"outV":129,"properties":{"weight":2}},{"id":3432,"outV":58,"properties":{"weight":7}},{"id":3562,"outV":56,"properties":{"weight":6}},{"id":746,"outV":80,"properties":{"weight":1}},{"id":2411,"outV":68,"properties":{"weight":1}},{"id":2924,"outV":78,"properties":{"weight":3}},{"id":4467,"outV":202,"properties":{"weight":6}},{"id":376,"outV":74,"properties":{"weight":1}},{"id":5242,"outV":32,"properties":{"weight":2}},{"id":6267,"outV":49,"properties":{"weight":1}},{"id":2685,"outV":13,"properties":{"weight":7}}]},"outE":{"followedBy":[{"id":2816,"inV":103,"properties":{"weight":1}},{"id":2817,"inV":62,"properties":{"weight":1}},{"id":2818,"inV":64,"properties":{"weight":1}},{"id":2819,"inV":75,"properties":{"weight":3}},{"id":2820,"inV":152,"properties":{"weight":1}},{"id":2821,"inV":117,"properties":{"weight":1}},{"id":2822,"inV":168,"propertie
 s":{"weight":1}},{"id":2823,"inV":188,"properties":{"weight":1}},{"id":2824,"inV":131,"properties":{"weight":4}},{"id":2825,"inV":28,"properties":{"weight":1}},{"id":2826,"inV":124,"properties":{"weight":1}},{"id":2827,"inV":190,"properties":{"weight":1}},{"id":2828,"inV":137,"properties":{"weight":1}},{"id":2755,"inV":19,"properties":{"weight":8}},{"id":2756,"inV":56,"properties":{"weight":22}},{"id":2757,"inV":104,"properties":{"weight":17}},{"id":2758,"inV":49,"properties":{"weight":4}},{"id":2759,"inV":122,"properties":{"weight":3}},{"id":2760,"inV":23,"properties":{"weight":2}},{"id":2761,"inV":27,"properties":{"weight":23}},{"id":2762,"inV":89,"properties":{"weight":7}},{"id":2763,"inV":46,"properties":{"weight":1}},{"id":2764,"inV":57,"properties":{"weight":7}},{"id":2765,"inV":59,"properties":{"weight":6}},{"id":2766,"inV":58,"properties":{"weight":18}},{"id":2767,"inV":54,"properties":{"weight":25}},{"id":2768,"inV":100,"properties":{"weight":24}},{"id":2769,"inV":39,"prope
 rties":{"weight":3}},{"id":2770,"inV":160,"properties":{"weight":5}},{"id":2771,"inV":13,"properties":{"weight":3}},{"id":2772,"inV":51,"properties":{"weight":14}},{"id":2773,"inV":94,"properties":{"weight":4}},{"id":2774,"inV":148,"properties":{"weight":1}},{"id":2775,"inV":9,"properties":{"weight":5}},{"id":2776,"inV":48,"properties":{"weight":17}},{"id":2777,"inV":55,"properties":{"weight":1}},{"id":2778,"inV":72,"properties":{"weight":3}},{"id":2779,"inV":52,"properties":{"weight":1}},{"id":2780,"inV":12,"properties":{"weight":3}},{"id":2781,"inV":4,"properties":{"weight":4}},{"id":2782,"inV":83,"properties":{"weight":2}},{"id":2783,"inV":202,"properties":{"weight":6}},{"id":2784,"inV":82,"properties":{"weight":3}},{"id":2785,"inV":74,"properties":{"weight":1}},{"id":2786,"inV":69,"properties":{"weight":7}},{"id":2787,"inV":98,"properties":{"weight":10}},{"id":2788,"inV":21,"properties":{"weight":1}},{"id":2789,"inV":125,"properties":{"weight":1}},{"id":2790,"inV":170,"propertie
 s":{"weight":3}},{"id":2791,"inV":26,"properties":{"weight":1}},{"id":2792,"inV":60,"properties":{"weight":1}},{"id":2793,"inV":294,"properties":{"weight":2}},{"id":2794,"inV":99,"properties":{"weight":3}},{"id":2795,"inV":17,"properties":{"weight":10}},{"id":2796,"inV":63,"properties":{"weight":5}},{"id":2797,"inV":68,"properties":{"weight":3}},{"id":2798,"inV":108,"properties":{"weight":6}},{"id":2799,"inV":109,"properties":{"weight":1}},{"id":2800,"inV":196,"properties":{"weight":3}},{"id":2801,"inV":91,"properties":{"weight":1}},{"id":2802,"inV":18,"properties":{"weight":1}},{"id":2803,"inV":14,"properties":{"weight":4}},{"id":2804,"inV":105,"properties":{"weight":8}},{"id":2805,"inV":101,"properties":{"weight":2}},{"id":2806,"inV":10,"properties":{"weight":2}},{"id":2807,"inV":73,"properties":{"weight":26}},{"id":2808,"inV":78,"properties":{"weight":1}},{"id":2809,"inV":32,"properties":{"weight":3}},{"id":2810,"inV":106,"properties":{"weight":2}},{"id":2811,"inV":180,"propertie
 s":{"weight":2}},{"id":2812,"inV":88,"properties":{"weight":1}},{"id":2813,"inV":97,"properties":{"weight":1}},{"id":2814,"inV":53,"properties":{"weight":3}},{"id":2815,"inV":115,"properties":{"weight":4}}],"sungBy":[{"id":7472,"inV":351}],"writtenBy":[{"id":7471,"inV":479}]},"properties":{"name":[{"id":42,"value":"BIG RIVER"}],"songType":[{"id":44,"value":"cover"}],"performances":[{"id":43,"value":397}]}}
-{"id":16,"label":"song","inE":{"followedBy":[{"id":7008,"outV":89,"properties":{"weight":1}},{"id":6467,"outV":187,"properties":{"weight":1}},{"id":6341,"outV":21,"properties":{"weight":1}},{"id":5637,"outV":22,"properties":{"weight":3}},{"id":4101,"outV":48,"properties":{"weight":1}},{"id":5382,"outV":69,"properties":{"weight":4}},{"id":6537,"outV":55,"properties":{"weight":1}},{"id":3273,"outV":160,"properties":{"weight":2}},{"id":3882,"outV":51,"properties":{"weight":12}},{"id":12,"outV":9,"properties":{"weight":1}},{"id":1260,"outV":27,"properties":{"weight":1}},{"id":4172,"outV":54,"properties":{"weight":1}},{"id":6285,"outV":49,"properties":{"weight":1}},{"id":368,"outV":74,"properties":{"weight":1}},{"id":4464,"outV":202,"properties":{"weight":1}},{"id":468,"outV":195,"properties":{"weight":3}},{"id":5303,"outV":170,"properties":{"weight":2}},{"id":472,"outV":98,"properties":{"weight":2}},{"id":5081,"outV":4,"properties":{"weight":2}},{"id":2521,"outV":57,"properties":{"weigh
 t":1}},{"id":5146,"outV":125,"properties":{"weight":1}},{"id":1405,"outV":83,"properties":{"weight":5}},{"id":1854,"outV":94,"properties":{"weight":2}},{"id":1950,"outV":148,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":2169,"inV":25,"properties":{"weight":1}},{"id":2170,"inV":101,"properties":{"weight":46}},{"id":2171,"inV":89,"properties":{"weight":2}},{"id":2172,"inV":130,"properties":{"weight":1}},{"id":2173,"inV":83,"properties":{"weight":1}}]},"properties":{"name":[{"id":45,"value":"WEATHER REPORT SUITE"}],"songType":[{"id":47,"value":""}],"performances":[{"id":46,"value":0}]}}
-{"id":17,"label":"song","inE":{"followedBy":[{"id":5955,"outV":50,"properties":{"weight":43}},{"id":5702,"outV":20,"properties":{"weight":2}},{"id":2696,"outV":13,"properties":{"weight":2}},{"id":6538,"outV":55,"properties":{"weight":1}},{"id":1163,"outV":26,"properties":{"weight":34}},{"id":13,"outV":9,"properties":{"weight":1}},{"id":402,"outV":38,"properties":{"weight":12}},{"id":6675,"outV":12,"properties":{"weight":3}},{"id":5011,"outV":30,"properties":{"weight":3}},{"id":1877,"outV":103,"properties":{"weight":2}},{"id":2522,"outV":57,"properties":{"weight":1}},{"id":3803,"outV":88,"properties":{"weight":4}},{"id":475,"outV":98,"properties":{"weight":1}},{"id":3996,"outV":106,"properties":{"weight":1}},{"id":2588,"outV":112,"properties":{"weight":3}},{"id":540,"outV":120,"properties":{"weight":1}},{"id":990,"outV":11,"properties":{"weight":3}},{"id":1570,"outV":18,"properties":{"weight":6}},{"id":2275,"outV":25,"properties":{"weight":1}},{"id":4262,"outV":10,"properties":{"weig
 ht":5}},{"id":2795,"outV":15,"properties":{"weight":10}},{"id":6955,"outV":84,"properties":{"weight":1}},{"id":2413,"outV":68,"properties":{"weight":9}},{"id":4077,"outV":109,"properties":{"weight":1}},{"id":2991,"outV":14,"properties":{"weight":13}},{"id":4912,"outV":100,"properties":{"weight":1}},{"id":3639,"outV":24,"properties":{"weight":13}},{"id":6583,"outV":116,"properties":{"weight":1}},{"id":58,"outV":46,"properties":{"weight":2}},{"id":635,"outV":23,"properties":{"weight":16}},{"id":5244,"outV":32,"properties":{"weight":19}},{"id":2942,"outV":78,"properties":{"weight":1}},{"id":6847,"outV":64,"properties":{"weight":7}}]},"outE":{"followedBy":[{"id":2112,"inV":24,"properties":{"weight":9}},{"id":2113,"inV":21,"properties":{"weight":1}},{"id":2114,"inV":46,"properties":{"weight":1}},{"id":2115,"inV":20,"properties":{"weight":2}},{"id":2116,"inV":10,"properties":{"weight":7}},{"id":2117,"inV":68,"properties":{"weight":25}},{"id":2118,"inV":32,"properties":{"weight":19}},{"id"
 :2119,"inV":103,"properties":{"weight":3}},{"id":2120,"inV":121,"properties":{"weight":3}},{"id":2121,"inV":112,"properties":{"weight":31}},{"id":2122,"inV":85,"properties":{"weight":1}},{"id":2123,"inV":101,"properties":{"weight":1}},{"id":2124,"inV":109,"properties":{"weight":1}},{"id":2125,"inV":73,"properties":{"weight":1}},{"id":2126,"inV":88,"properties":{"weight":8}},{"id":2127,"inV":111,"properties":{"weight":3}},{"id":2128,"inV":54,"properties":{"weight":2}},{"id":2129,"inV":97,"properties":{"weight":2}},{"id":2130,"inV":100,"properties":{"weight":1}},{"id":2131,"inV":42,"properties":{"weight":1}},{"id":2132,"inV":58,"properties":{"weight":2}},{"id":2133,"inV":244,"properties":{"weight":1}},{"id":2134,"inV":56,"properties":{"weight":1}},{"id":2135,"inV":63,"properties":{"weight":1}},{"id":2136,"inV":188,"properties":{"weight":2}},{"id":2137,"inV":71,"properties":{"weight":1}},{"id":2138,"inV":30,"properties":{"weight":2}},{"id":2139,"inV":31,"properties":{"weight":1}},{"id"
 :2140,"inV":77,"properties":{"weight":2}},{"id":2141,"inV":40,"properties":{"weight":1}},{"id":2142,"inV":33,"properties":{"weight":1}},{"id":2103,"inV":18,"properties":{"weight":17}},{"id":2104,"inV":39,"properties":{"weight":2}},{"id":2105,"inV":22,"properties":{"weight":4}},{"id":2106,"inV":50,"properties":{"weight":6}},{"id":2107,"inV":14,"properties":{"weight":19}},{"id":2108,"inV":15,"properties":{"weight":8}},{"id":2109,"inV":12,"properties":{"weight":24}},{"id":2110,"inV":23,"properties":{"weight":2}},{"id":2111,"inV":13,"properties":{"weight":4}}],"sungBy":[{"id":7364,"inV":340}],"writtenBy":[{"id":7363,"inV":339}]},"properties":{"name":[{"id":48,"value":"THEY LOVE EACH OTHER"}],"songType":[{"id":50,"value":"original"}],"performances":[{"id":49,"value":227}]}}
-{"id":18,"label":"song","inE":{"followedBy":[{"id":1024,"outV":73,"properties":{"weight":4}},{"id":4097,"outV":48,"properties":{"weight":13}},{"id":6276,"outV":49,"properties":{"weight":2}},{"id":2309,"outV":25,"properties":{"weight":1}},{"id":3333,"outV":155,"properties":{"weight":1}},{"id":4231,"outV":52,"properties":{"weight":1}},{"id":4360,"outV":62,"properties":{"weight":1}},{"id":5257,"outV":32,"properties":{"weight":3}},{"id":3849,"outV":60,"properties":{"weight":1}},{"id":5385,"outV":69,"properties":{"weight":2}},{"id":2189,"outV":235,"properties":{"weight":1}},{"id":14,"outV":9,"properties":{"weight":5}},{"id":654,"outV":23,"properties":{"weight":1}},{"id":5010,"outV":30,"properties":{"weight":2}},{"id":6546,"outV":55,"properties":{"weight":1}},{"id":4885,"outV":100,"properties":{"weight":11}},{"id":1814,"outV":273,"properties":{"weight":1}},{"id":1943,"outV":148,"properties":{"weight":1}},{"id":5145,"outV":125,"properties":{"weight":1}},{"id":6688,"outV":12,"properties":{"
 weight":1}},{"id":4642,"outV":154,"properties":{"weight":3}},{"id":4260,"outV":10,"properties":{"weight":3}},{"id":2852,"outV":101,"properties":{"weight":1}},{"id":3238,"outV":63,"properties":{"weight":1}},{"id":6695,"outV":141,"properties":{"weight":1}},{"id":3880,"outV":51,"properties":{"weight":12}},{"id":1193,"outV":26,"properties":{"weight":1}},{"id":425,"outV":38,"properties":{"weight":2}},{"id":2601,"outV":112,"properties":{"weight":1}},{"id":4524,"outV":105,"properties":{"weight":3}},{"id":45,"outV":46,"properties":{"weight":3}},{"id":4015,"outV":292,"properties":{"weight":1}},{"id":560,"outV":120,"properties":{"weight":1}},{"id":6579,"outV":116,"properties":{"weight":1}},{"id":5299,"outV":170,"properties":{"weight":3}},{"id":4404,"outV":40,"properties":{"weight":1}},{"id":1716,"outV":82,"properties":{"weight":3}},{"id":5429,"outV":315,"properties":{"weight":1}},{"id":4150,"outV":218,"properties":{"weight":1}},{"id":2103,"outV":17,"properties":{"weight":17}},{"id":4152,"outV
 ":54,"properties":{"weight":18}},{"id":6456,"outV":187,"properties":{"weight":8}},{"id":1849,"outV":94,"properties":{"weight":6}},{"id":6715,"outV":53,"properties":{"weight":6}},{"id":827,"outV":171,"properties":{"weight":1}},{"id":6205,"outV":319,"properties":{"weight":1}},{"id":1086,"outV":59,"properties":{"weight":21}}

<TRUNCATED>

[48/48] tinkerpop git commit: Merge remote-tracking branch 'origin/master' into TINKERPOP-1278

Posted by sp...@apache.org.
Merge remote-tracking branch 'origin/master' into TINKERPOP-1278

Conflicts:
	CHANGELOG.asciidoc
	docs/src/upgrade/release-3.2.x-incubating.asciidoc
	gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONModule.java
	gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperTest.java
	gremlin-server/conf/gremlin-server-classic.yaml
	gremlin-server/pom.xml


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/67b4d113
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/67b4d113
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/67b4d113

Branch: refs/heads/TINKERPOP-1278
Commit: 67b4d113301174365163f7902ec4c0e6ef36aa7c
Parents: fb8c25c f929db0
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Mon Aug 22 16:39:13 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Mon Aug 22 16:39:13 2016 -0400

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |  11 +
 data/grateful-dead-typed.json                   | 422 +++++-----
 data/grateful-dead-v2d0-typed.json              | 808 +++++++++++++++++++
 data/grateful-dead-v2d0.json                    | 808 +++++++++++++++++++
 data/grateful-dead.json                         | 422 +++++-----
 data/tinkerpop-classic-v2d0-typed.json          |   6 +
 data/tinkerpop-classic-v2d0.json                |   6 +
 data/tinkerpop-crew-v2d0-typed.json             |   6 +
 data/tinkerpop-crew-v2d0.json                   |   6 +
 data/tinkerpop-modern-v2d0-typed.json           |   6 +
 data/tinkerpop-modern-v2d0.json                 |   6 +
 docs/src/index.asciidoc                         |  91 +++
 .../src/reference/gremlin-applications.asciidoc |  10 +-
 docs/src/reference/the-graph.asciidoc           | 139 +++-
 .../upgrade/release-3.2.x-incubating.asciidoc   |  78 +-
 docs/static/images/gremlin-gym-cropped.png      | Bin 0 -> 32532 bytes
 .../images/gremlin-house-of-mirrors-cropped.png | Bin 0 -> 290361 bytes
 .../main/resources/archetype-resources/pom.xml  |   5 +
 gremlin-console/pom.xml                         |  11 +
 gremlin-core/pom.xml                            |   8 +-
 .../traversal/step/filter/TailGlobalStep.java   |   5 +-
 .../StandardVerificationStrategy.java           |  15 +-
 .../traversal/util/DefaultTraversalMetrics.java |  13 +-
 .../process/traversal/util/MutableMetrics.java  |  14 +-
 .../tinkerpop/gremlin/structure/io/Io.java      |  16 +
 .../gremlin/structure/io/graphml/GraphMLIo.java |  27 +-
 .../structure/io/graphson/GraphSONIo.java       |  28 +-
 .../structure/io/graphson/GraphSONMapper.java   | 164 +++-
 .../structure/io/graphson/GraphSONModule.java   | 259 +++++-
 .../structure/io/graphson/GraphSONReader.java   |   8 +-
 .../io/graphson/GraphSONSerializerProvider.java |  15 +-
 .../io/graphson/GraphSONSerializers.java        | 466 -----------
 .../io/graphson/GraphSONSerializersV1d0.java    | 466 +++++++++++
 .../io/graphson/GraphSONSerializersV2d0.java    | 581 +++++++++++++
 .../structure/io/graphson/GraphSONTokens.java   |   3 +
 .../graphson/GraphSONTraversalSerializers.java  |  27 +-
 .../io/graphson/GraphSONTypeDeserializer.java   | 227 ++++++
 .../io/graphson/GraphSONTypeIdResolver.java     | 108 +++
 .../graphson/GraphSONTypeResolverBuilder.java   |  67 ++
 .../io/graphson/GraphSONTypeSerializer.java     | 201 +++++
 .../structure/io/graphson/GraphSONUtil.java     |  37 +
 .../structure/io/graphson/GraphSONVersion.java  |   3 +-
 .../structure/io/graphson/GraphSONWriter.java   |  11 +-
 .../io/graphson/JavaTimeSerializers.java        | 326 --------
 .../io/graphson/JavaTimeSerializersV1d0.java    | 326 ++++++++
 .../io/graphson/JavaTimeSerializersV2d0.java    | 323 ++++++++
 .../io/graphson/JavaUtilSerializers.java        |  86 --
 .../io/graphson/JavaUtilSerializersV1d0.java    |  86 ++
 .../io/graphson/JavaUtilSerializersV2d0.java    |  87 ++
 .../structure/io/graphson/JsonParserConcat.java |  83 ++
 .../io/graphson/LegacyGraphSONReader.java       |   4 +-
 .../io/graphson/TinkerPopJacksonModule.java     |  48 ++
 .../io/graphson/ToStringGraphSONSerializer.java |  42 +
 .../gremlin/structure/io/graphson/TypeInfo.java |  29 +
 .../gremlin/structure/io/gryo/GryoIo.java       |  28 +-
 .../structure/util/detached/DetachedEdge.java   |  11 +-
 .../structure/util/detached/DetachedVertex.java |  10 +-
 .../util/star/DirectionalStarGraph.java         |  39 +
 .../gremlin/structure/util/star/StarGraph.java  |  17 +-
 .../star/StarGraphGraphSONDeserializer.java     |  91 +++
 .../util/star/StarGraphGraphSONSerializer.java  | 250 ------
 .../star/StarGraphGraphSONSerializerV1d0.java   | 178 ++++
 .../star/StarGraphGraphSONSerializerV2d0.java   | 165 ++++
 .../TraversalStrategyPerformanceTest.java       |   2 +-
 .../StandardVerificationStrategyTest.java       |  41 +-
 .../GraphSONMapperEmbeddedTypeTest.java         |  22 +-
 .../io/graphson/GraphSONMapperTest.java         |  32 +-
 ...hSONMapperV1d0ToV2d0BuilderSettingsTest.java |  86 ++
 ...aphSONMapperV2d0PartialEmbeddedTypeTest.java | 351 ++++++++
 gremlin-driver/pom.xml                          |   6 +
 .../tinkerpop/gremlin/driver/Cluster.java       | 154 +++-
 .../AbstractGraphSONMessageSerializerV1d0.java  |   2 +-
 .../AbstractGraphSONMessageSerializerV2d0.java  | 245 ++++++
 .../GraphSONMessageSerializerGremlinV2d0.java   |  69 ++
 .../ser/GraphSONMessageSerializerV2d0.java      | 125 +++
 .../tinkerpop/gremlin/driver/ser/SerTokens.java |   1 +
 ...raphSONMessageSerializerGremlinTestV1d0.java | 334 ++++++++
 ...raphSONMessageSerializerGremlinTestV2d0.java | 341 ++++++++
 ...raphSONMessageSerializerGremlinV1d0Test.java | 334 --------
 .../ser/GraphSONMessageSerializerV1d0Test.java  |   9 +-
 .../ser/GraphSONMessageSerializerV2d0Test.java  | 507 ++++++++++++
 .../traversal/step/filter/GroovyTailTest.groovy |   5 +
 gremlin-groovy/pom.xml                          |   7 +
 gremlin-server/conf/gremlin-server-classic.yaml |   3 -
 gremlin-server/conf/gremlin-server-min.yaml     |  17 -
 .../conf/gremlin-server-modern-readonly.yaml    |   3 -
 gremlin-server/conf/gremlin-server-modern.yaml  |   3 -
 gremlin-server/conf/gremlin-server-neo4j.yaml   |   4 +-
 .../conf/gremlin-server-rest-modern.yaml        |   4 +-
 .../conf/gremlin-server-rest-secure.yaml        |   4 +-
 gremlin-server/conf/gremlin-server-secure.yaml  |   4 +-
 gremlin-server/conf/gremlin-server-spark.yaml   |   4 +-
 gremlin-server/conf/gremlin-server.yaml         |   4 +-
 gremlin-server/data/sample.kryo                 | Bin 2416053 -> 2436147 bytes
 gremlin-server/pom.xml                          |  11 +
 .../gremlin/server/AbstractChannelizer.java     |  23 +-
 .../tinkerpop/gremlin/server/GremlinServer.java |   6 +
 .../tinkerpop/gremlin/server/Settings.java      |  27 +-
 .../server/GremlinServerHttpIntegrateTest.java  |  22 +
 .../gremlin/util/Log4jRecordingAppender.java    |  66 ++
 .../util/Log4jRecordingAppenderTest.java        |  86 ++
 .../remote/gremlin-server-integration.yaml      |   4 +-
 .../server/gremlin-server-integration.yaml      |   4 +-
 .../server/gremlin-server-performance.yaml      |   3 -
 gremlin-test/pom.xml                            |   6 +
 .../process/traversal/step/filter/TailTest.java |  18 +
 .../traversal/step/map/PropertiesTest.java      |   6 +-
 .../structure/util/star/StarGraphTest.java      |  34 +
 .../gremlin/util/Log4jRecordingAppender.java    |  66 --
 .../io/graphson/grateful-dead-typed.json        | 422 +++++-----
 .../io/graphson/grateful-dead-v2d0-typed.json   | 808 +++++++++++++++++++
 .../io/graphson/grateful-dead-v2d0.json         | 808 +++++++++++++++++++
 .../structure/io/graphson/grateful-dead.json    | 422 +++++-----
 .../tinkerpop-classic-normalized-v2d0.json      |   6 +
 .../graphson/tinkerpop-classic-v2d0-typed.json  |   6 +
 .../io/graphson/tinkerpop-classic-v2d0.json     |   6 +
 .../io/graphson/tinkerpop-crew-v2d0-typed.json  |   6 +
 .../io/graphson/tinkerpop-crew-v2d0.json        |   6 +
 .../tinkerpop-modern-normalized-v2d0.json       |   6 +
 .../graphson/tinkerpop-modern-v2d0-typed.json   |   6 +
 .../io/graphson/tinkerpop-modern-v2d0.json      |   6 +
 .../util/Log4jRecordingAppenderTest.java        |  80 --
 pom.xml                                         |  27 +
 tinkergraph-gremlin/pom.xml                     |   4 +-
 .../tinkergraph/structure/TinkerGraph.java      |   2 +-
 .../structure/TinkerIoRegistryV2d0.java         | 213 +++++
 .../structure/IoDataGenerationTest.java         | 115 ++-
 .../TinkerGraphGraphSONSerializerV2d0Test.java  | 565 +++++++++++++
 .../tinkergraph/structure/TinkerGraphTest.java  |  28 +-
 129 files changed, 11771 insertions(+), 2715 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/67b4d113/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --cc CHANGELOG.asciidoc
index 22d6953,5f49bea..91d6fed
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@@ -26,21 -26,12 +26,27 @@@ image::https://raw.githubusercontent.co
  TinkerPop 3.2.2 (NOT OFFICIALLY RELEASED YET)
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  
 +* Added `gremlin-python` package as a Gremlin language variant in Python.
 +* Added `Bytecode` which specifies the instructions and arguments used to construct a traversal.
 +* Created an experimental GraphSON representation of `Bytecode` that will be considered unstable until 3.3.0.
 +* Added `Translator` which allows from the translation of `Bytecode` into some other form (e.g. script, `Traversal`, etc.).
 +* Added `JavaTranslator`, `GroovyTranslator`, `PythonTranslator`, and `JythonTranslator` for translating `Bytecode` accordingly.
 +* Added `TranslationStrategy` to `gremlin-test` so translators can be tested against the the process test suite.
 +* Added `Traversal.Admin.nextTraverser()` to get the next result in bulk-form (w/ default implementation).
 +* Added `TraversalSource.getAnonymousTraversalClass()` (w/ default implementation).
 +* Added `GremlinScriptEngine` interface which specifies a `eval(Bytecode, Bindings)` method.
 +* Deprecated `RemoteGraph` in favor of `TraversalSource.withRemote()` as it is more technically correct to tie a remote traversal to the `TraversalSource` than a `Graph` instance.
 +* `GremlinGroovyScriptEngine` implements `GremlinScriptEngine`.
 +* Added `GremlinJythonScriptEngine` which implements `GremlinScriptEngine`.
 +* Removed support for submitting a Java serialized `Traversal` to Gremlin Server.
 +* Removed a largely internal feature that supported automatic unrolling of traversers in the Gremlin Driver.
 +* Made it possible to directly initialize `OpProcessor` implementations with server `Settings`.
+ * Included GraphSON as a default serializer (in addition to Gryo, which was already present) in Gremlin Server if none are defined
+ * Introduced GraphSON 2.0.
+ * Deprecated `embedTypes` on the builder for `GraphSONMapper`.
+ * Defaulted the `gremlinPool` setting in Gremlin Server to be zero, which will instructs it to use `Runtime.availableProcessors()` for that settings.
+ * Changed scope of log4j dependencies so that they would only be used in tests and the binary distributions of Gremlin Console and Server.
+ * Deprecated `Io.Builder.registry()` in favor of the newly introduced `Io.Builder.onMapper()`.
  * Added new recipe for "Traversal Induced Values".
  * Fixed a potential leak of a `ReferenceCounted` resource in Gremlin Server.
  * Added class registrations for `Map.Entry` implementations to `GryoMapper`.

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/67b4d113/docs/src/reference/gremlin-applications.asciidoc
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/67b4d113/docs/src/upgrade/release-3.2.x-incubating.asciidoc
----------------------------------------------------------------------
diff --cc docs/src/upgrade/release-3.2.x-incubating.asciidoc
index fa55403,77333d4..fb2ec21
--- a/docs/src/upgrade/release-3.2.x-incubating.asciidoc
+++ b/docs/src/upgrade/release-3.2.x-incubating.asciidoc
@@@ -30,18 -66,47 +66,56 @@@ See: https://issues.apache.org/jira/bro
  Upgrading for Providers
  ~~~~~~~~~~~~~~~~~~~~~~~
  
- Driver Providers
- ^^^^^^^^^^^^^^^^
+ Graph System Providers
+ ^^^^^^^^^^^^^^^^^^^^^^
+ 
+ Deprecated Io.Builder.registry()
+ ++++++++++++++++++++++++++++++++
+ 
+ The `Io.Builder.registry()` has been deprecated in favor of `Io.Builder.onMapper(Consumer<Mapper>)`. This change gives
+ the `Graph` implementation greater flexibility over how to modify the `Mapper` implementation. In most cases, the
+ implementation will simply add its `IoRegistry` to allow the `Mapper` access to custom serialization classes, but this
+ approach makes it possible to also set other specific settings that aren't generalized across all IO implementations.
+ A good example of this type of usage would be to provide a custom `ClassRessolver` implementation to a `GryoMapper`.
+ 
+ See: link:https://issues.apache.org/jira/browse/TINKERPOP-1402[TINKERPOP-1402]
+ 
+ Log4j Dependencies
+ ++++++++++++++++++
+ 
+ There were a number of changes to the Log4j dependencies in the various modules. Log4j was formerly included as part
+ of the `slf4j-log4j12` in `gremlin-core`, however that "forced" use of log4j as a logger implementation when that
+ really wasn't necessary or desired. The `slf4j-log4j12` dependency is now in "test" scope for most of the modules. The
+ exception to that rule is `gremlin-test` which prescribes it as "optional". That change means that developers
+ dependending on `gremlin-test` (or `gremlin-groovy-test`) will need to explicitly specify it as a dependency in their
+ `pom.xml` (or a different slf4j implementation if that better suits them).
+ 
+ See: link:https://issues.apache.org/jira/browse/TINKERPOP-1151[TINKERPOP-1151]
+ 
 -Graph Drivers Providers
 -^^^^^^^^^^^^^^^^^^^^^^
++Drivers Providers
++^^^^^^^^^^^^^^^^^
+ 
+ GraphSON 2.0
+ ++++++++++++
+ 
+ Drivers providers can exploit the new format of typed values JSON serialization offered by GraphSON 2.0. This format
+ has been created to allow easy and agnostic parsing of a GraphSON payload without type loss. Drivers of non-Java
+ languages can then implement their own mapping of the GraphSON's language agnostic type IDs (e.g. `UUID`, `LocalDate`)
+ to the appropriate representation for the driver's language.
+ 
+ See: link:https://issues.apache.org/jira/browse/TINKERPOP-1274[TINKERPOP-1274],
+ link:http://tinkerpop.apache.org/docs/3.2.1-incubating/reference/#graphson-2.0-types[Reference Documentation -
+ GraphSON 2.0].
  
 +Traversal Serialization
 ++++++++++++++++++++++++
 +
 +There was an "internal" serialization format in place for `Traversal` which allowed one to be submitted to Gremlin
 +Server directly over `RemoteGraph`. That format has been removed completely and is wholly replaced by the non-JVM
 +specific approach of serializing `Bytecode`.
 +
 +See: link:https://issues.apache.org/jira/browse/TINKERPOP-1392[TINKERPOP-1392]
 +
  TinkerPop 3.2.1
  ---------------
  

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/67b4d113/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONModule.java
----------------------------------------------------------------------
diff --cc gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONModule.java
index f7d340c,a0303cf..f65d64f
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONModule.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONModule.java
@@@ -18,30 -18,20 +18,33 @@@
   */
  package org.apache.tinkerpop.gremlin.structure.io.graphson;
  
 +import org.apache.tinkerpop.gremlin.process.traversal.Bytecode;
 +import org.apache.tinkerpop.gremlin.process.traversal.Operator;
 +import org.apache.tinkerpop.gremlin.process.traversal.Order;
 +import org.apache.tinkerpop.gremlin.process.traversal.P;
  import org.apache.tinkerpop.gremlin.process.traversal.Path;
 +import org.apache.tinkerpop.gremlin.process.traversal.Pop;
 +import org.apache.tinkerpop.gremlin.process.traversal.SackFunctions;
 +import org.apache.tinkerpop.gremlin.process.traversal.Scope;
 +import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 +import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
  import org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree;
+ import org.apache.tinkerpop.gremlin.process.traversal.util.Metrics;
  import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalExplanation;
  import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalMetrics;
 +import org.apache.tinkerpop.gremlin.structure.Column;
 +import org.apache.tinkerpop.gremlin.structure.Direction;
  import org.apache.tinkerpop.gremlin.structure.Edge;
  import org.apache.tinkerpop.gremlin.structure.Property;
 +import org.apache.tinkerpop.gremlin.structure.T;
  import org.apache.tinkerpop.gremlin.structure.Vertex;
  import org.apache.tinkerpop.gremlin.structure.VertexProperty;
- import org.apache.tinkerpop.gremlin.structure.util.star.StarGraphGraphSONSerializer;
+ import org.apache.tinkerpop.gremlin.structure.util.star.DirectionalStarGraph;
+ import org.apache.tinkerpop.gremlin.structure.util.star.StarGraphGraphSONSerializerV1d0;
+ import org.apache.tinkerpop.gremlin.structure.util.star.StarGraphGraphSONSerializerV2d0;
 +import org.apache.tinkerpop.gremlin.util.function.Lambda;
- import org.apache.tinkerpop.shaded.jackson.databind.module.SimpleModule;
  
+ import java.nio.ByteBuffer;
  import java.time.Duration;
  import java.time.Instant;
  import java.time.LocalDate;
@@@ -74,6 -65,140 +78,167 @@@ abstract class GraphSONModule extends T
      }
  
      /**
+      * Version 2.0 of GraphSON.
+      */
+     static final class GraphSONModuleV2d0 extends GraphSONModule {
+         /**
+          * Constructs a new object.
+          */
+         protected GraphSONModuleV2d0(final boolean normalize) {
+             super("graphson-2.0");
+ 
+             /////////////////////// SERIALIZERS ////////////////////////////
+ 
+             // graph
+             addSerializer(Edge.class, new GraphSONSerializersV2d0.EdgeJacksonSerializer(normalize));
+             addSerializer(Vertex.class, new GraphSONSerializersV2d0.VertexJacksonSerializer(normalize));
+             addSerializer(VertexProperty.class, new GraphSONSerializersV2d0.VertexPropertyJacksonSerializer(normalize, true));
+             addSerializer(Property.class, new GraphSONSerializersV2d0.PropertyJacksonSerializer());
+             addSerializer(Metrics.class, new GraphSONSerializersV2d0.MetricsJacksonSerializer());
+             addSerializer(TraversalMetrics.class, new GraphSONSerializersV2d0.TraversalMetricsJacksonSerializer());
+             addSerializer(TraversalExplanation.class, new GraphSONSerializersV2d0.TraversalExplanationJacksonSerializer());
+             addSerializer(Path.class, new GraphSONSerializersV2d0.PathJacksonSerializer());
+             addSerializer(DirectionalStarGraph.class, new StarGraphGraphSONSerializerV2d0(normalize));
+             addSerializer(Tree.class, new GraphSONSerializersV2d0.TreeJacksonSerializer());
+ 
+             // java.util
+             addSerializer(Map.Entry.class, new JavaUtilSerializersV2d0.MapEntryJacksonSerializer());
+ 
+             // need to explicitly add serializers for those types because Jackson doesn't do it at all.
+             addSerializer(Integer.class, new GraphSONSerializersV2d0.IntegerGraphSONSerializer());
+             addSerializer(Double.class, new GraphSONSerializersV2d0.DoubleGraphSONSerializer());
+ 
+             // java.time
+             addSerializer(Duration.class, new JavaTimeSerializersV2d0.DurationJacksonSerializer());
+             addSerializer(Instant.class, new JavaTimeSerializersV2d0.InstantJacksonSerializer());
+             addSerializer(LocalDate.class, new JavaTimeSerializersV2d0.LocalDateJacksonSerializer());
+             addSerializer(LocalDateTime.class, new JavaTimeSerializersV2d0.LocalDateTimeJacksonSerializer());
+             addSerializer(LocalTime.class, new JavaTimeSerializersV2d0.LocalTimeJacksonSerializer());
+             addSerializer(MonthDay.class, new JavaTimeSerializersV2d0.MonthDayJacksonSerializer());
+             addSerializer(OffsetDateTime.class, new JavaTimeSerializersV2d0.OffsetDateTimeJacksonSerializer());
+             addSerializer(OffsetTime.class, new JavaTimeSerializersV2d0.OffsetTimeJacksonSerializer());
+             addSerializer(Period.class, new JavaTimeSerializersV2d0.PeriodJacksonSerializer());
+             addSerializer(Year.class, new JavaTimeSerializersV2d0.YearJacksonSerializer());
+             addSerializer(YearMonth.class, new JavaTimeSerializersV2d0.YearMonthJacksonSerializer());
+             addSerializer(ZonedDateTime.class, new JavaTimeSerializersV2d0.ZonedDateTimeJacksonSerializer());
+             addSerializer(ZoneOffset.class, new JavaTimeSerializersV2d0.ZoneOffsetJacksonSerializer());
+ 
++            // traversal
++            // TODO: review (added for integration with new GraphSON model for GLV bytecode)
++            addSerializer(Traversal.class, new GraphSONTraversalSerializers.TraversalJacksonSerializer());
++            addSerializer(Bytecode.class, new GraphSONTraversalSerializers.BytecodeJacksonSerializer());
++            addSerializer(VertexProperty.Cardinality.class, new GraphSONTraversalSerializers.EnumJacksonSerializer());
++            addSerializer(Column.class, new GraphSONTraversalSerializers.EnumJacksonSerializer());
++            addSerializer(Direction.class, new GraphSONTraversalSerializers.EnumJacksonSerializer());
++            addSerializer(SackFunctions.Barrier.class, new GraphSONTraversalSerializers.EnumJacksonSerializer());
++            addSerializer(Operator.class, new GraphSONTraversalSerializers.EnumJacksonSerializer());
++            addSerializer(Order.class, new GraphSONTraversalSerializers.EnumJacksonSerializer());
++            addSerializer(Pop.class, new GraphSONTraversalSerializers.EnumJacksonSerializer());
++            addSerializer(Scope.class, new GraphSONTraversalSerializers.EnumJacksonSerializer());
++            addSerializer(T.class, new GraphSONTraversalSerializers.EnumJacksonSerializer());
++            addSerializer(P.class, new GraphSONTraversalSerializers.PJacksonSerializer());
++            addSerializer(Lambda.class, new GraphSONTraversalSerializers.LambdaJacksonSerializer());
++            addSerializer(Bytecode.Binding.class, new GraphSONTraversalSerializers.BindingJacksonSerializer());
++            addSerializer(Traverser.class, new GraphSONTraversalSerializers.TraverserSerializer());
++
+             /////////////////////// DESERIALIZERS ////////////////////////////
+ 
+             // Tinkerpop Graph
+             addDeserializer(Vertex.class, new GraphSONSerializersV2d0.VertexJacksonDeserializer());
+             addDeserializer(Edge.class, new GraphSONSerializersV2d0.EdgeJacksonDeserializer());
+             addDeserializer(Property.class, new GraphSONSerializersV2d0.PropertyJacksonDeserializer());
+             addDeserializer(Path.class, new GraphSONSerializersV2d0.PathJacksonDeserializer());
+             addDeserializer(VertexProperty.class, new GraphSONSerializersV2d0.VertexPropertyJacksonDeserializer());
+             addDeserializer(Metrics.class, new GraphSONSerializersV2d0.MetricsJacksonDeserializer());
+             addDeserializer(TraversalMetrics.class, new GraphSONSerializersV2d0.TraversalMetricsJacksonDeserializer());
+             addDeserializer(Tree.class, new GraphSONSerializersV2d0.TreeJacksonDeserializer());
+ 
+             // java.time
+             addDeserializer(Duration.class, new JavaTimeSerializersV2d0.DurationJacksonDeserializer());
+             addDeserializer(Instant.class, new JavaTimeSerializersV2d0.InstantJacksonDeserializer());
+             addDeserializer(LocalDate.class, new JavaTimeSerializersV2d0.LocalDateJacksonDeserializer());
+             addDeserializer(LocalDateTime.class, new JavaTimeSerializersV2d0.LocalDateTimeJacksonDeserializer());
+             addDeserializer(LocalTime.class, new JavaTimeSerializersV2d0.LocalTimeJacksonDeserializer());
+             addDeserializer(MonthDay.class, new JavaTimeSerializersV2d0.MonthDayJacksonDeserializer());
+             addDeserializer(OffsetDateTime.class, new JavaTimeSerializersV2d0.OffsetDateTimeJacksonDeserializer());
+             addDeserializer(OffsetTime.class, new JavaTimeSerializersV2d0.OffsetTimeJacksonDeserializer());
+             addDeserializer(Period.class, new JavaTimeSerializersV2d0.PeriodJacksonDeserializer());
+             addDeserializer(Year.class, new JavaTimeSerializersV2d0.YearJacksonDeserializer());
+             addDeserializer(YearMonth.class, new JavaTimeSerializersV2d0.YearMonthJacksonDeserializer());
+             addDeserializer(ZonedDateTime.class, new JavaTimeSerializersV2d0.ZonedDateTimeJacksonDeserializer());
+             addDeserializer(ZoneOffset.class, new JavaTimeSerializersV2d0.ZoneOffsetJacksonDeserializer());
++
++            // traversal
++            addDeserializer(Bytecode.class, new GraphSONTraversalSerializers.BytecodeJacksonDeserializer());
++            addDeserializer(Enum.class, new GraphSONTraversalSerializers.EnumJacksonDeserializer());
++            addDeserializer(P.class, new GraphSONTraversalSerializers.PJacksonDeserializer());
++            addDeserializer(Lambda.class, new GraphSONTraversalSerializers.LambdaJacksonDeserializer());
++            addDeserializer(Bytecode.Binding.class, new GraphSONTraversalSerializers.BindingJacksonDeserializer());
++            addDeserializer(Traverser.class, new GraphSONTraversalSerializers.TraverserJacksonDeserializer());
+         }
+ 
+         public static Builder build() {
+             return new Builder();
+         }
+ 
+         @Override
+         public Map<Class, String> getTypeDefinitions() {
+             return new LinkedHashMap<Class, String>(){{
+                 // Those don't have deserializers because handled by Jackson,
+                 // but we still want to rename them in GraphSON
+                 put(ByteBuffer.class, "bytebuffer");
+                 put(Short.class, "int16");
+                 put(Integer.class, "int32");
+                 put(Long.class, "int64");
+                 put(Double.class, "double");
+                 put(Float.class, "float");
+ 
+                 // Time serializers/deserializers
+                 put(Duration.class, "duration");
+                 put(Instant.class, "instant");
+                 put(LocalDate.class, "localdate");
+                 put(LocalDateTime.class, "localdatetime");
+                 put(LocalTime.class, "localtime");
+                 put(MonthDay.class, "monthday");
+                 put(OffsetDateTime.class, "offsetdatetime");
+                 put(OffsetTime.class, "offsettime");
+                 put(Period.class, "period");
+                 put(Year.class, "year");
+                 put(YearMonth.class, "yearmonth");
+                 put(ZonedDateTime.class, "zoneddatetime");
+                 put(ZoneOffset.class, "zoneoffset");
+ 
+                 // Tinkerpop Graph objects
+                 put(Vertex.class, "vertex");
+                 put(Edge.class, "edge");
+                 put(Property.class, "property");
+                 put(Path.class, "path");
+                 put(VertexProperty.class, "vertexproperty");
+                 put(Metrics.class, "metrics");
+                 put(TraversalMetrics.class, "traversalmetrics");
++                put(Traverser.class, "traverser");
+                 put(Tree.class, "tree");
+             }};
+         }
+ 
+         @Override
+         public String getTypeNamespace() {
+             return GraphSONTokens.GREMLIN_TYPE_NAMESPACE;
+         }
+ 
+         static final class Builder implements GraphSONModuleBuilder {
+ 
+             private Builder() {}
+ 
+             @Override
+             public GraphSONModule create(final boolean normalize) {
+                 return new GraphSONModuleV2d0(normalize);
+             }
+ 
+         }
+     }
+ 
+     /**
       * Version 1.0 of GraphSON.
       */
      static final class GraphSONModuleV1d0 extends GraphSONModule {
@@@ -84,82 -209,68 +249,94 @@@
          protected GraphSONModuleV1d0(final boolean normalize) {
              super("graphson-1.0");
              // graph
-             addSerializer(Edge.class, new GraphSONSerializers.EdgeJacksonSerializer(normalize));
-             addSerializer(Vertex.class, new GraphSONSerializers.VertexJacksonSerializer(normalize));
-             addSerializer(VertexProperty.class, new GraphSONSerializers.VertexPropertyJacksonSerializer(normalize));
-             addSerializer(Property.class, new GraphSONSerializers.PropertyJacksonSerializer());
-             addSerializer(TraversalMetrics.class, new GraphSONSerializers.TraversalMetricsJacksonSerializer());
-             addSerializer(TraversalExplanation.class, new GraphSONSerializers.TraversalExplanationJacksonSerializer());
-             addSerializer(Path.class, new GraphSONSerializers.PathJacksonSerializer());
-             addSerializer(StarGraphGraphSONSerializer.DirectionalStarGraph.class, new StarGraphGraphSONSerializer(normalize));
-             addSerializer(Tree.class, new GraphSONSerializers.TreeJacksonSerializer());
- 
+             addSerializer(Edge.class, new GraphSONSerializersV1d0.EdgeJacksonSerializer(normalize));
+             addSerializer(Vertex.class, new GraphSONSerializersV1d0.VertexJacksonSerializer(normalize));
+             addSerializer(VertexProperty.class, new GraphSONSerializersV1d0.VertexPropertyJacksonSerializer(normalize));
+             addSerializer(Property.class, new GraphSONSerializersV1d0.PropertyJacksonSerializer());
+             addSerializer(TraversalMetrics.class, new GraphSONSerializersV1d0.TraversalMetricsJacksonSerializer());
+             addSerializer(TraversalExplanation.class, new GraphSONSerializersV1d0.TraversalExplanationJacksonSerializer());
+             addSerializer(Path.class, new GraphSONSerializersV1d0.PathJacksonSerializer());
+             addSerializer(DirectionalStarGraph.class, new StarGraphGraphSONSerializerV1d0(normalize));
+             addSerializer(Tree.class, new GraphSONSerializersV1d0.TreeJacksonSerializer());
+            
              // java.util
-             addSerializer(Map.Entry.class, new JavaUtilSerializers.MapEntryJacksonSerializer());
+             addSerializer(Map.Entry.class, new JavaUtilSerializersV1d0.MapEntryJacksonSerializer());
  
              // java.time
-             addSerializer(Duration.class, new JavaTimeSerializers.DurationJacksonSerializer());
-             addSerializer(Instant.class, new JavaTimeSerializers.InstantJacksonSerializer());
-             addSerializer(LocalDate.class, new JavaTimeSerializers.LocalDateJacksonSerializer());
-             addSerializer(LocalDateTime.class, new JavaTimeSerializers.LocalDateTimeJacksonSerializer());
-             addSerializer(LocalTime.class, new JavaTimeSerializers.LocalTimeJacksonSerializer());
-             addSerializer(MonthDay.class, new JavaTimeSerializers.MonthDayJacksonSerializer());
-             addSerializer(OffsetDateTime.class, new JavaTimeSerializers.OffsetDateTimeJacksonSerializer());
-             addSerializer(OffsetTime.class, new JavaTimeSerializers.OffsetTimeJacksonSerializer());
-             addSerializer(Period.class, new JavaTimeSerializers.PeriodJacksonSerializer());
-             addSerializer(Year.class, new JavaTimeSerializers.YearJacksonSerializer());
-             addSerializer(YearMonth.class, new JavaTimeSerializers.YearMonthJacksonSerializer());
-             addSerializer(ZonedDateTime.class, new JavaTimeSerializers.ZonedDateTimeJacksonSerializer());
-             addSerializer(ZoneOffset.class, new JavaTimeSerializers.ZoneOffsetJacksonSerializer());
- 
-             addDeserializer(Duration.class, new JavaTimeSerializers.DurationJacksonDeserializer());
-             addDeserializer(Instant.class, new JavaTimeSerializers.InstantJacksonDeserializer());
-             addDeserializer(LocalDate.class, new JavaTimeSerializers.LocalDateJacksonDeserializer());
-             addDeserializer(LocalDateTime.class, new JavaTimeSerializers.LocalDateTimeJacksonDeserializer());
-             addDeserializer(LocalTime.class, new JavaTimeSerializers.LocalTimeJacksonDeserializer());
-             addDeserializer(MonthDay.class, new JavaTimeSerializers.MonthDayJacksonDeserializer());
-             addDeserializer(OffsetDateTime.class, new JavaTimeSerializers.OffsetDateTimeJacksonDeserializer());
-             addDeserializer(OffsetTime.class, new JavaTimeSerializers.OffsetTimeJacksonDeserializer());
-             addDeserializer(Period.class, new JavaTimeSerializers.PeriodJacksonDeserializer());
-             addDeserializer(Year.class, new JavaTimeSerializers.YearJacksonDeserializer());
-             addDeserializer(YearMonth.class, new JavaTimeSerializers.YearMonthJacksonDeserializer());
-             addDeserializer(ZonedDateTime.class, new JavaTimeSerializers.ZonedDateTimeJacksonDeserializer());
-             addDeserializer(ZoneOffset.class, new JavaTimeSerializers.ZoneOffsetJacksonDeserializer());
+             addSerializer(Duration.class, new JavaTimeSerializersV1d0.DurationJacksonSerializer());
+             addSerializer(Instant.class, new JavaTimeSerializersV1d0.InstantJacksonSerializer());
+             addSerializer(LocalDate.class, new JavaTimeSerializersV1d0.LocalDateJacksonSerializer());
+             addSerializer(LocalDateTime.class, new JavaTimeSerializersV1d0.LocalDateTimeJacksonSerializer());
+             addSerializer(LocalTime.class, new JavaTimeSerializersV1d0.LocalTimeJacksonSerializer());
+             addSerializer(MonthDay.class, new JavaTimeSerializersV1d0.MonthDayJacksonSerializer());
+             addSerializer(OffsetDateTime.class, new JavaTimeSerializersV1d0.OffsetDateTimeJacksonSerializer());
+             addSerializer(OffsetTime.class, new JavaTimeSerializersV1d0.OffsetTimeJacksonSerializer());
+             addSerializer(Period.class, new JavaTimeSerializersV1d0.PeriodJacksonSerializer());
+             addSerializer(Year.class, new JavaTimeSerializersV1d0.YearJacksonSerializer());
+             addSerializer(YearMonth.class, new JavaTimeSerializersV1d0.YearMonthJacksonSerializer());
+             addSerializer(ZonedDateTime.class, new JavaTimeSerializersV1d0.ZonedDateTimeJacksonSerializer());
+             addSerializer(ZoneOffset.class, new JavaTimeSerializersV1d0.ZoneOffsetJacksonSerializer());
+ 
+             addDeserializer(Duration.class, new JavaTimeSerializersV1d0.DurationJacksonDeserializer());
+             addDeserializer(Instant.class, new JavaTimeSerializersV1d0.InstantJacksonDeserializer());
+             addDeserializer(LocalDate.class, new JavaTimeSerializersV1d0.LocalDateJacksonDeserializer());
+             addDeserializer(LocalDateTime.class, new JavaTimeSerializersV1d0.LocalDateTimeJacksonDeserializer());
+             addDeserializer(LocalTime.class, new JavaTimeSerializersV1d0.LocalTimeJacksonDeserializer());
+             addDeserializer(MonthDay.class, new JavaTimeSerializersV1d0.MonthDayJacksonDeserializer());
+             addDeserializer(OffsetDateTime.class, new JavaTimeSerializersV1d0.OffsetDateTimeJacksonDeserializer());
+             addDeserializer(OffsetTime.class, new JavaTimeSerializersV1d0.OffsetTimeJacksonDeserializer());
+             addDeserializer(Period.class, new JavaTimeSerializersV1d0.PeriodJacksonDeserializer());
+             addDeserializer(Year.class, new JavaTimeSerializersV1d0.YearJacksonDeserializer());
+             addDeserializer(YearMonth.class, new JavaTimeSerializersV1d0.YearMonthJacksonDeserializer());
+             addDeserializer(ZonedDateTime.class, new JavaTimeSerializersV1d0.ZonedDateTimeJacksonDeserializer());
+             addDeserializer(ZoneOffset.class, new JavaTimeSerializersV1d0.ZoneOffsetJacksonDeserializer());
 +
 +            // traversal
 +            // TODO: review (added for integration with new GraphSON model for GLV bytecode)
 +            addSerializer(Traversal.class, new GraphSONTraversalSerializers.TraversalJacksonSerializer());
 +            addSerializer(Bytecode.class, new GraphSONTraversalSerializers.BytecodeJacksonSerializer());
 +            addSerializer(VertexProperty.Cardinality.class, new GraphSONTraversalSerializers.EnumJacksonSerializer());
 +            addSerializer(Column.class, new GraphSONTraversalSerializers.EnumJacksonSerializer());
 +            addSerializer(Direction.class, new GraphSONTraversalSerializers.EnumJacksonSerializer());
 +            addSerializer(SackFunctions.Barrier.class, new GraphSONTraversalSerializers.EnumJacksonSerializer());
 +            addSerializer(Operator.class, new GraphSONTraversalSerializers.EnumJacksonSerializer());
 +            addSerializer(Order.class, new GraphSONTraversalSerializers.EnumJacksonSerializer());
 +            addSerializer(Pop.class, new GraphSONTraversalSerializers.EnumJacksonSerializer());
 +            addSerializer(Scope.class, new GraphSONTraversalSerializers.EnumJacksonSerializer());
 +            addSerializer(T.class, new GraphSONTraversalSerializers.EnumJacksonSerializer());
 +            addSerializer(P.class, new GraphSONTraversalSerializers.PJacksonSerializer());
 +            addSerializer(Lambda.class, new GraphSONTraversalSerializers.LambdaJacksonSerializer());
 +            addSerializer(Bytecode.Binding.class, new GraphSONTraversalSerializers.BindingJacksonSerializer());
 +            addSerializer(Traverser.class, new GraphSONTraversalSerializers.TraverserSerializer());
 +            // -- deserializers for traversal
 +            addDeserializer(Bytecode.class, new GraphSONTraversalSerializers.BytecodeJacksonDeserializer());
 +            addDeserializer(Enum.class, new GraphSONTraversalSerializers.EnumJacksonDeserializer());
 +            addDeserializer(P.class, new GraphSONTraversalSerializers.PJacksonDeserializer());
 +            addDeserializer(Lambda.class, new GraphSONTraversalSerializers.LambdaJacksonDeserializer());
 +            addDeserializer(Bytecode.Binding.class, new GraphSONTraversalSerializers.BindingJacksonDeserializer());
 +
          }
  
          public static Builder build() {
              return new Builder();
          }
  
+         @Override
+         public Map<Class, String> getTypeDefinitions() {
+             // null is fine and handled by the GraphSONMapper
+             return null;
+         }
+ 
+         @Override
+         public String getTypeNamespace() {
+             // null is fine and handled by the GraphSONMapper
+             return null;
+         }
+ 
          static final class Builder implements GraphSONModuleBuilder {
  
 -            private Builder() {}
 +            private Builder() {
 +            }
  
              @Override
              public GraphSONModule create(final boolean normalize) {

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/67b4d113/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV1d0.java
----------------------------------------------------------------------
diff --cc gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV1d0.java
index 0000000,2fc9e47..c5c2ded
mode 000000,100644..100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV1d0.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV1d0.java
@@@ -1,0 -1,465 +1,466 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one
+  * or more contributor license agreements.  See the NOTICE file
+  * distributed with this work for additional information
+  * regarding copyright ownership.  The ASF licenses this file
+  * to you under the Apache License, Version 2.0 (the
+  * "License"); you may not use this file except in compliance
+  * with the License.  You may obtain a copy of the License at
+  *
+  * http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing,
+  * software distributed under the License is distributed on an
+  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  * KIND, either express or implied.  See the License for the
+  * specific language governing permissions and limitations
+  * under the License.
+  */
+ package org.apache.tinkerpop.gremlin.structure.io.graphson;
+ 
+ import org.apache.tinkerpop.gremlin.process.traversal.Path;
+ import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+ import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
+ import org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree;
+ import org.apache.tinkerpop.gremlin.process.traversal.util.Metrics;
+ import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalExplanation;
+ import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalMetrics;
+ import org.apache.tinkerpop.gremlin.structure.Edge;
+ import org.apache.tinkerpop.gremlin.structure.Element;
+ import org.apache.tinkerpop.gremlin.structure.Property;
+ import org.apache.tinkerpop.gremlin.structure.Vertex;
+ import org.apache.tinkerpop.gremlin.structure.VertexProperty;
+ import org.apache.tinkerpop.gremlin.structure.util.Comparators;
+ import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedVertexProperty;
+ import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
+ import org.apache.tinkerpop.shaded.jackson.core.JsonGenerationException;
+ import org.apache.tinkerpop.shaded.jackson.core.JsonGenerator;
+ import org.apache.tinkerpop.shaded.jackson.core.JsonProcessingException;
+ import org.apache.tinkerpop.shaded.jackson.databind.SerializerProvider;
+ import org.apache.tinkerpop.shaded.jackson.databind.jsontype.TypeSerializer;
+ import org.apache.tinkerpop.shaded.jackson.databind.ser.std.StdKeySerializer;
+ import org.apache.tinkerpop.shaded.jackson.databind.ser.std.StdSerializer;
+ import org.javatuples.Pair;
+ 
+ import java.io.IOException;
+ import java.util.ArrayList;
+ import java.util.Comparator;
+ import java.util.HashMap;
+ import java.util.Iterator;
+ import java.util.List;
+ import java.util.Map;
+ import java.util.Set;
+ import java.util.concurrent.TimeUnit;
+ 
+ /**
+  * GraphSON serializers for graph-based objects such as vertices, edges, properties, and paths. These serializers
+  * present a generalized way to serialize the implementations of core interfaces.
+  *
+  * @author Stephen Mallette (http://stephen.genoprime.com)
+  */
+ final class GraphSONSerializersV1d0 {
+ 
+     private GraphSONSerializersV1d0() {}
+ 
+     final static class VertexPropertyJacksonSerializer extends StdSerializer<VertexProperty> {
+ 
+         private final boolean normalize;
+ 
+         public VertexPropertyJacksonSerializer(final boolean normalize) {
+             super(VertexProperty.class);
+             this.normalize = normalize;
+         }
+ 
+         @Override
+         public void serialize(final VertexProperty property, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
+                 throws IOException {
+             serializerVertexProperty(property, jsonGenerator, serializerProvider, null, normalize, true);
+         }
+ 
+         @Override
+         public void serializeWithType(final VertexProperty property, final JsonGenerator jsonGenerator,
+                                       final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException {
+             serializerVertexProperty(property, jsonGenerator, serializerProvider, typeSerializer, normalize, true);
+         }
+     }
+ 
+     final static class PropertyJacksonSerializer extends StdSerializer<Property> {
+ 
+         public PropertyJacksonSerializer() {
+             super(Property.class);
+         }
+ 
+         @Override
+         public void serialize(final Property property, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
+                 throws IOException {
+             ser(property, jsonGenerator, serializerProvider, null);
+         }
++
+         @Override
+         public void serializeWithType(final Property property, final JsonGenerator jsonGenerator,
+                                       final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException {
+             ser(property, jsonGenerator, serializerProvider, typeSerializer);
+         }
+ 
+         private static void ser(final Property property, final JsonGenerator jsonGenerator,
+                                 final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException {
+             jsonGenerator.writeStartObject();
+             if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
+             serializerProvider.defaultSerializeField(GraphSONTokens.KEY, property.key(), jsonGenerator);
+             serializerProvider.defaultSerializeField(GraphSONTokens.VALUE, property.value(), jsonGenerator);
+             jsonGenerator.writeEndObject();
+         }
+     }
+ 
+     final static class EdgeJacksonSerializer extends StdSerializer<Edge> {
+ 
+         private final boolean normalize;
+ 
+         public EdgeJacksonSerializer(final boolean normalize) {
+             super(Edge.class);
+             this.normalize = normalize;
+         }
+ 
+ 
+         @Override
+         public void serialize(final Edge edge, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
+                 throws IOException {
+             ser(edge, jsonGenerator, serializerProvider, null);
+         }
+         @Override
+         public void serializeWithType(final Edge edge, final JsonGenerator jsonGenerator,
+                                       final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException {
+             ser(edge, jsonGenerator, serializerProvider, typeSerializer);
+         }
+ 
+         private void ser(final Edge edge, final JsonGenerator jsonGenerator,
+                                 final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException {
+             jsonGenerator.writeStartObject();
+             if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
+             GraphSONUtil.writeWithType(GraphSONTokens.ID, edge.id(), jsonGenerator, serializerProvider, typeSerializer);
+ 
+             jsonGenerator.writeStringField(GraphSONTokens.LABEL, edge.label());
+             jsonGenerator.writeStringField(GraphSONTokens.TYPE, GraphSONTokens.EDGE);
+             jsonGenerator.writeStringField(GraphSONTokens.IN_LABEL, edge.inVertex().label());
+             jsonGenerator.writeStringField(GraphSONTokens.OUT_LABEL, edge.outVertex().label());
+             GraphSONUtil.writeWithType(GraphSONTokens.IN, edge.inVertex().id(), jsonGenerator, serializerProvider, typeSerializer);
+             GraphSONUtil.writeWithType(GraphSONTokens.OUT, edge.outVertex().id(), jsonGenerator, serializerProvider, typeSerializer);
+             writeProperties(edge, jsonGenerator, serializerProvider, typeSerializer);
+             jsonGenerator.writeEndObject();
+         }
+ 
+         private void writeProperties(final Edge edge, final JsonGenerator jsonGenerator,
+                                             final SerializerProvider serializerProvider,
+                                             final TypeSerializer typeSerializer) throws IOException {
+             final Iterator<Property<Object>> elementProperties = normalize ?
+                     IteratorUtils.list(edge.properties(), Comparators.PROPERTY_COMPARATOR).iterator() : edge.properties();
+             if (elementProperties.hasNext()) {
+                 jsonGenerator.writeObjectFieldStart(GraphSONTokens.PROPERTIES);
+                 if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
+                 while (elementProperties.hasNext()) {
+                     final Property<Object> elementProperty = elementProperties.next();
+                     GraphSONUtil.writeWithType(elementProperty.key(), elementProperty.value(), jsonGenerator, serializerProvider, typeSerializer);
+                 }
+                 jsonGenerator.writeEndObject();
+             }
+         }
+ 
+     }
+ 
+     final static class VertexJacksonSerializer extends StdSerializer<Vertex> {
+ 
+         private final boolean normalize;
+ 
+         public VertexJacksonSerializer(final boolean normalize) {
+             super(Vertex.class);
+             this.normalize = normalize;
+         }
+ 
+         @Override
+         public void serialize(final Vertex vertex, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
+                 throws IOException {
+             ser(vertex, jsonGenerator, serializerProvider, null);
+         }
+ 
+         @Override
+         public void serializeWithType(final Vertex vertex, final JsonGenerator jsonGenerator,
+                                       final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException {
+             ser(vertex, jsonGenerator, serializerProvider, typeSerializer);
+ 
+         }
+ 
+         private void ser(final Vertex vertex, final JsonGenerator jsonGenerator,
+                                 final SerializerProvider serializerProvider, final TypeSerializer typeSerializer)
+                 throws IOException {
+             jsonGenerator.writeStartObject();
+             if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
+             GraphSONUtil.writeWithType(GraphSONTokens.ID, vertex.id(), jsonGenerator, serializerProvider, typeSerializer);
+             jsonGenerator.writeStringField(GraphSONTokens.LABEL, vertex.label());
+             jsonGenerator.writeStringField(GraphSONTokens.TYPE, GraphSONTokens.VERTEX);
+             writeProperties(vertex, jsonGenerator, serializerProvider, typeSerializer);
+             jsonGenerator.writeEndObject();
+         }
+ 
+         private void writeProperties(final Vertex vertex, final JsonGenerator jsonGenerator,
+                                             final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException {
+             jsonGenerator.writeObjectFieldStart(GraphSONTokens.PROPERTIES);
+             if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
+ 
+             final List<String> keys = normalize ?
+                     IteratorUtils.list(vertex.keys().iterator(), Comparator.naturalOrder()) : new ArrayList<>(vertex.keys());
+             for (String key : keys) {
+                 final Iterator<VertexProperty<Object>> vertexProperties = normalize ?
+                         IteratorUtils.list(vertex.properties(key), Comparators.PROPERTY_COMPARATOR).iterator() : vertex.properties(key);
+ 
+                 if (vertexProperties.hasNext()) {
+                     jsonGenerator.writeArrayFieldStart(key);
+                     if (typeSerializer != null) {
+                         jsonGenerator.writeString(ArrayList.class.getName());
+                         jsonGenerator.writeStartArray();
+                     }
+ 
+                     while (vertexProperties.hasNext()) {
+                         serializerVertexProperty(vertexProperties.next(), jsonGenerator, serializerProvider, typeSerializer, normalize, false);
+                     }
+ 
+                     jsonGenerator.writeEndArray();
+                     if (typeSerializer != null) jsonGenerator.writeEndArray();
+                 }
+             }
+ 
+             jsonGenerator.writeEndObject();
+         }
+ 
+     }
+ 
+     final static class PathJacksonSerializer extends StdSerializer<Path> {
+ 
+         public PathJacksonSerializer() {
+             super(Path.class);
+         }
+         @Override
+         public void serialize(final Path path, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
+                 throws IOException, JsonGenerationException {
+             ser(path, jsonGenerator, null);
+         }
+ 
+         @Override
+         public void serializeWithType(final Path path, final JsonGenerator jsonGenerator,
+                                       final SerializerProvider serializerProvider, final TypeSerializer typeSerializer)
+                 throws IOException, JsonProcessingException {
+             ser(path, jsonGenerator, typeSerializer);
+         }
+         private static void ser(final Path path, final JsonGenerator jsonGenerator, final TypeSerializer typeSerializer)
+                 throws IOException {
+             jsonGenerator.writeStartObject();
+             if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
+             jsonGenerator.writeObjectField(GraphSONTokens.LABELS, path.labels());
+             jsonGenerator.writeObjectField(GraphSONTokens.OBJECTS, path.objects());
+             jsonGenerator.writeEndObject();
+         }
+ 
+     }
+     
+     final static class TreeJacksonSerializer extends StdSerializer<Tree> {
+ 
+         public TreeJacksonSerializer() {
+             super(Tree.class);
+         }
+ 
+         @Override
+         public void serialize(final Tree tree, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider) throws IOException, JsonGenerationException {
+             ser(tree, jsonGenerator, null);
+         }
+         
+         @Override
+         public void serializeWithType(final Tree tree, final JsonGenerator jsonGenerator,
+                                       final SerializerProvider serializerProvider, final TypeSerializer typeSerializer)
+                 throws IOException, JsonProcessingException {
+             ser(tree, jsonGenerator, typeSerializer);
+         }
+         
+         private static void ser(final Tree tree, final JsonGenerator jsonGenerator, final TypeSerializer typeSerializer)
+                 throws IOException {
+             jsonGenerator.writeStartObject(); 
+             if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
+             
+             Set<Map.Entry<Element, Tree>> set = tree.entrySet();
+             for(Map.Entry<Element, Tree> entry : set)
+             {
+                 jsonGenerator.writeObjectFieldStart(entry.getKey().id().toString());
+                 if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
+                 jsonGenerator.writeObjectField(GraphSONTokens.KEY, entry.getKey()); 
+                 jsonGenerator.writeObjectField(GraphSONTokens.VALUE, entry.getValue());
+                 jsonGenerator.writeEndObject();
+             }
+             jsonGenerator.writeEndObject();
+         }
+     } 
+     
+     /**
+      * Maps in the JVM can have {@link Object} as a key, but in JSON they must be a {@link String}.
+      */
+     final static class GraphSONKeySerializer extends StdKeySerializer {
+ 
+         @Override
+         public void serialize(final Object o, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider) throws IOException {
+             ser(o, jsonGenerator, serializerProvider);
+         }
+         @Override
+         public void serializeWithType(final Object o, final JsonGenerator jsonGenerator,
+                                       final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException {
+             ser(o, jsonGenerator, serializerProvider);
+         }
+ 
+         private void ser(final Object o, final JsonGenerator jsonGenerator,
+                          final SerializerProvider serializerProvider) throws IOException {
+             if (Element.class.isAssignableFrom(o.getClass()))
+                 jsonGenerator.writeFieldName((((Element) o).id()).toString());
+             else
+                 super.serialize(o, jsonGenerator, serializerProvider);
+         }
+     }
+ 
+     final static class TraversalExplanationJacksonSerializer extends StdSerializer<TraversalExplanation> {
+         public TraversalExplanationJacksonSerializer() {
+             super(TraversalExplanation.class);
+         }
+ 
+         @Override
+         public void serialize(final TraversalExplanation traversalExplanation, final JsonGenerator jsonGenerator,
+                               final SerializerProvider serializerProvider) throws IOException {
+             ser(traversalExplanation, jsonGenerator);
+         }
+ 
+         @Override
+         public void serializeWithType(final TraversalExplanation value, final JsonGenerator gen,
+                                       final SerializerProvider serializers, final TypeSerializer typeSer) throws IOException {
+             ser(value, gen);
+         }
+ 
+         public void ser(final TraversalExplanation te, final JsonGenerator jsonGenerator) throws IOException {
+             final Map<String, Object> m = new HashMap<>();
+             m.put(GraphSONTokens.ORIGINAL, getStepsAsList(te.getOriginalTraversal()));
+ 
+             final List<Pair<TraversalStrategy, Traversal.Admin<?,?>>> strategyTraversals = te.getStrategyTraversals();
+ 
+             final List<Map<String,Object>> intermediates = new ArrayList<>();
+             for (final Pair<TraversalStrategy, Traversal.Admin<?, ?>> pair : strategyTraversals) {
+                 final Map<String,Object> intermediate = new HashMap<>();
+                 intermediate.put(GraphSONTokens.STRATEGY, pair.getValue0().toString());
+                 intermediate.put(GraphSONTokens.CATEGORY, pair.getValue0().getTraversalCategory().getSimpleName());
+                 intermediate.put(GraphSONTokens.TRAVERSAL, getStepsAsList(pair.getValue1()));
+                 intermediates.add(intermediate);
+             }
+             m.put(GraphSONTokens.INTERMEDIATE, intermediates);
+ 
+             if (strategyTraversals.isEmpty())
+                 m.put(GraphSONTokens.FINAL, getStepsAsList(te.getOriginalTraversal()));
+             else
+                 m.put(GraphSONTokens.FINAL, getStepsAsList(strategyTraversals.get(strategyTraversals.size() - 1).getValue1()));
+ 
+             jsonGenerator.writeObject(m);
+         }
+ 
+         private List<String> getStepsAsList(final Traversal.Admin<?,?> t) {
+             final List<String> steps = new ArrayList<>();
+             t.getSteps().iterator().forEachRemaining(s -> steps.add(s.toString()));
+             return steps;
+         }
+     }
+ 
+     final static class TraversalMetricsJacksonSerializer extends StdSerializer<TraversalMetrics> {
+         public TraversalMetricsJacksonSerializer() {
+             super(TraversalMetrics.class);
+         }
+ 
+         @Override
+         public void serialize(final TraversalMetrics property, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
+                 throws IOException {
+             serializeInternal(property, jsonGenerator);
+         }
+ 
+         @Override
+         public void serializeWithType(final TraversalMetrics property, final JsonGenerator jsonGenerator,
+                                       final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException {
+             serializeInternal(property, jsonGenerator);
+         }
+ 
+         private static void serializeInternal(final TraversalMetrics traversalMetrics, final JsonGenerator jsonGenerator) throws IOException {
+             // creation of the map enables all the fields to be properly written with their type if required
+             final Map<String, Object> m = new HashMap<>();
+             m.put(GraphSONTokens.DURATION, traversalMetrics.getDuration(TimeUnit.NANOSECONDS) / 1000000d);
+             final List<Map<String, Object>> metrics = new ArrayList<>();
+             traversalMetrics.getMetrics().forEach(it -> metrics.add(metricsToMap(it)));
+             m.put(GraphSONTokens.METRICS, metrics);
+ 
+             jsonGenerator.writeObject(m);
+         }
+ 
+         private static Map<String, Object> metricsToMap(final Metrics metrics) {
+             final Map<String, Object> m = new HashMap<>();
+             m.put(GraphSONTokens.ID, metrics.getId());
+             m.put(GraphSONTokens.NAME, metrics.getName());
+             m.put(GraphSONTokens.COUNTS, metrics.getCounts());
+             m.put(GraphSONTokens.DURATION, metrics.getDuration(TimeUnit.NANOSECONDS) / 1000000d);
+ 
+             if (!metrics.getAnnotations().isEmpty()) {
+                 m.put(GraphSONTokens.ANNOTATIONS, metrics.getAnnotations());
+             }
+ 
+             if (!metrics.getNested().isEmpty()) {
+                 final List<Map<String, Object>> nested = new ArrayList<>();
+                 metrics.getNested().forEach(it -> nested.add(metricsToMap(it)));
+                 m.put(GraphSONTokens.METRICS, nested);
+             }
+             return m;
+         }
+     }
+ 
+     private static void serializerVertexProperty(final VertexProperty property, final JsonGenerator jsonGenerator,
+                                                  final SerializerProvider serializerProvider,
+                                                  final TypeSerializer typeSerializer, final boolean normalize,
+                                                  final boolean includeLabel) throws IOException {
+         jsonGenerator.writeStartObject();
+         if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
+         GraphSONUtil.writeWithType(GraphSONTokens.ID, property.id(), jsonGenerator, serializerProvider, typeSerializer);
+         GraphSONUtil.writeWithType(GraphSONTokens.VALUE, property.value(), jsonGenerator, serializerProvider, typeSerializer);
+         if (includeLabel) jsonGenerator.writeStringField(GraphSONTokens.LABEL, property.label());
+         tryWriteMetaProperties(property, jsonGenerator, serializerProvider, typeSerializer, normalize);
+         jsonGenerator.writeEndObject();
+     }
+ 
+     private static void tryWriteMetaProperties(final VertexProperty property, final JsonGenerator jsonGenerator,
+                                                final SerializerProvider serializerProvider,
+                                                final TypeSerializer typeSerializer, final boolean normalize) throws IOException {
+         // when "detached" you can't check features of the graph it detached from so it has to be
+         // treated differently from a regular VertexProperty implementation.
+         if (property instanceof DetachedVertexProperty) {
+             // only write meta properties key if they exist
+             if (property.properties().hasNext()) {
+                 writeMetaProperties(property, jsonGenerator, serializerProvider, typeSerializer, normalize);
+             }
+         } else {
+             // still attached - so we can check the features to see if it's worth even trying to write the
+             // meta properties key
+             if (property.graph().features().vertex().supportsMetaProperties() && property.properties().hasNext()) {
+                 writeMetaProperties(property, jsonGenerator, serializerProvider, typeSerializer, normalize);
+             }
+         }
+     }
+ 
+     private static void writeMetaProperties(final VertexProperty property, final JsonGenerator jsonGenerator,
+                                             final SerializerProvider serializerProvider,
+                                             final TypeSerializer typeSerializer, final boolean normalize) throws IOException {
+         jsonGenerator.writeObjectFieldStart(GraphSONTokens.PROPERTIES);
+         if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
+         final Iterator<Property<Object>> metaProperties = normalize ?
+                 IteratorUtils.list(( Iterator<Property<Object>>) property.properties(), Comparators.PROPERTY_COMPARATOR).iterator() : property.properties();
+         while (metaProperties.hasNext()) {
+             final Property<Object> metaProperty = metaProperties.next();
+             GraphSONUtil.writeWithType(metaProperty.key(), metaProperty.value(), jsonGenerator, serializerProvider, typeSerializer);
+         }
+         jsonGenerator.writeEndObject();
+     }
+ 
+ }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/67b4d113/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTraversalSerializers.java
----------------------------------------------------------------------
diff --cc gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTraversalSerializers.java
index 6fa8ef6,0000000..ea47d54
mode 100644,000000..100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTraversalSerializers.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTraversalSerializers.java
@@@ -1,409 -1,0 +1,424 @@@
 +/*
 + *  Licensed to the Apache Software Foundation (ASF) under one
 + *  or more contributor license agreements.  See the NOTICE file
 + *  distributed with this work for additional information
 + *  regarding copyright ownership.  The ASF licenses this file
 + *  to you under the Apache License, Version 2.0 (the
 + *  "License"); you may not use this file except in compliance
 + *  with the License.  You may obtain a copy of the License at
 + *
 + *  http://www.apache.org/licenses/LICENSE-2.0
 + *
 + *  Unless required by applicable law or agreed to in writing,
 + *  software distributed under the License is distributed on an
 + *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 + *  KIND, either express or implied.  See the License for the
 + *  specific language governing permissions and limitations
 + *  under the License.
 + */
 +
 +package org.apache.tinkerpop.gremlin.structure.io.graphson;
 +
++import org.apache.tinkerpop.gremlin.process.remote.traversal.DefaultRemoteTraverser;
 +import org.apache.tinkerpop.gremlin.process.traversal.Bytecode;
 +import org.apache.tinkerpop.gremlin.process.traversal.Operator;
 +import org.apache.tinkerpop.gremlin.process.traversal.Order;
 +import org.apache.tinkerpop.gremlin.process.traversal.P;
 +import org.apache.tinkerpop.gremlin.process.traversal.Pop;
 +import org.apache.tinkerpop.gremlin.process.traversal.SackFunctions;
 +import org.apache.tinkerpop.gremlin.process.traversal.Scope;
 +import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 +import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
++import org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree;
 +import org.apache.tinkerpop.gremlin.process.traversal.util.AndP;
 +import org.apache.tinkerpop.gremlin.process.traversal.util.ConnectiveP;
 +import org.apache.tinkerpop.gremlin.process.traversal.util.OrP;
 +import org.apache.tinkerpop.gremlin.structure.Column;
 +import org.apache.tinkerpop.gremlin.structure.Direction;
 +import org.apache.tinkerpop.gremlin.structure.T;
 +import org.apache.tinkerpop.gremlin.structure.VertexProperty;
 +import org.apache.tinkerpop.gremlin.util.function.Lambda;
 +import org.apache.tinkerpop.shaded.jackson.core.JsonGenerator;
 +import org.apache.tinkerpop.shaded.jackson.core.JsonParser;
 +import org.apache.tinkerpop.shaded.jackson.core.JsonProcessingException;
 +import org.apache.tinkerpop.shaded.jackson.core.ObjectCodec;
 +import org.apache.tinkerpop.shaded.jackson.databind.DeserializationContext;
 +import org.apache.tinkerpop.shaded.jackson.databind.JsonNode;
 +import org.apache.tinkerpop.shaded.jackson.databind.SerializerProvider;
 +import org.apache.tinkerpop.shaded.jackson.databind.deser.std.StdDeserializer;
 +import org.apache.tinkerpop.shaded.jackson.databind.jsontype.TypeSerializer;
 +import org.apache.tinkerpop.shaded.jackson.databind.node.JsonNodeType;
 +import org.apache.tinkerpop.shaded.jackson.databind.ser.std.StdSerializer;
 +
 +import java.io.IOException;
 +import java.util.ArrayList;
 +import java.util.Collection;
 +import java.util.List;
++import java.util.Map;
 +
 +/**
 + * @author Marko A. Rodriguez (http://markorodriguez.com)
 + */
 +public final class GraphSONTraversalSerializers {
 +
 +    private GraphSONTraversalSerializers() {
 +    }
 +
 +    /////////////////
 +    // SERIALIZERS //
 +    ////////////////
 +
 +    final static class TraversalJacksonSerializer extends StdSerializer<Traversal> {
 +
 +        public TraversalJacksonSerializer() {
 +            super(Traversal.class);
 +        }
 +
 +        @Override
 +        public void serialize(final Traversal traversal, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
 +                throws IOException {
 +            jsonGenerator.writeObject(traversal.asAdmin().getBytecode());
 +        }
 +
 +    }
 +
 +    final static class BytecodeJacksonSerializer extends StdSerializer<Bytecode> {
 +
 +        public BytecodeJacksonSerializer() {
 +            super(Bytecode.class);
 +        }
 +
 +        @Override
 +        public void serialize(final Bytecode bytecode, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
 +                throws IOException {
 +            jsonGenerator.writeStartObject();
 +            jsonGenerator.writeStringField("@type", "Bytecode");
 +            if (bytecode.getSourceInstructions().iterator().hasNext()) {
 +                jsonGenerator.writeArrayFieldStart("source");
 +                for (final Bytecode.Instruction instruction : bytecode.getSourceInstructions()) {
 +                    jsonGenerator.writeStartArray();
 +                    jsonGenerator.writeString(instruction.getOperator());
 +                    for (final Object argument : instruction.getArguments()) {
 +                        jsonGenerator.writeObject(argument);
 +                    }
 +                    jsonGenerator.writeEndArray();
 +                }
 +                jsonGenerator.writeEndArray();
 +            }
 +            if (bytecode.getStepInstructions().iterator().hasNext()) {
 +                jsonGenerator.writeArrayFieldStart("step");
 +                for (final Bytecode.Instruction instruction : bytecode.getStepInstructions()) {
 +                    jsonGenerator.writeStartArray();
 +                    jsonGenerator.writeString(instruction.getOperator());
 +                    for (final Object argument : instruction.getArguments()) {
 +                        jsonGenerator.writeObject(argument);
 +                    }
 +                    jsonGenerator.writeEndArray();
 +                }
 +                jsonGenerator.writeEndArray();
 +            }
 +
 +            jsonGenerator.writeEndObject();
 +        }
 +    }
 +
 +    final static class EnumJacksonSerializer extends StdSerializer<Enum> {
 +
 +        public EnumJacksonSerializer() {
 +            super(Enum.class);
 +        }
 +
 +        @Override
 +        public void serialize(final Enum enumInstance, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
 +                throws IOException {
 +            jsonGenerator.writeStartObject();
 +            jsonGenerator.writeObjectField("@type", enumInstance.getDeclaringClass().getSimpleName());
 +            jsonGenerator.writeObjectField("value", enumInstance.name());
 +            jsonGenerator.writeEndObject();
 +        }
 +
 +    }
 +
 +    final static class PJacksonSerializer extends StdSerializer<P> {
 +
 +        public PJacksonSerializer() {
 +            super(P.class);
 +        }
 +
 +        @Override
 +        public void serialize(final P p, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
 +                throws IOException {
 +            jsonGenerator.writeStartObject();
 +            jsonGenerator.writeStringField("@type", "P");
 +            jsonGenerator.writeStringField("predicate", p instanceof ConnectiveP ? p instanceof AndP ? "and" : "or" : p.getBiPredicate().toString());
 +            jsonGenerator.writeObjectField("value", p instanceof ConnectiveP ? ((ConnectiveP) p).getPredicates() : p.getValue());
 +            jsonGenerator.writeEndObject();
 +        }
 +
 +    }
 +
 +    final static class LambdaJacksonSerializer extends StdSerializer<Lambda> {
 +
 +        public LambdaJacksonSerializer() {
 +            super(Lambda.class);
 +        }
 +
 +        @Override
 +        public void serialize(final Lambda lambda, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
 +                throws IOException {
 +            jsonGenerator.writeStartObject();
 +            jsonGenerator.writeStringField("@type", "Lambda");
 +            jsonGenerator.writeStringField("value", lambda.getLambdaScript());
 +            jsonGenerator.writeStringField("language", lambda.getLambdaLanguage());
 +            jsonGenerator.writeNumberField("arguments", lambda.getLambdaArguments());
 +            jsonGenerator.writeEndObject();
 +        }
 +
 +    }
 +
 +    final static class BindingJacksonSerializer extends StdSerializer<Bytecode.Binding> {
 +
 +        public BindingJacksonSerializer() {
 +            super(Bytecode.Binding.class);
 +        }
 +
 +        @Override
 +        public void serialize(final Bytecode.Binding binding, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
 +                throws IOException {
 +            jsonGenerator.writeStartObject();
 +            jsonGenerator.writeStringField("@type", "Binding");
 +            jsonGenerator.writeStringField("variable", binding.variable());
 +            jsonGenerator.writeObjectField("value", binding.value());
 +            jsonGenerator.writeEndObject();
 +        }
 +
 +    }
 +
 +    final static class TraverserSerializer extends StdSerializer<Traverser> {
 +
 +        public TraverserSerializer() {
 +            super(Traverser.class);
 +        }
 +
 +        @Override
 +        public void serialize(final Traverser traverserInstance, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
 +                throws IOException {
-             ser(traverserInstance, jsonGenerator, serializerProvider, null);
++            ser(traverserInstance, jsonGenerator);
 +        }
 +
 +        @Override
-         public void serializeWithType(final Traverser traverserInstance, final JsonGenerator jsonGenerator,
++        public void serializeWithType(final Traverser traverser, final JsonGenerator jsonGenerator,
 +                                      final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException {
-             ser(traverserInstance, jsonGenerator, serializerProvider, typeSerializer);
++            ser(traverser, jsonGenerator);
 +        }
 +
-         private static void ser(final Traverser traverserInstance, final JsonGenerator jsonGenerator,
-                                 final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException {
++        private void ser(final Traverser traverserInstance, final JsonGenerator jsonGenerator) throws IOException {
 +            jsonGenerator.writeStartObject();
-             if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, Traverser.class.getName());
++            jsonGenerator.writeStringField("@type", "Traverser");
 +            jsonGenerator.writeObjectField("bulk", traverserInstance.bulk());
 +            jsonGenerator.writeObjectField("value", traverserInstance.get());
 +            jsonGenerator.writeEndObject();
 +        }
 +    }
 +
 +    ///////////////////
 +    // DESERIALIZERS //
 +    //////////////////
 +
 +    final static class BytecodeJacksonDeserializer extends StdDeserializer<Bytecode> {
 +
 +        public BytecodeJacksonDeserializer() {
 +            super(Bytecode.class);
 +        }
 +
 +        private static void processInstruction(final JsonNode instruction, final ObjectCodec oc, final Bytecode bytecode, final boolean source) throws IOException {
 +            final String operator = instruction.get(0).textValue();
 +            final List<Object> arguments = new ArrayList<>();
 +            for (int j = 1; j < instruction.size(); j++) {
 +                final JsonNode argument = instruction.get(j);
 +                if (argument.getNodeType().equals(JsonNodeType.OBJECT)) {
 +                    if (argument.has("@type")) {
 +                        final String type = argument.get("@type").textValue();
 +                        if (type.equals("Bytecode"))
 +                            arguments.add(oc.readValue(argument.traverse(oc), Bytecode.class));
 +                        else if (type.equals("Binding"))
 +                            arguments.add(oc.readValue(argument.traverse(oc), Bytecode.Binding.class));
 +                        else if (type.equals("P"))
 +                            arguments.add(oc.readValue(argument.traverse(oc), P.class));
 +                        else if (type.equals("Lambda"))
 +                            arguments.add(oc.readValue(argument.traverse(oc), Lambda.class));
 +                        else
 +                            arguments.add(oc.readValue(argument.traverse(oc), Enum.class));
 +                    } else {
 +                        arguments.add(oc.readValue(argument.traverse(oc), Object.class)); // TODO: vertices/edges/etc. don't get processed correctly
 +                    }
 +                } else if (argument.getNodeType().equals(JsonNodeType.NUMBER)) {
 +                    arguments.add(argument.asInt()); // TODO
 +                } else if (argument.getNodeType().equals(JsonNodeType.STRING)) {
 +                    arguments.add(argument.textValue());
 +                } else if (argument.getNodeType().equals(JsonNodeType.BOOLEAN)) {
 +                    arguments.add(argument.booleanValue());
 +                } else if (argument.getNodeType().equals(JsonNodeType.ARRAY)) {
 +                    final List<Object> list = new ArrayList<>();
 +                    for (int k = 0; k < argument.size(); k++) {
 +                        list.add(oc.readValue(argument.get(k).traverse(oc), Object.class));
 +                        //list.add(argument.get(k).textValue());
 +                    }
 +                    arguments.add(list);
 +                } else {
 +                    throw new IOException("Unknown argument: " + argument);
 +                }
 +            }
 +            if (source)
 +                bytecode.addSource(operator, arguments.toArray());
 +            else
 +                bytecode.addStep(operator, arguments.toArray());
 +        }
 +
 +        @Override
 +        public Bytecode deserialize(final JsonParser jsonParser, final DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
 +            final Bytecode bytecode = new Bytecode();
 +            final ObjectCodec oc = jsonParser.getCodec();
 +            final JsonNode node = oc.readTree(jsonParser);
 +            assert node.get("@type").textValue().equals("Bytecode");
 +            if (node.has("source")) {
 +                final JsonNode source = node.get("source");
 +                for (int i = 0; i < source.size(); i++) {
 +                    processInstruction(source.get(i), oc, bytecode, true);
 +                }
 +            }
 +            if (node.has("step")) {
 +                final JsonNode step = node.get("step");
 +                for (int i = 0; i < step.size(); i++) {
 +                    processInstruction(step.get(i), oc, bytecode, false);
 +
 +                }
 +            }
 +            return bytecode;
 +        }
 +    }
 +
 +    final static class EnumJacksonDeserializer extends StdDeserializer<Enum> {
 +
 +        public EnumJacksonDeserializer() {
 +            super(Enum.class);
 +        }
 +
 +        @Override
 +        public Enum deserialize(final JsonParser jsonParser, final DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
 +
 +            final ObjectCodec oc = jsonParser.getCodec();
 +            final JsonNode node = oc.readTree(jsonParser);
 +            final String type = node.get("@type").textValue();
 +            if (type.equals("Cardinality"))
 +                return VertexProperty.Cardinality.valueOf(node.get("value").textValue());
 +            else if (type.equals("Column"))
 +                return Column.valueOf(node.get("value").textValue());
 +            else if (type.equals("Direction"))
 +                return Direction.valueOf(node.get("value").textValue());
 +            else if (type.equals("Barrier"))
 +                return SackFunctions.Barrier.valueOf(node.get("value").textValue());
 +            else if (type.equals("Operator"))
 +                return Operator.valueOf(node.get("value").textValue());
 +            else if (type.equals("Order"))
 +                return Order.valueOf(node.get("value").textValue());
 +            else if (type.equals("Pop"))
 +                return Pop.valueOf(node.get("value").textValue());
 +            else if (type.equals("Scope"))
 +                return Scope.valueOf(node.get("value").textValue());
 +            else if (type.equals("T"))
 +                return T.valueOf(node.get("value").textValue());
 +            else
 +                throw new IOException("Unknown enum type: " + type);
 +
 +        }
 +    }
 +
 +    final static class PJacksonDeserializer extends StdDeserializer<P> {
 +
 +        public PJacksonDeserializer() {
 +            super(P.class);
 +        }
 +
 +        @Override
 +        public P deserialize(final JsonParser jsonParser, final DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
 +
 +            final ObjectCodec oc = jsonParser.getCodec();
 +            final JsonNode node = oc.readTree(jsonParser);
 +            assert node.get("@type").textValue().equals("P");
 +            final JsonNode predicate = node.get("predicate");
 +            if (predicate.textValue().equals("and") || predicate.textValue().equals("or")) {
 +                final List<P<?>> arguments = new ArrayList<>();
 +                for (int i = 0; i < node.get("value").size(); i++) {
 +                    arguments.add(oc.readValue(node.get("value").get(i).traverse(oc), P.class));
 +                }
 +                return predicate.textValue().equals("and") ? new AndP(arguments) : new OrP(arguments);
 +            } else {
 +                try {
 +                    final Object argument = oc.readValue(node.get("value").traverse(oc), Object.class);
 +                    return (P) P.class.getMethod(predicate.textValue(), argument instanceof Collection ? Collection.class : Object.class).invoke(null, argument); // TODO: number stuff, eh?
 +                } catch (final Exception e) {
 +                    throw new IOException(e.getMessage(), e);
 +                }
 +            }
 +        }
 +    }
 +
 +    final static class LambdaJacksonDeserializer extends StdDeserializer<Lambda> {
 +
 +        public LambdaJacksonDeserializer() {
 +            super(Lambda.class);
 +        }
 +
 +        @Override
 +        public Lambda deserialize(final JsonParser jsonParser, final DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
 +
 +            final ObjectCodec oc = jsonParser.getCodec();
 +            final JsonNode node = oc.readTree(jsonParser);
 +            assert node.get("@type").textValue().equals("Lambda");
 +            final String lambdaScript = node.get("value").textValue();
 +            final String lambdaLanguage = node.get("language").textValue();
 +            final int lambdaArguments = node.get("arguments").intValue();
 +            if (-1 == lambdaArguments || lambdaArguments > 2)
 +                return new Lambda.UnknownArgLambda(lambdaScript, lambdaLanguage, lambdaArguments);
 +            else if (0 == lambdaArguments)
 +                return new Lambda.ZeroArgLambda<>(lambdaScript, lambdaLanguage);
 +            else if (1 == lambdaArguments)
 +                return new Lambda.OneArgLambda<>(lambdaScript, lambdaLanguage);
 +            else
 +                return new Lambda.TwoArgLambda<>(lambdaScript, lambdaLanguage);
 +        }
 +    }
 +
 +    final static class BindingJacksonDeserializer extends StdDeserializer<Bytecode.Binding> {
 +
 +        public BindingJacksonDeserializer() {
 +            super(Bytecode.Binding.class);
 +        }
 +
 +        @Override
 +        public Bytecode.Binding deserialize(final JsonParser jsonParser, final DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
 +            final ObjectCodec oc = jsonParser.getCodec();
 +            final JsonNode node = oc.readTree(jsonParser);
 +            assert node.get("@type").textValue().equals("Binding");
 +            final String variable = node.get("variable").textValue();
 +            final Object value = oc.readValue(node.get("value").traverse(oc), Object.class);
 +            return new Bytecode.Binding<>(variable, value);
 +        }
 +    }
 +
++    static class TraverserJacksonDeserializer extends StdDeserializer<Traverser> {
 +
++        public TraverserJacksonDeserializer() {
++            super(Traverser.class);
++        }
++
++        @Override
++        public Traverser deserialize(final JsonParser jsonParser, final DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
++            jsonParser.nextToken();
++            // This will automatically parse all typed stuff.
++            final Map<String, Object> mapData = deserializationContext.readValue(jsonParser, Map.class);
++            return new DefaultRemoteTraverser<>(mapData.get("value"), (Long) mapData.get("bulk"));
++        }
++    }
 +}


[17/48] tinkerpop git commit: TINKERPOP-1405 Fixed a small bug in StandardVerificationStrategy that caused verification to fail when withPath was used in conjunction with ProfileStep.

Posted by sp...@apache.org.
TINKERPOP-1405 Fixed a small bug in StandardVerificationStrategy that caused verification to fail when withPath was used in conjunction with ProfileStep.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/d7ae2800
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/d7ae2800
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/d7ae2800

Branch: refs/heads/TINKERPOP-1278
Commit: d7ae28007c409995a75012d84611151a308c0ded
Parents: 9542419
Author: Ted Wilmes <tw...@gmail.com>
Authored: Tue Aug 16 10:00:15 2016 -0500
Committer: Ted Wilmes <tw...@gmail.com>
Committed: Tue Aug 16 10:00:15 2016 -0500

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |  1 +
 .../StandardVerificationStrategy.java           | 15 +++++--
 .../StandardVerificationStrategyTest.java       | 41 +++++++++++++++-----
 3 files changed, 43 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d7ae2800/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index bff6907..ac364b1 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -33,6 +33,7 @@ TinkerPop 3.2.2 (NOT OFFICIALLY RELEASED YET)
 * Added methods to retrieve `Cluster` settings in `gremlin-driver`.
 * Fixed a severe bug in `SubgraphStrategy`.
 * Deprecated `SubgraphStrategy.Builder.vertexCriterion()/edgeCriterion()` in favor of `vertices()/edges()`.
+* Fixed a small bug in `StandardVerificationStrategy` that caused verification to fail when `withPath` was used in conjunction with `ProfileStep`.
 
 [[release-3-2-1]]
 TinkerPop 3.2.1 (Release Date: July 18, 2016)

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d7ae2800/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/StandardVerificationStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/StandardVerificationStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/StandardVerificationStrategy.java
index 4fc7da2..95aa2e7 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/StandardVerificationStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/StandardVerificationStrategy.java
@@ -19,12 +19,14 @@
 package org.apache.tinkerpop.gremlin.process.traversal.strategy.verification;
 
 import org.apache.tinkerpop.gremlin.process.computer.traversal.step.VertexComputing;
+import org.apache.tinkerpop.gremlin.process.traversal.Step;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.step.branch.RepeatStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.ProfileSideEffectStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.SideEffectCapStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.util.ReducingBarrierStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.RequirementsStep;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.AbstractTraversalStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
 
@@ -53,11 +55,16 @@ public final class StandardVerificationStrategy extends AbstractTraversalStrateg
                 throw new VerificationException("The parent of a reducing barrier can not be repeat()-step: " + step, traversal);
         });
 
-        // The ProfileSideEffectStep must be the last step or the 2nd last step when accompanied by the cap step.
+        // The ProfileSideEffectStep must be the last step, 2nd last step when accompanied by the cap step,
+        // or 3rd to last when the traversal ends with a RequirementsStep.
+        final Step<?,?> endStep = traversal.asAdmin().getEndStep();
         if (TraversalHelper.hasStepOfClass(ProfileSideEffectStep.class, traversal) &&
-                !(traversal.asAdmin().getEndStep() instanceof ProfileSideEffectStep) &&
-                !(traversal.asAdmin().getEndStep() instanceof SideEffectCapStep && traversal.asAdmin().getEndStep().getPreviousStep() instanceof ProfileSideEffectStep)) {
-            throw new VerificationException("When specified, the profile()-Step must be the last step or followed only by the cap()-step.", traversal);
+                !(endStep instanceof ProfileSideEffectStep ||
+                        (endStep instanceof SideEffectCapStep && endStep.getPreviousStep() instanceof ProfileSideEffectStep) ||
+                        (endStep instanceof RequirementsStep && (
+                                endStep.getPreviousStep() instanceof SideEffectCapStep ||
+                                endStep.getPreviousStep() instanceof ProfileSideEffectStep)))) {
+            throw new VerificationException("When specified, the profile()-Step must be the last step or followed only by the cap()-step and/or requirements step.", traversal);
         }
 
         if (TraversalHelper.getStepsOfClass(ProfileSideEffectStep.class, traversal).size() > 1) {

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d7ae2800/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/StandardVerificationStrategyTest.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/StandardVerificationStrategyTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/StandardVerificationStrategyTest.java
index 2d80de4..aa64f68 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/StandardVerificationStrategyTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/StandardVerificationStrategyTest.java
@@ -20,13 +20,17 @@ package org.apache.tinkerpop.gremlin.process.traversal.strategy.verification;
 
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategies;
+import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.RequirementsStep;
 import org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversalStrategies;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
 
 import java.util.Arrays;
+import java.util.Collections;
 
+import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.__;
 import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.out;
 import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.repeat;
 import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.sum;
@@ -39,11 +43,20 @@ import static org.junit.Assert.fail;
 @RunWith(Parameterized.class)
 public class StandardVerificationStrategyTest {
 
+    private static final RequirementsStep emptyRequirementStep = new RequirementsStep<>(null, Collections.EMPTY_SET);
+
     @Parameterized.Parameters(name = "{0}")
     public static Iterable<Object[]> data() {
         return Arrays.asList(new Object[][]{
-                {"__.repeat(out().fold().unfold()).times(2)", repeat(out().fold().unfold()).times(2)},
-                {"__.repeat(sum()).times(2)", repeat(sum()).times(2)},
+                // traversals that should fail verification
+                {"__.repeat(out().fold().unfold()).times(2)", repeat(out().fold().unfold()).times(2), false},
+                {"__.repeat(sum()).times(2)", repeat(sum()).times(2), false},
+                {"__.repeat(out().count())", repeat(out().count()), false},
+                // traversals that should pass verification
+                {"__.V().profile().requirementsStep()",
+                        __.V().profile().asAdmin().addStep(emptyRequirementStep), true},
+                {"__.V().profile('metrics').cap('metrics').requirementsStep()",
+                        __.V().profile("metrics").asAdmin().addStep(emptyRequirementStep), true}
         });
     }
 
@@ -53,16 +66,24 @@ public class StandardVerificationStrategyTest {
     @Parameterized.Parameter(value = 1)
     public Traversal traversal;
 
+    @Parameterized.Parameter(value = 2)
+    public Boolean legalTraversal;
+
     @Test
-    public void shouldBeVerifiedIllegal() {
-        try {
-            final TraversalStrategies strategies = new DefaultTraversalStrategies();
-            strategies.addStrategies(StandardVerificationStrategy.instance());
-            traversal.asAdmin().setStrategies(strategies);
+    public void shouldBeVerified() {
+        final TraversalStrategies strategies = new DefaultTraversalStrategies();
+        strategies.addStrategies(StandardVerificationStrategy.instance());
+        traversal.asAdmin().setStrategies(strategies);
+
+        if (legalTraversal) {
             traversal.asAdmin().applyStrategies();
-            fail("The strategy should not allow traversal: " + this.traversal);
-        } catch (IllegalStateException ise) {
-            assertTrue(true);
+        } else {
+            try {
+                traversal.asAdmin().applyStrategies();
+                fail("The strategy should not allow traversal: " + this.traversal);
+            } catch (IllegalStateException ise) {
+                assertTrue(true);
+            }
         }
     }
 }


[30/48] tinkerpop git commit: TINKERPOP-1274: GraphSON 2.0.

Posted by sp...@apache.org.
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-server/conf/gremlin-server-secure.yaml
----------------------------------------------------------------------
diff --git a/gremlin-server/conf/gremlin-server-secure.yaml b/gremlin-server/conf/gremlin-server-secure.yaml
index 3c26bcf..c053bc7 100644
--- a/gremlin-server/conf/gremlin-server-secure.yaml
+++ b/gremlin-server/conf/gremlin-server-secure.yaml
@@ -46,6 +46,7 @@ serializers:
   - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoLiteMessageSerializerV1d0, config: { useMapperFromGraph: graph }}        # application/vnd.gremlin-v1.0+gryo-lite
   - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0, config: { serializeResultToString: true }}        # application/vnd.gremlin-v1.0+gryo-stringd
   - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV1d0, config: { useMapperFromGraph: graph }} # application/vnd.gremlin-v1.0+json
+  - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV2d0, config: { useMapperFromGraph: graph }} # application/vnd.gremlin-v2.0+json
   - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV1d0, config: { useMapperFromGraph: graph }}        # application/json
 processors:
   - { className: org.apache.tinkerpop.gremlin.server.op.session.SessionOpProcessor, config: { sessionTimeout: 28800000 }}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-server/conf/gremlin-server-spark.yaml
----------------------------------------------------------------------
diff --git a/gremlin-server/conf/gremlin-server-spark.yaml b/gremlin-server/conf/gremlin-server-spark.yaml
index 3d339e8..5078bf2 100644
--- a/gremlin-server/conf/gremlin-server-spark.yaml
+++ b/gremlin-server/conf/gremlin-server-spark.yaml
@@ -59,6 +59,7 @@ serializers:
   - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoLiteMessageSerializerV1d0, config: { useMapperFromGraph: graph }}        # application/vnd.gremlin-v1.0+gryo-lite
   - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0, config: { serializeResultToString: true }}        # application/vnd.gremlin-v1.0+gryo-stringd
   - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV1d0, config: { useMapperFromGraph: graph }} # application/vnd.gremlin-v1.0+json
+  - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV2d0, config: { useMapperFromGraph: graph }} # application/vnd.gremlin-v2.0+json
   - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV1d0, config: { useMapperFromGraph: graph }}        # application/json
 processors:
   - { className: org.apache.tinkerpop.gremlin.server.op.session.SessionOpProcessor, config: { sessionTimeout: 28800000 }}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-server/conf/gremlin-server.yaml
----------------------------------------------------------------------
diff --git a/gremlin-server/conf/gremlin-server.yaml b/gremlin-server/conf/gremlin-server.yaml
index 2f4e4f4..48c712a 100644
--- a/gremlin-server/conf/gremlin-server.yaml
+++ b/gremlin-server/conf/gremlin-server.yaml
@@ -36,6 +36,7 @@ serializers:
   - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoLiteMessageSerializerV1d0, config: { useMapperFromGraph: graph }}        # application/vnd.gremlin-v1.0+gryo-lite
   - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0, config: { serializeResultToString: true }}        # application/vnd.gremlin-v1.0+gryo-stringd
   - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV1d0, config: { useMapperFromGraph: graph }} # application/vnd.gremlin-v1.0+json
+  - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV2d0, config: { useMapperFromGraph: graph }} # application/vnd.gremlin-v2.0+json
   - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV1d0, config: { useMapperFromGraph: graph }}        # application/json
 processors:
   - { className: org.apache.tinkerpop.gremlin.server.op.session.SessionOpProcessor, config: { sessionTimeout: 28800000 }}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-server/data/sample.kryo
----------------------------------------------------------------------
diff --git a/gremlin-server/data/sample.kryo b/gremlin-server/data/sample.kryo
index eb64be6..38b201e 100644
Binary files a/gremlin-server/data/sample.kryo and b/gremlin-server/data/sample.kryo differ

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerHttpIntegrateTest.java
----------------------------------------------------------------------
diff --git a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerHttpIntegrateTest.java b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerHttpIntegrateTest.java
index f8efda9..6d5fc7c 100644
--- a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerHttpIntegrateTest.java
+++ b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerHttpIntegrateTest.java
@@ -18,6 +18,7 @@
  */
 package org.apache.tinkerpop.gremlin.server;
 
+import org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV2d0;
 import org.apache.tinkerpop.gremlin.server.auth.SimpleAuthenticator;
 import org.apache.tinkerpop.gremlin.server.channel.HttpChannelizer;
 import org.apache.http.Consts;
@@ -76,6 +77,12 @@ public class GremlinServerHttpIntegrateTest extends AbstractGremlinServerIntegra
                 deleteDirectory(new File("/tmp/neo4j"));
                 settings.graphs.put("graph", "conf/neo4j-empty.properties");
                 break;
+            case "should200OnPOSTWithGraphSON2d0AcceptHeaderDefaultResultToJson":
+                settings.serializers.clear();
+                final Settings.SerializerSettings serializerSettings = new Settings.SerializerSettings();
+                serializerSettings.className = GraphSONMessageSerializerV2d0.class.getName();
+                settings.serializers.add(serializerSettings);
+                break;
             case "should401OnGETWithNoAuthorizationHeader":
             case "should401OnPOSTWithNoAuthorizationHeader":
             case "should401OnGETWithBadAuthorizationHeader":
@@ -794,4 +801,19 @@ public class GremlinServerHttpIntegrateTest extends AbstractGremlinServerIntegra
             assertEquals(500, response.getStatusLine().getStatusCode());
         }
     }
+
+    @Test
+    public void should200OnPOSTWithGraphSON2d0AcceptHeaderDefaultResultToJson() throws Exception {
+        final CloseableHttpClient httpclient = HttpClients.createDefault();
+        final HttpPost httppost = new HttpPost("http://localhost:8182");
+        httppost.setEntity(new StringEntity("{\"gremlin\":\"1-1\"}", Consts.UTF_8));
+
+        try (final CloseableHttpResponse response = httpclient.execute(httppost)) {
+            assertEquals(200, response.getStatusLine().getStatusCode());
+            assertEquals("application/json", response.getEntity().getContentType().getValue());
+            final String json = EntityUtils.toString(response.getEntity());
+            final JsonNode node = mapper.readTree(json);
+            assertEquals(0, node.get("result").get("data").get(0).asInt());
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/driver/remote/gremlin-server-integration.yaml
----------------------------------------------------------------------
diff --git a/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/driver/remote/gremlin-server-integration.yaml b/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/driver/remote/gremlin-server-integration.yaml
index 8d20f54..1e4d35f 100644
--- a/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/driver/remote/gremlin-server-integration.yaml
+++ b/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/driver/remote/gremlin-server-integration.yaml
@@ -39,6 +39,7 @@ serializers:
   - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoLiteMessageSerializerV1d0, config: { useMapperFromGraph: graph, custom: [groovy.json.JsonBuilder;org.apache.tinkerpop.gremlin.driver.ser.JsonBuilderGryoSerializer]}}
   - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0, config: { serializeResultToString: true}}
   - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV1d0, config: { useMapperFromGraph: graph }}
+  - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV2d0, config: { useMapperFromGraph: graph }}
   - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV1d0, config: { useMapperFromGraph: graph }}
 processors:
   - { className: org.apache.tinkerpop.gremlin.server.op.session.SessionOpProcessor, config: { sessionTimeout: 28800000 }}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/server/gremlin-server-integration.yaml
----------------------------------------------------------------------
diff --git a/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/server/gremlin-server-integration.yaml b/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/server/gremlin-server-integration.yaml
index 9d92cd8..42a82e8 100644
--- a/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/server/gremlin-server-integration.yaml
+++ b/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/server/gremlin-server-integration.yaml
@@ -35,6 +35,7 @@ serializers:
   - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoLiteMessageSerializerV1d0, config: { useMapperFromGraph: graph, custom: [groovy.json.JsonBuilder;org.apache.tinkerpop.gremlin.driver.ser.JsonBuilderGryoSerializer]}}
   - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0, config: { serializeResultToString: true}}
   - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV1d0, config: { useMapperFromGraph: graph }}
+  - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV2d0, config: { useMapperFromGraph: graph }}
   - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV1d0, config: { useMapperFromGraph: graph }}
 processors:
   - { className: org.apache.tinkerpop.gremlin.server.op.session.SessionOpProcessor, config: { sessionTimeout: 28800000 }}


[26/48] tinkerpop git commit: TINKERPOP-1274: GraphSON 2.0.

Posted by sp...@apache.org.
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/grateful-dead.json
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/grateful-dead.json b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/grateful-dead.json
index cf01395..92c4d84 100644
--- a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/grateful-dead.json
+++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/grateful-dead.json
@@ -1,257 +1,257 @@
 {"id":1,"label":"song","inE":{"followedBy":[{"id":3059,"outV":153,"properties":{"weight":1}},{"id":276,"outV":5,"properties":{"weight":2}},{"id":3704,"outV":3,"properties":{"weight":2}},{"id":4383,"outV":62,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":0,"inV":2,"properties":{"weight":1}},{"id":1,"inV":3,"properties":{"weight":2}},{"id":2,"inV":4,"properties":{"weight":1}},{"id":3,"inV":5,"properties":{"weight":1}},{"id":4,"inV":6,"properties":{"weight":1}}],"sungBy":[{"id":7612,"inV":340}],"writtenBy":[{"id":7611,"inV":527}]},"properties":{"name":[{"id":0,"value":"HEY BO DIDDLEY"}],"songType":[{"id":2,"value":"cover"}],"performances":[{"id":1,"value":5}]}}
 {"id":2,"label":"song","inE":{"followedBy":[{"id":0,"outV":1,"properties":{"weight":1}},{"id":323,"outV":34,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":6190,"inV":123,"properties":{"weight":1}},{"id":6191,"inV":50,"properties":{"weight":1}}],"sungBy":[{"id":7666,"inV":525}],"writtenBy":[{"id":7665,"inV":525}]},"properties":{"name":[{"id":3,"value":"IM A MAN"}],"songType":[{"id":5,"value":"cover"}],"performances":[{"id":4,"value":1}]}}
-{"id":3,"label":"song","inE":{"followedBy":[{"id":1,"outV":1,"properties":{"weight":2}},{"id":2051,"outV":92,"properties":{"weight":4}},{"id":1412,"outV":83,"properties":{"weight":6}},{"id":6669,"outV":12,"properties":{"weight":1}},{"id":1166,"outV":26,"properties":{"weight":4}},{"id":6286,"outV":49,"properties":{"weight":1}},{"id":910,"outV":91,"properties":{"weight":3}},{"id":526,"outV":120,"properties":{"weight":2}},{"id":273,"outV":5,"properties":{"weight":40}},{"id":2194,"outV":235,"properties":{"weight":1}},{"id":1684,"outV":124,"properties":{"weight":1}},{"id":3221,"outV":63,"properties":{"weight":1}},{"id":1941,"outV":148,"properties":{"weight":4}},{"id":2712,"outV":13,"properties":{"weight":3}},{"id":6425,"outV":134,"properties":{"weight":2}},{"id":5787,"outV":76,"properties":{"weight":2}},{"id":5148,"outV":125,"properties":{"weight":4}},{"id":6692,"outV":141,"properties":{"weight":2}},{"id":6310,"outV":123,"properties":{"weight":1}},{"id":6448,"outV":187,"properties":{"wei
 ght":3}},{"id":2225,"outV":226,"properties":{"weight":1}},{"id":5042,"outV":209,"properties":{"weight":1}},{"id":4789,"outV":114,"properties":{"weight":2}},{"id":1464,"outV":81,"properties":{"weight":1}},{"id":2232,"outV":215,"properties":{"weight":1}},{"id":4665,"outV":154,"properties":{"weight":1}},{"id":2235,"outV":29,"properties":{"weight":163}},{"id":6208,"outV":319,"properties":{"weight":4}},{"id":706,"outV":206,"properties":{"weight":2}},{"id":835,"outV":171,"properties":{"weight":1}},{"id":5188,"outV":99,"properties":{"weight":1}},{"id":1862,"outV":94,"properties":{"weight":10}},{"id":6343,"outV":21,"properties":{"weight":1}},{"id":1735,"outV":82,"properties":{"weight":1}},{"id":4937,"outV":277,"properties":{"weight":1}},{"id":3276,"outV":160,"properties":{"weight":1}},{"id":3149,"outV":104,"properties":{"weight":1}},{"id":1358,"outV":130,"properties":{"weight":18}},{"id":4304,"outV":110,"properties":{"weight":1}},{"id":1105,"outV":59,"properties":{"weight":1}},{"id":722,"ou
 tV":80,"properties":{"weight":1}},{"id":4182,"outV":54,"properties":{"weight":1}},{"id":1499,"outV":164,"properties":{"weight":2}},{"id":2397,"outV":179,"properties":{"weight":1}},{"id":6623,"outV":127,"properties":{"weight":3}},{"id":351,"outV":178,"properties":{"weight":1}},{"id":2018,"outV":149,"properties":{"weight":1}},{"id":7011,"outV":89,"properties":{"weight":2}},{"id":5348,"outV":165,"properties":{"weight":1}},{"id":2278,"outV":25,"properties":{"weight":7}},{"id":1255,"outV":27,"properties":{"weight":2}},{"id":3048,"outV":153,"properties":{"weight":13}},{"id":5867,"outV":96,"properties":{"weight":116}},{"id":364,"outV":74,"properties":{"weight":2}},{"id":492,"outV":98,"properties":{"weight":1}},{"id":3948,"outV":138,"properties":{"weight":4}},{"id":4335,"outV":62,"properties":{"weight":1}},{"id":3312,"outV":252,"properties":{"weight":1}},{"id":5745,"outV":129,"properties":{"weight":1}},{"id":4596,"outV":85,"properties":{"weight":3}},{"id":5367,"outV":132,"properties":{"weig
 ht":1}},{"id":633,"outV":23,"properties":{"weight":1}},{"id":891,"outV":140,"properties":{"weight":2}},{"id":5375,"outV":69,"properties":{"weight":1}},{"id":6143,"outV":289,"properties":{"weight":3}}]},"outE":{"followedBy":[{"id":3712,"inV":27,"properties":{"weight":1}},{"id":3713,"inV":110,"properties":{"weight":4}},{"id":3714,"inV":215,"properties":{"weight":4}},{"id":3715,"inV":127,"properties":{"weight":10}},{"id":3716,"inV":83,"properties":{"weight":3}},{"id":3717,"inV":103,"properties":{"weight":2}},{"id":3718,"inV":68,"properties":{"weight":1}},{"id":3719,"inV":134,"properties":{"weight":2}},{"id":3720,"inV":25,"properties":{"weight":10}},{"id":3721,"inV":125,"properties":{"weight":54}},{"id":3722,"inV":130,"properties":{"weight":26}},{"id":3723,"inV":141,"properties":{"weight":2}},{"id":3724,"inV":145,"properties":{"weight":1}},{"id":3725,"inV":319,"properties":{"weight":3}},{"id":3726,"inV":12,"properties":{"weight":1}},{"id":3727,"inV":160,"properties":{"weight":37}},{"id"
 :3728,"inV":70,"properties":{"weight":2}},{"id":3729,"inV":123,"properties":{"weight":1}},{"id":3730,"inV":129,"properties":{"weight":1}},{"id":3731,"inV":30,"properties":{"weight":2}},{"id":3732,"inV":148,"properties":{"weight":1}},{"id":3733,"inV":211,"properties":{"weight":3}},{"id":3734,"inV":87,"properties":{"weight":13}},{"id":3735,"inV":164,"properties":{"weight":4}},{"id":3736,"inV":64,"properties":{"weight":2}},{"id":3737,"inV":320,"properties":{"weight":1}},{"id":3738,"inV":61,"properties":{"weight":3}},{"id":3739,"inV":210,"properties":{"weight":3}},{"id":3740,"inV":50,"properties":{"weight":7}},{"id":3741,"inV":128,"properties":{"weight":3}},{"id":3742,"inV":315,"properties":{"weight":1}},{"id":3743,"inV":261,"properties":{"weight":1}},{"id":3744,"inV":213,"properties":{"weight":13}},{"id":3745,"inV":72,"properties":{"weight":1}},{"id":3746,"inV":38,"properties":{"weight":4}},{"id":3747,"inV":204,"properties":{"weight":14}},{"id":3748,"inV":62,"properties":{"weight":2}},
 {"id":3749,"inV":150,"properties":{"weight":8}},{"id":3750,"inV":309,"properties":{"weight":1}},{"id":3751,"inV":131,"properties":{"weight":1}},{"id":3752,"inV":151,"properties":{"weight":1}},{"id":3753,"inV":321,"properties":{"weight":1}},{"id":3754,"inV":90,"properties":{"weight":2}},{"id":3755,"inV":82,"properties":{"weight":1}},{"id":3756,"inV":120,"properties":{"weight":1}},{"id":3757,"inV":46,"properties":{"weight":5}},{"id":3758,"inV":157,"properties":{"weight":5}},{"id":3759,"inV":59,"properties":{"weight":1}},{"id":3760,"inV":81,"properties":{"weight":1}},{"id":3761,"inV":86,"properties":{"weight":5}},{"id":3762,"inV":140,"properties":{"weight":1}},{"id":3763,"inV":201,"properties":{"weight":1}},{"id":3764,"inV":214,"properties":{"weight":1}},{"id":3765,"inV":185,"properties":{"weight":2}},{"id":3766,"inV":216,"properties":{"weight":1}},{"id":3767,"inV":217,"properties":{"weight":2}},{"id":3768,"inV":236,"properties":{"weight":5}},{"id":3769,"inV":193,"properties":{"weight"
 :1}},{"id":3770,"inV":79,"properties":{"weight":2}},{"id":3771,"inV":84,"properties":{"weight":1}},{"id":3772,"inV":23,"properties":{"weight":2}},{"id":3773,"inV":31,"properties":{"weight":2}},{"id":3774,"inV":240,"properties":{"weight":1}},{"id":3775,"inV":292,"properties":{"weight":1}},{"id":3776,"inV":9,"properties":{"weight":1}},{"id":3777,"inV":259,"properties":{"weight":1}},{"id":3694,"inV":5,"properties":{"weight":57}},{"id":3695,"inV":114,"properties":{"weight":30}},{"id":3696,"inV":74,"properties":{"weight":2}},{"id":3697,"inV":78,"properties":{"weight":3}},{"id":3698,"inV":10,"properties":{"weight":1}},{"id":3699,"inV":26,"properties":{"weight":4}},{"id":3700,"inV":153,"properties":{"weight":7}},{"id":3701,"inV":4,"properties":{"weight":4}},{"id":3702,"inV":317,"properties":{"weight":1}},{"id":3703,"inV":13,"properties":{"weight":5}},{"id":3704,"inV":1,"properties":{"weight":2}},{"id":3705,"inV":21,"properties":{"weight":2}},{"id":3706,"inV":57,"properties":{"weight":2}},{
 "id":3707,"inV":122,"properties":{"weight":2}},{"id":3708,"inV":318,"properties":{"weight":1}},{"id":3709,"inV":94,"properties":{"weight":26}},{"id":3710,"inV":96,"properties":{"weight":7}},{"id":3711,"inV":124,"properties":{"weight":15}}],"sungBy":[{"id":7808,"inV":351}],"writtenBy":[{"id":7807,"inV":671}]},"properties":{"name":[{"id":6,"value":"NOT FADE AWAY"}],"songType":[{"id":8,"value":"cover"}],"performances":[{"id":7,"value":531}]}}
-{"id":4,"label":"song","inE":{"followedBy":[{"id":128,"outV":97,"properties":{"weight":1}},{"id":1664,"outV":267,"properties":{"weight":1}},{"id":2,"outV":1,"properties":{"weight":1}},{"id":4099,"outV":48,"properties":{"weight":1}},{"id":1667,"outV":124,"properties":{"weight":15}},{"id":899,"outV":140,"properties":{"weight":1}},{"id":1156,"outV":26,"properties":{"weight":16}},{"id":773,"outV":122,"properties":{"weight":9}},{"id":6534,"outV":242,"properties":{"weight":1}},{"id":6664,"outV":12,"properties":{"weight":3}},{"id":1032,"outV":73,"properties":{"weight":1}},{"id":5129,"outV":222,"properties":{"weight":1}},{"id":5387,"outV":69,"properties":{"weight":1}},{"id":5517,"outV":43,"properties":{"weight":2}},{"id":5006,"outV":30,"properties":{"weight":2}},{"id":6030,"outV":204,"properties":{"weight":2}},{"id":2063,"outV":92,"properties":{"weight":1}},{"id":915,"outV":91,"properties":{"weight":2}},{"id":6940,"outV":84,"properties":{"weight":5}},{"id":2464,"outV":68,"properties":{"weig
 ht":1}},{"id":5795,"outV":76,"properties":{"weight":2}},{"id":3620,"outV":24,"properties":{"weight":2}},{"id":4772,"outV":114,"properties":{"weight":25}},{"id":2982,"outV":14,"properties":{"weight":3}},{"id":3367,"outV":184,"properties":{"weight":6}},{"id":2345,"outV":87,"properties":{"weight":2}},{"id":2861,"outV":101,"properties":{"weight":6}},{"id":1840,"outV":275,"properties":{"weight":1}},{"id":5425,"outV":102,"properties":{"weight":1}},{"id":180,"outV":70,"properties":{"weight":46}},{"id":2613,"outV":158,"properties":{"weight":1}},{"id":5562,"outV":162,"properties":{"weight":2}},{"id":5434,"outV":217,"properties":{"weight":1}},{"id":1469,"outV":81,"properties":{"weight":1}},{"id":446,"outV":38,"properties":{"weight":7}},{"id":2494,"outV":90,"properties":{"weight":3}},{"id":3266,"outV":160,"properties":{"weight":10}},{"id":326,"outV":34,"properties":{"weight":1}},{"id":6855,"outV":64,"properties":{"weight":12}},{"id":583,"outV":120,"properties":{"weight":2}},{"id":73,"outV":46,
 "properties":{"weight":4}},{"id":4425,"outV":212,"properties":{"weight":1}},{"id":4941,"outV":86,"properties":{"weight":2}},{"id":1613,"outV":210,"properties":{"weight":2}},{"id":6350,"outV":21,"properties":{"weight":1}},{"id":3535,"outV":201,"properties":{"weight":1}},{"id":980,"outV":11,"properties":{"weight":3}},{"id":5206,"outV":99,"properties":{"weight":1}},{"id":1494,"outV":164,"properties":{"weight":3}},{"id":5847,"outV":61,"properties":{"weight":2}},{"id":6490,"outV":187,"properties":{"weight":1}},{"id":2781,"outV":15,"properties":{"weight":4}},{"id":5600,"outV":42,"properties":{"weight":1}},{"id":353,"outV":74,"properties":{"weight":6}},{"id":5474,"outV":79,"properties":{"weight":1}},{"id":3811,"outV":88,"properties":{"weight":2}},{"id":1891,"outV":103,"properties":{"weight":19}},{"id":5989,"outV":50,"properties":{"weight":12}},{"id":4327,"outV":110,"properties":{"weight":2}},{"id":2538,"outV":57,"properties":{"weight":4}},{"id":3050,"outV":153,"properties":{"weight":13}},{
 "id":4970,"outV":236,"properties":{"weight":1}},{"id":2283,"outV":25,"properties":{"weight":9}},{"id":236,"outV":145,"properties":{"weight":1}},{"id":6126,"outV":72,"properties":{"weight":2}},{"id":5232,"outV":214,"properties":{"weight":2}},{"id":4594,"outV":85,"properties":{"weight":1}},{"id":4084,"outV":109,"properties":{"weight":1}},{"id":1652,"outV":213,"properties":{"weight":3}},{"id":3701,"outV":3,"properties":{"weight":4}},{"id":5621,"outV":22,"properties":{"weight":1}},{"id":629,"outV":23,"properties":{"weight":10}},{"id":7029,"outV":89,"properties":{"weight":1}},{"id":5238,"outV":32,"properties":{"weight":3}},{"id":2684,"outV":13,"properties":{"weight":9}},{"id":3325,"outV":268,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":5120,"inV":40,"properties":{"weight":5}},{"id":5121,"inV":33,"properties":{"weight":3}},{"id":5122,"inV":79,"properties":{"weight":1}},{"id":5123,"inV":292,"properties":{"weight":1}},{"id":5071,"inV":50,"properties":{"weight":9}},{"id":5072,"in
 V":12,"properties":{"weight":26}},{"id":5073,"inV":18,"properties":{"weight":4}},{"id":5074,"inV":24,"properties":{"weight":9}},{"id":5075,"inV":23,"properties":{"weight":63}},{"id":5076,"inV":13,"properties":{"weight":12}},{"id":5077,"inV":10,"properties":{"weight":4}},{"id":5078,"inV":11,"properties":{"weight":3}},{"id":5079,"inV":26,"properties":{"weight":18}},{"id":5080,"inV":22,"properties":{"weight":1}},{"id":5081,"inV":16,"properties":{"weight":2}},{"id":5082,"inV":49,"properties":{"weight":1}},{"id":5083,"inV":25,"properties":{"weight":2}},{"id":5084,"inV":51,"properties":{"weight":1}},{"id":5085,"inV":15,"properties":{"weight":1}},{"id":5086,"inV":112,"properties":{"weight":4}},{"id":5087,"inV":121,"properties":{"weight":1}},{"id":5088,"inV":32,"properties":{"weight":7}},{"id":5089,"inV":68,"properties":{"weight":2}},{"id":5090,"inV":120,"properties":{"weight":77}},{"id":5091,"inV":103,"properties":{"weight":1}},{"id":5092,"inV":42,"properties":{"weight":3}},{"id":5093,"inV
 ":85,"properties":{"weight":4}},{"id":5094,"inV":76,"properties":{"weight":5}},{"id":5095,"inV":181,"properties":{"weight":2}},{"id":5096,"inV":14,"properties":{"weight":2}},{"id":5097,"inV":122,"properties":{"weight":1}},{"id":5098,"inV":153,"properties":{"weight":3}},{"id":5099,"inV":96,"properties":{"weight":1}},{"id":5100,"inV":82,"properties":{"weight":3}},{"id":5101,"inV":110,"properties":{"weight":1}},{"id":5102,"inV":19,"properties":{"weight":6}},{"id":5103,"inV":129,"properties":{"weight":1}},{"id":5104,"inV":84,"properties":{"weight":1}},{"id":5105,"inV":88,"properties":{"weight":9}},{"id":5106,"inV":97,"properties":{"weight":1}},{"id":5107,"inV":114,"properties":{"weight":2}},{"id":5108,"inV":30,"properties":{"weight":8}},{"id":5109,"inV":31,"properties":{"weight":8}},{"id":5110,"inV":69,"properties":{"weight":4}},{"id":5111,"inV":127,"properties":{"weight":2}},{"id":5112,"inV":60,"properties":{"weight":1}},{"id":5113,"inV":39,"properties":{"weight":2}},{"id":5114,"inV":2
 1,"properties":{"weight":1}},{"id":5115,"inV":117,"properties":{"weight":1}},{"id":5116,"inV":78,"properties":{"weight":1}},{"id":5117,"inV":38,"properties":{"weight":1}},{"id":5118,"inV":169,"properties":{"weight":2}},{"id":5119,"inV":118,"properties":{"weight":1}}],"sungBy":[{"id":7064,"inV":340}],"writtenBy":[{"id":7063,"inV":339}]},"properties":{"name":[{"id":9,"value":"BERTHA"}],"songType":[{"id":11,"value":"original"}],"performances":[{"id":10,"value":394}]}}
-{"id":5,"label":"song","inE":{"followedBy":[{"id":962,"outV":67,"properties":{"weight":5}},{"id":194,"outV":70,"properties":{"weight":8}},{"id":3,"outV":1,"properties":{"weight":1}},{"id":5446,"outV":231,"properties":{"weight":5}},{"id":6344,"outV":21,"properties":{"weight":6}},{"id":6666,"outV":12,"properties":{"weight":1}},{"id":1738,"outV":82,"properties":{"weight":1}},{"id":1867,"outV":94,"properties":{"weight":15}},{"id":4300,"outV":110,"properties":{"weight":1}},{"id":847,"outV":171,"properties":{"weight":1}},{"id":2832,"outV":101,"properties":{"weight":3}},{"id":6032,"outV":115,"properties":{"weight":1}},{"id":1170,"outV":26,"properties":{"weight":1}},{"id":5330,"outV":238,"properties":{"weight":1}},{"id":1491,"outV":164,"properties":{"weight":3}},{"id":1429,"outV":83,"properties":{"weight":3}},{"id":3033,"outV":14,"properties":{"weight":1}},{"id":6298,"outV":49,"properties":{"weight":1}},{"id":1373,"outV":130,"properties":{"weight":11}},{"id":4447,"outV":113,"properties":{"w
 eight":1}},{"id":5151,"outV":125,"properties":{"weight":6}},{"id":6431,"outV":134,"properties":{"weight":2}},{"id":5343,"outV":165,"properties":{"weight":2}},{"id":1953,"outV":148,"properties":{"weight":10}},{"id":2274,"outV":25,"properties":{"weight":8}},{"id":1634,"outV":210,"properties":{"weight":1}},{"id":100,"outV":46,"properties":{"weight":1}},{"id":933,"outV":91,"properties":{"weight":1}},{"id":2021,"outV":149,"properties":{"weight":1}},{"id":6694,"outV":141,"properties":{"weight":2}},{"id":4009,"outV":225,"properties":{"weight":1}},{"id":682,"outV":219,"properties":{"weight":1}},{"id":3694,"outV":3,"properties":{"weight":57}},{"id":4718,"outV":186,"properties":{"weight":6}},{"id":3055,"outV":153,"properties":{"weight":9}},{"id":2736,"outV":13,"properties":{"weight":3}},{"id":2480,"outV":68,"properties":{"weight":1}},{"id":5426,"outV":102,"properties":{"weight":1}},{"id":6899,"outV":147,"properties":{"weight":1}},{"id":5879,"outV":96,"properties":{"weight":22}},{"id":6201,"ou
 tV":319,"properties":{"weight":2}},{"id":5370,"outV":132,"properties":{"weight":2}},{"id":2236,"outV":29,"properties":{"weight":5}},{"id":4604,"outV":85,"properties":{"weight":2}},{"id":700,"outV":206,"properties":{"weight":1}},{"id":5759,"outV":129,"properties":{"weight":6}}]},"outE":{"followedBy":[{"id":273,"inV":3,"properties":{"weight":40}},{"id":274,"inV":26,"properties":{"weight":3}},{"id":275,"inV":114,"properties":{"weight":40}},{"id":276,"inV":1,"properties":{"weight":2}},{"id":277,"inV":74,"properties":{"weight":3}},{"id":278,"inV":122,"properties":{"weight":3}},{"id":279,"inV":133,"properties":{"weight":2}},{"id":280,"inV":83,"properties":{"weight":1}},{"id":281,"inV":153,"properties":{"weight":5}},{"id":282,"inV":159,"properties":{"weight":1}},{"id":283,"inV":13,"properties":{"weight":3}},{"id":284,"inV":25,"properties":{"weight":19}},{"id":285,"inV":96,"properties":{"weight":10}},{"id":286,"inV":160,"properties":{"weight":2}},{"id":287,"inV":32,"properties":{"weight":1}
 },{"id":288,"inV":120,"properties":{"weight":16}},{"id":289,"inV":50,"properties":{"weight":1}},{"id":290,"inV":116,"properties":{"weight":1}},{"id":291,"inV":127,"properties":{"weight":6}},{"id":292,"inV":65,"properties":{"weight":1}},{"id":293,"inV":130,"properties":{"weight":3}},{"id":294,"inV":125,"properties":{"weight":5}},{"id":295,"inV":70,"properties":{"weight":13}},{"id":296,"inV":134,"properties":{"weight":1}},{"id":297,"inV":161,"properties":{"weight":1}},{"id":298,"inV":162,"properties":{"weight":1}},{"id":299,"inV":124,"properties":{"weight":3}},{"id":300,"inV":38,"properties":{"weight":1}},{"id":301,"inV":29,"properties":{"weight":11}},{"id":302,"inV":163,"properties":{"weight":1}},{"id":303,"inV":94,"properties":{"weight":5}},{"id":304,"inV":85,"properties":{"weight":1}},{"id":305,"inV":164,"properties":{"weight":6}},{"id":306,"inV":64,"properties":{"weight":1}},{"id":307,"inV":150,"properties":{"weight":1}},{"id":308,"inV":165,"properties":{"weight":7}},{"id":309,"in
 V":92,"properties":{"weight":1}},{"id":310,"inV":140,"properties":{"weight":1}},{"id":311,"inV":166,"properties":{"weight":1}}],"sungBy":[{"id":7582,"inV":340}],"writtenBy":[{"id":7581,"inV":446}]},"properties":{"name":[{"id":12,"value":"GOING DOWN THE ROAD FEELING BAD"}],"songType":[{"id":14,"value":"cover"}],"performances":[{"id":13,"value":293}]}}
+{"id":3,"label":"song","inE":{"followedBy":[{"id":1,"outV":1,"properties":{"weight":2}},{"id":2051,"outV":92,"properties":{"weight":4}},{"id":1412,"outV":83,"properties":{"weight":6}},{"id":6669,"outV":12,"properties":{"weight":1}},{"id":526,"outV":120,"properties":{"weight":2}},{"id":910,"outV":91,"properties":{"weight":3}},{"id":1166,"outV":26,"properties":{"weight":4}},{"id":6286,"outV":49,"properties":{"weight":1}},{"id":273,"outV":5,"properties":{"weight":40}},{"id":2194,"outV":235,"properties":{"weight":1}},{"id":1684,"outV":124,"properties":{"weight":1}},{"id":1941,"outV":148,"properties":{"weight":4}},{"id":3221,"outV":63,"properties":{"weight":1}},{"id":2712,"outV":13,"properties":{"weight":3}},{"id":6425,"outV":134,"properties":{"weight":2}},{"id":5787,"outV":76,"properties":{"weight":2}},{"id":5148,"outV":125,"properties":{"weight":4}},{"id":6692,"outV":141,"properties":{"weight":2}},{"id":6310,"outV":123,"properties":{"weight":1}},{"id":6448,"outV":187,"properties":{"wei
 ght":3}},{"id":2225,"outV":226,"properties":{"weight":1}},{"id":5042,"outV":209,"properties":{"weight":1}},{"id":4789,"outV":114,"properties":{"weight":2}},{"id":1464,"outV":81,"properties":{"weight":1}},{"id":2232,"outV":215,"properties":{"weight":1}},{"id":4665,"outV":154,"properties":{"weight":1}},{"id":2235,"outV":29,"properties":{"weight":163}},{"id":6208,"outV":319,"properties":{"weight":4}},{"id":706,"outV":206,"properties":{"weight":2}},{"id":835,"outV":171,"properties":{"weight":1}},{"id":5188,"outV":99,"properties":{"weight":1}},{"id":1862,"outV":94,"properties":{"weight":10}},{"id":1735,"outV":82,"properties":{"weight":1}},{"id":6343,"outV":21,"properties":{"weight":1}},{"id":4937,"outV":277,"properties":{"weight":1}},{"id":3276,"outV":160,"properties":{"weight":1}},{"id":3149,"outV":104,"properties":{"weight":1}},{"id":1358,"outV":130,"properties":{"weight":18}},{"id":4304,"outV":110,"properties":{"weight":1}},{"id":1105,"outV":59,"properties":{"weight":1}},{"id":722,"ou
 tV":80,"properties":{"weight":1}},{"id":4182,"outV":54,"properties":{"weight":1}},{"id":1499,"outV":164,"properties":{"weight":2}},{"id":2397,"outV":179,"properties":{"weight":1}},{"id":351,"outV":178,"properties":{"weight":1}},{"id":6623,"outV":127,"properties":{"weight":3}},{"id":2018,"outV":149,"properties":{"weight":1}},{"id":7011,"outV":89,"properties":{"weight":2}},{"id":5348,"outV":165,"properties":{"weight":1}},{"id":2278,"outV":25,"properties":{"weight":7}},{"id":1255,"outV":27,"properties":{"weight":2}},{"id":3048,"outV":153,"properties":{"weight":13}},{"id":5867,"outV":96,"properties":{"weight":116}},{"id":364,"outV":74,"properties":{"weight":2}},{"id":492,"outV":98,"properties":{"weight":1}},{"id":3948,"outV":138,"properties":{"weight":4}},{"id":4335,"outV":62,"properties":{"weight":1}},{"id":3312,"outV":252,"properties":{"weight":1}},{"id":5745,"outV":129,"properties":{"weight":1}},{"id":4596,"outV":85,"properties":{"weight":3}},{"id":5367,"outV":132,"properties":{"weig
 ht":1}},{"id":633,"outV":23,"properties":{"weight":1}},{"id":891,"outV":140,"properties":{"weight":2}},{"id":5375,"outV":69,"properties":{"weight":1}},{"id":6143,"outV":289,"properties":{"weight":3}}]},"outE":{"followedBy":[{"id":3712,"inV":27,"properties":{"weight":1}},{"id":3713,"inV":110,"properties":{"weight":4}},{"id":3714,"inV":215,"properties":{"weight":4}},{"id":3715,"inV":127,"properties":{"weight":10}},{"id":3716,"inV":83,"properties":{"weight":3}},{"id":3717,"inV":103,"properties":{"weight":2}},{"id":3718,"inV":68,"properties":{"weight":1}},{"id":3719,"inV":134,"properties":{"weight":2}},{"id":3720,"inV":25,"properties":{"weight":10}},{"id":3721,"inV":125,"properties":{"weight":54}},{"id":3722,"inV":130,"properties":{"weight":26}},{"id":3723,"inV":141,"properties":{"weight":2}},{"id":3724,"inV":145,"properties":{"weight":1}},{"id":3725,"inV":319,"properties":{"weight":3}},{"id":3726,"inV":12,"properties":{"weight":1}},{"id":3727,"inV":160,"properties":{"weight":37}},{"id"
 :3728,"inV":70,"properties":{"weight":2}},{"id":3729,"inV":123,"properties":{"weight":1}},{"id":3730,"inV":129,"properties":{"weight":1}},{"id":3731,"inV":30,"properties":{"weight":2}},{"id":3732,"inV":148,"properties":{"weight":1}},{"id":3733,"inV":211,"properties":{"weight":3}},{"id":3734,"inV":87,"properties":{"weight":13}},{"id":3735,"inV":164,"properties":{"weight":4}},{"id":3736,"inV":64,"properties":{"weight":2}},{"id":3737,"inV":320,"properties":{"weight":1}},{"id":3738,"inV":61,"properties":{"weight":3}},{"id":3739,"inV":210,"properties":{"weight":3}},{"id":3740,"inV":50,"properties":{"weight":7}},{"id":3741,"inV":128,"properties":{"weight":3}},{"id":3742,"inV":315,"properties":{"weight":1}},{"id":3743,"inV":261,"properties":{"weight":1}},{"id":3744,"inV":213,"properties":{"weight":13}},{"id":3745,"inV":72,"properties":{"weight":1}},{"id":3746,"inV":38,"properties":{"weight":4}},{"id":3747,"inV":204,"properties":{"weight":14}},{"id":3748,"inV":62,"properties":{"weight":2}},
 {"id":3749,"inV":150,"properties":{"weight":8}},{"id":3750,"inV":309,"properties":{"weight":1}},{"id":3751,"inV":131,"properties":{"weight":1}},{"id":3752,"inV":151,"properties":{"weight":1}},{"id":3753,"inV":321,"properties":{"weight":1}},{"id":3754,"inV":90,"properties":{"weight":2}},{"id":3755,"inV":82,"properties":{"weight":1}},{"id":3756,"inV":120,"properties":{"weight":1}},{"id":3757,"inV":46,"properties":{"weight":5}},{"id":3758,"inV":157,"properties":{"weight":5}},{"id":3759,"inV":59,"properties":{"weight":1}},{"id":3760,"inV":81,"properties":{"weight":1}},{"id":3761,"inV":86,"properties":{"weight":5}},{"id":3762,"inV":140,"properties":{"weight":1}},{"id":3763,"inV":201,"properties":{"weight":1}},{"id":3764,"inV":214,"properties":{"weight":1}},{"id":3765,"inV":185,"properties":{"weight":2}},{"id":3766,"inV":216,"properties":{"weight":1}},{"id":3767,"inV":217,"properties":{"weight":2}},{"id":3768,"inV":236,"properties":{"weight":5}},{"id":3769,"inV":193,"properties":{"weight"
 :1}},{"id":3770,"inV":79,"properties":{"weight":2}},{"id":3771,"inV":84,"properties":{"weight":1}},{"id":3772,"inV":23,"properties":{"weight":2}},{"id":3773,"inV":31,"properties":{"weight":2}},{"id":3774,"inV":240,"properties":{"weight":1}},{"id":3775,"inV":292,"properties":{"weight":1}},{"id":3776,"inV":9,"properties":{"weight":1}},{"id":3777,"inV":259,"properties":{"weight":1}},{"id":3694,"inV":5,"properties":{"weight":57}},{"id":3695,"inV":114,"properties":{"weight":30}},{"id":3696,"inV":74,"properties":{"weight":2}},{"id":3697,"inV":78,"properties":{"weight":3}},{"id":3698,"inV":10,"properties":{"weight":1}},{"id":3699,"inV":26,"properties":{"weight":4}},{"id":3700,"inV":153,"properties":{"weight":7}},{"id":3701,"inV":4,"properties":{"weight":4}},{"id":3702,"inV":317,"properties":{"weight":1}},{"id":3703,"inV":13,"properties":{"weight":5}},{"id":3704,"inV":1,"properties":{"weight":2}},{"id":3705,"inV":21,"properties":{"weight":2}},{"id":3706,"inV":57,"properties":{"weight":2}},{
 "id":3707,"inV":122,"properties":{"weight":2}},{"id":3708,"inV":318,"properties":{"weight":1}},{"id":3709,"inV":94,"properties":{"weight":26}},{"id":3710,"inV":96,"properties":{"weight":7}},{"id":3711,"inV":124,"properties":{"weight":15}}],"sungBy":[{"id":7808,"inV":351}],"writtenBy":[{"id":7807,"inV":671}]},"properties":{"name":[{"id":6,"value":"NOT FADE AWAY"}],"songType":[{"id":8,"value":"cover"}],"performances":[{"id":7,"value":531}]}}
+{"id":4,"label":"song","inE":{"followedBy":[{"id":128,"outV":97,"properties":{"weight":1}},{"id":1664,"outV":267,"properties":{"weight":1}},{"id":2,"outV":1,"properties":{"weight":1}},{"id":899,"outV":140,"properties":{"weight":1}},{"id":1667,"outV":124,"properties":{"weight":15}},{"id":4099,"outV":48,"properties":{"weight":1}},{"id":1156,"outV":26,"properties":{"weight":16}},{"id":773,"outV":122,"properties":{"weight":9}},{"id":6534,"outV":242,"properties":{"weight":1}},{"id":1032,"outV":73,"properties":{"weight":1}},{"id":6664,"outV":12,"properties":{"weight":3}},{"id":5129,"outV":222,"properties":{"weight":1}},{"id":5387,"outV":69,"properties":{"weight":1}},{"id":5517,"outV":43,"properties":{"weight":2}},{"id":5006,"outV":30,"properties":{"weight":2}},{"id":6030,"outV":204,"properties":{"weight":2}},{"id":2063,"outV":92,"properties":{"weight":1}},{"id":915,"outV":91,"properties":{"weight":2}},{"id":6940,"outV":84,"properties":{"weight":5}},{"id":2464,"outV":68,"properties":{"weig
 ht":1}},{"id":5795,"outV":76,"properties":{"weight":2}},{"id":3620,"outV":24,"properties":{"weight":2}},{"id":4772,"outV":114,"properties":{"weight":25}},{"id":2982,"outV":14,"properties":{"weight":3}},{"id":3367,"outV":184,"properties":{"weight":6}},{"id":2345,"outV":87,"properties":{"weight":2}},{"id":2861,"outV":101,"properties":{"weight":6}},{"id":1840,"outV":275,"properties":{"weight":1}},{"id":5425,"outV":102,"properties":{"weight":1}},{"id":180,"outV":70,"properties":{"weight":46}},{"id":2613,"outV":158,"properties":{"weight":1}},{"id":5434,"outV":217,"properties":{"weight":1}},{"id":5562,"outV":162,"properties":{"weight":2}},{"id":1469,"outV":81,"properties":{"weight":1}},{"id":446,"outV":38,"properties":{"weight":7}},{"id":2494,"outV":90,"properties":{"weight":3}},{"id":3266,"outV":160,"properties":{"weight":10}},{"id":326,"outV":34,"properties":{"weight":1}},{"id":583,"outV":120,"properties":{"weight":2}},{"id":6855,"outV":64,"properties":{"weight":12}},{"id":73,"outV":46,
 "properties":{"weight":4}},{"id":4425,"outV":212,"properties":{"weight":1}},{"id":1613,"outV":210,"properties":{"weight":2}},{"id":4941,"outV":86,"properties":{"weight":2}},{"id":6350,"outV":21,"properties":{"weight":1}},{"id":3535,"outV":201,"properties":{"weight":1}},{"id":980,"outV":11,"properties":{"weight":3}},{"id":1494,"outV":164,"properties":{"weight":3}},{"id":5206,"outV":99,"properties":{"weight":1}},{"id":5847,"outV":61,"properties":{"weight":2}},{"id":6490,"outV":187,"properties":{"weight":1}},{"id":2781,"outV":15,"properties":{"weight":4}},{"id":5600,"outV":42,"properties":{"weight":1}},{"id":353,"outV":74,"properties":{"weight":6}},{"id":5474,"outV":79,"properties":{"weight":1}},{"id":1891,"outV":103,"properties":{"weight":19}},{"id":3811,"outV":88,"properties":{"weight":2}},{"id":5989,"outV":50,"properties":{"weight":12}},{"id":4327,"outV":110,"properties":{"weight":2}},{"id":2538,"outV":57,"properties":{"weight":4}},{"id":3050,"outV":153,"properties":{"weight":13}},{
 "id":4970,"outV":236,"properties":{"weight":1}},{"id":2283,"outV":25,"properties":{"weight":9}},{"id":236,"outV":145,"properties":{"weight":1}},{"id":6126,"outV":72,"properties":{"weight":2}},{"id":5232,"outV":214,"properties":{"weight":2}},{"id":4594,"outV":85,"properties":{"weight":1}},{"id":1652,"outV":213,"properties":{"weight":3}},{"id":4084,"outV":109,"properties":{"weight":1}},{"id":629,"outV":23,"properties":{"weight":10}},{"id":3701,"outV":3,"properties":{"weight":4}},{"id":5621,"outV":22,"properties":{"weight":1}},{"id":7029,"outV":89,"properties":{"weight":1}},{"id":5238,"outV":32,"properties":{"weight":3}},{"id":2684,"outV":13,"properties":{"weight":9}},{"id":3325,"outV":268,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":5120,"inV":40,"properties":{"weight":5}},{"id":5121,"inV":33,"properties":{"weight":3}},{"id":5122,"inV":79,"properties":{"weight":1}},{"id":5123,"inV":292,"properties":{"weight":1}},{"id":5071,"inV":50,"properties":{"weight":9}},{"id":5072,"in
 V":12,"properties":{"weight":26}},{"id":5073,"inV":18,"properties":{"weight":4}},{"id":5074,"inV":24,"properties":{"weight":9}},{"id":5075,"inV":23,"properties":{"weight":63}},{"id":5076,"inV":13,"properties":{"weight":12}},{"id":5077,"inV":10,"properties":{"weight":4}},{"id":5078,"inV":11,"properties":{"weight":3}},{"id":5079,"inV":26,"properties":{"weight":18}},{"id":5080,"inV":22,"properties":{"weight":1}},{"id":5081,"inV":16,"properties":{"weight":2}},{"id":5082,"inV":49,"properties":{"weight":1}},{"id":5083,"inV":25,"properties":{"weight":2}},{"id":5084,"inV":51,"properties":{"weight":1}},{"id":5085,"inV":15,"properties":{"weight":1}},{"id":5086,"inV":112,"properties":{"weight":4}},{"id":5087,"inV":121,"properties":{"weight":1}},{"id":5088,"inV":32,"properties":{"weight":7}},{"id":5089,"inV":68,"properties":{"weight":2}},{"id":5090,"inV":120,"properties":{"weight":77}},{"id":5091,"inV":103,"properties":{"weight":1}},{"id":5092,"inV":42,"properties":{"weight":3}},{"id":5093,"inV
 ":85,"properties":{"weight":4}},{"id":5094,"inV":76,"properties":{"weight":5}},{"id":5095,"inV":181,"properties":{"weight":2}},{"id":5096,"inV":14,"properties":{"weight":2}},{"id":5097,"inV":122,"properties":{"weight":1}},{"id":5098,"inV":153,"properties":{"weight":3}},{"id":5099,"inV":96,"properties":{"weight":1}},{"id":5100,"inV":82,"properties":{"weight":3}},{"id":5101,"inV":110,"properties":{"weight":1}},{"id":5102,"inV":19,"properties":{"weight":6}},{"id":5103,"inV":129,"properties":{"weight":1}},{"id":5104,"inV":84,"properties":{"weight":1}},{"id":5105,"inV":88,"properties":{"weight":9}},{"id":5106,"inV":97,"properties":{"weight":1}},{"id":5107,"inV":114,"properties":{"weight":2}},{"id":5108,"inV":30,"properties":{"weight":8}},{"id":5109,"inV":31,"properties":{"weight":8}},{"id":5110,"inV":69,"properties":{"weight":4}},{"id":5111,"inV":127,"properties":{"weight":2}},{"id":5112,"inV":60,"properties":{"weight":1}},{"id":5113,"inV":39,"properties":{"weight":2}},{"id":5114,"inV":2
 1,"properties":{"weight":1}},{"id":5115,"inV":117,"properties":{"weight":1}},{"id":5116,"inV":78,"properties":{"weight":1}},{"id":5117,"inV":38,"properties":{"weight":1}},{"id":5118,"inV":169,"properties":{"weight":2}},{"id":5119,"inV":118,"properties":{"weight":1}}],"sungBy":[{"id":7064,"inV":340}],"writtenBy":[{"id":7063,"inV":339}]},"properties":{"name":[{"id":9,"value":"BERTHA"}],"songType":[{"id":11,"value":"original"}],"performances":[{"id":10,"value":394}]}}
+{"id":5,"label":"song","inE":{"followedBy":[{"id":194,"outV":70,"properties":{"weight":8}},{"id":962,"outV":67,"properties":{"weight":5}},{"id":3,"outV":1,"properties":{"weight":1}},{"id":5446,"outV":231,"properties":{"weight":5}},{"id":6344,"outV":21,"properties":{"weight":6}},{"id":1738,"outV":82,"properties":{"weight":1}},{"id":6666,"outV":12,"properties":{"weight":1}},{"id":1867,"outV":94,"properties":{"weight":15}},{"id":4300,"outV":110,"properties":{"weight":1}},{"id":847,"outV":171,"properties":{"weight":1}},{"id":2832,"outV":101,"properties":{"weight":3}},{"id":6032,"outV":115,"properties":{"weight":1}},{"id":1170,"outV":26,"properties":{"weight":1}},{"id":5330,"outV":238,"properties":{"weight":1}},{"id":1491,"outV":164,"properties":{"weight":3}},{"id":1429,"outV":83,"properties":{"weight":3}},{"id":3033,"outV":14,"properties":{"weight":1}},{"id":6298,"outV":49,"properties":{"weight":1}},{"id":1373,"outV":130,"properties":{"weight":11}},{"id":4447,"outV":113,"properties":{"w
 eight":1}},{"id":5151,"outV":125,"properties":{"weight":6}},{"id":5343,"outV":165,"properties":{"weight":2}},{"id":6431,"outV":134,"properties":{"weight":2}},{"id":1953,"outV":148,"properties":{"weight":10}},{"id":1634,"outV":210,"properties":{"weight":1}},{"id":2274,"outV":25,"properties":{"weight":8}},{"id":100,"outV":46,"properties":{"weight":1}},{"id":933,"outV":91,"properties":{"weight":1}},{"id":2021,"outV":149,"properties":{"weight":1}},{"id":6694,"outV":141,"properties":{"weight":2}},{"id":4009,"outV":225,"properties":{"weight":1}},{"id":682,"outV":219,"properties":{"weight":1}},{"id":3694,"outV":3,"properties":{"weight":57}},{"id":4718,"outV":186,"properties":{"weight":6}},{"id":3055,"outV":153,"properties":{"weight":9}},{"id":2480,"outV":68,"properties":{"weight":1}},{"id":2736,"outV":13,"properties":{"weight":3}},{"id":5426,"outV":102,"properties":{"weight":1}},{"id":6899,"outV":147,"properties":{"weight":1}},{"id":5879,"outV":96,"properties":{"weight":22}},{"id":6201,"ou
 tV":319,"properties":{"weight":2}},{"id":5370,"outV":132,"properties":{"weight":2}},{"id":700,"outV":206,"properties":{"weight":1}},{"id":2236,"outV":29,"properties":{"weight":5}},{"id":4604,"outV":85,"properties":{"weight":2}},{"id":5759,"outV":129,"properties":{"weight":6}}]},"outE":{"followedBy":[{"id":273,"inV":3,"properties":{"weight":40}},{"id":274,"inV":26,"properties":{"weight":3}},{"id":275,"inV":114,"properties":{"weight":40}},{"id":276,"inV":1,"properties":{"weight":2}},{"id":277,"inV":74,"properties":{"weight":3}},{"id":278,"inV":122,"properties":{"weight":3}},{"id":279,"inV":133,"properties":{"weight":2}},{"id":280,"inV":83,"properties":{"weight":1}},{"id":281,"inV":153,"properties":{"weight":5}},{"id":282,"inV":159,"properties":{"weight":1}},{"id":283,"inV":13,"properties":{"weight":3}},{"id":284,"inV":25,"properties":{"weight":19}},{"id":285,"inV":96,"properties":{"weight":10}},{"id":286,"inV":160,"properties":{"weight":2}},{"id":287,"inV":32,"properties":{"weight":1}
 },{"id":288,"inV":120,"properties":{"weight":16}},{"id":289,"inV":50,"properties":{"weight":1}},{"id":290,"inV":116,"properties":{"weight":1}},{"id":291,"inV":127,"properties":{"weight":6}},{"id":292,"inV":65,"properties":{"weight":1}},{"id":293,"inV":130,"properties":{"weight":3}},{"id":294,"inV":125,"properties":{"weight":5}},{"id":295,"inV":70,"properties":{"weight":13}},{"id":296,"inV":134,"properties":{"weight":1}},{"id":297,"inV":161,"properties":{"weight":1}},{"id":298,"inV":162,"properties":{"weight":1}},{"id":299,"inV":124,"properties":{"weight":3}},{"id":300,"inV":38,"properties":{"weight":1}},{"id":301,"inV":29,"properties":{"weight":11}},{"id":302,"inV":163,"properties":{"weight":1}},{"id":303,"inV":94,"properties":{"weight":5}},{"id":304,"inV":85,"properties":{"weight":1}},{"id":305,"inV":164,"properties":{"weight":6}},{"id":306,"inV":64,"properties":{"weight":1}},{"id":307,"inV":150,"properties":{"weight":1}},{"id":308,"inV":165,"properties":{"weight":7}},{"id":309,"in
 V":92,"properties":{"weight":1}},{"id":310,"inV":140,"properties":{"weight":1}},{"id":311,"inV":166,"properties":{"weight":1}}],"sungBy":[{"id":7582,"inV":340}],"writtenBy":[{"id":7581,"inV":446}]},"properties":{"name":[{"id":12,"value":"GOING DOWN THE ROAD FEELING BAD"}],"songType":[{"id":14,"value":"cover"}],"performances":[{"id":13,"value":293}]}}
 {"id":6,"label":"song","inE":{"followedBy":[{"id":4,"outV":1,"properties":{"weight":1}},{"id":2023,"outV":282,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":2406,"inV":293,"properties":{"weight":1}},{"id":2407,"inV":96,"properties":{"weight":1}}],"sungBy":[{"id":7782,"inV":351}],"writtenBy":[{"id":7781,"inV":527}]},"properties":{"name":[{"id":15,"value":"MONA"}],"songType":[{"id":17,"value":"cover"}],"performances":[{"id":16,"value":1}]}}
 {"id":7,"label":"song","inE":{"followedBy":[{"id":2607,"outV":295,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":5,"inV":8,"properties":{"weight":1}}]},"properties":{"name":[{"id":18,"value":"WHERE HAVE THE HEROES GONE"}],"songType":[{"id":20,"value":""}],"performances":[{"id":19,"value":0}]}}
 {"id":8,"label":"song","inE":{"followedBy":[{"id":4705,"outV":111,"properties":{"weight":1}},{"id":5,"outV":7,"properties":{"weight":1}},{"id":5901,"outV":96,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":2976,"inV":302,"properties":{"weight":1}},{"id":2977,"inV":96,"properties":{"weight":1}},{"id":2978,"inV":72,"properties":{"weight":1}}],"sungBy":[{"id":7814,"inV":351}],"writtenBy":[{"id":7813,"inV":674}]},"properties":{"name":[{"id":21,"value":"OH BOY"}],"songType":[{"id":23,"value":"cover"}],"performances":[{"id":22,"value":2}]}}
-{"id":9,"label":"song","inE":{"followedBy":[{"id":3776,"outV":3,"properties":{"weight":1}},{"id":65,"outV":46,"properties":{"weight":2}},{"id":1923,"outV":103,"properties":{"weight":3}},{"id":5956,"outV":50,"properties":{"weight":2}},{"id":3077,"outV":153,"properties":{"weight":2}},{"id":5832,"outV":76,"properties":{"weight":1}},{"id":1161,"outV":26,"properties":{"weight":8}},{"id":6667,"outV":12,"properties":{"weight":2}},{"id":2699,"outV":13,"properties":{"weight":3}},{"id":6539,"outV":55,"properties":{"weight":1}},{"id":2578,"outV":57,"properties":{"weight":2}},{"id":787,"outV":122,"properties":{"weight":3}},{"id":3542,"outV":201,"properties":{"weight":1}},{"id":2775,"outV":15,"properties":{"weight":5}},{"id":2840,"outV":101,"properties":{"weight":2}},{"id":4953,"outV":86,"properties":{"weight":2}},{"id":1572,"outV":18,"properties":{"weight":3}},{"id":229,"outV":70,"properties":{"weight":1}},{"id":4264,"outV":10,"properties":{"weight":1}},{"id":4969,"outV":236,"properties":{"weig
 ht":3}},{"id":3498,"outV":58,"properties":{"weight":2}},{"id":5226,"outV":216,"properties":{"weight":1}},{"id":5548,"outV":166,"properties":{"weight":1}},{"id":2990,"outV":14,"properties":{"weight":4}},{"id":3950,"outV":138,"properties":{"weight":1}},{"id":6776,"outV":39,"properties":{"weight":1}},{"id":2488,"outV":68,"properties":{"weight":1}},{"id":3641,"outV":24,"properties":{"weight":2}},{"id":1532,"outV":164,"properties":{"weight":2}},{"id":1853,"outV":94,"properties":{"weight":1}},{"id":638,"outV":23,"properties":{"weight":2}},{"id":6335,"outV":21,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":6,"inV":10,"properties":{"weight":3}},{"id":7,"inV":11,"properties":{"weight":2}},{"id":8,"inV":12,"properties":{"weight":3}},{"id":9,"inV":13,"properties":{"weight":6}},{"id":10,"inV":14,"properties":{"weight":3}},{"id":11,"inV":15,"properties":{"weight":3}},{"id":12,"inV":16,"properties":{"weight":1}},{"id":13,"inV":17,"properties":{"weight":1}},{"id":14,"inV":18,"properties"
 :{"weight":5}},{"id":15,"inV":19,"properties":{"weight":1}},{"id":16,"inV":20,"properties":{"weight":1}},{"id":17,"inV":21,"properties":{"weight":1}},{"id":18,"inV":22,"properties":{"weight":2}},{"id":19,"inV":23,"properties":{"weight":2}},{"id":20,"inV":24,"properties":{"weight":1}},{"id":21,"inV":25,"properties":{"weight":1}},{"id":22,"inV":26,"properties":{"weight":1}},{"id":23,"inV":27,"properties":{"weight":1}},{"id":24,"inV":28,"properties":{"weight":2}},{"id":25,"inV":29,"properties":{"weight":1}},{"id":26,"inV":30,"properties":{"weight":5}},{"id":27,"inV":31,"properties":{"weight":2}},{"id":28,"inV":32,"properties":{"weight":1}},{"id":29,"inV":33,"properties":{"weight":2}},{"id":30,"inV":34,"properties":{"weight":2}},{"id":31,"inV":35,"properties":{"weight":3}},{"id":32,"inV":36,"properties":{"weight":2}},{"id":33,"inV":37,"properties":{"weight":3}},{"id":34,"inV":38,"properties":{"weight":1}},{"id":35,"inV":39,"properties":{"weight":1}},{"id":36,"inV":40,"properties":{"weig
 ht":1}},{"id":37,"inV":41,"properties":{"weight":1}},{"id":38,"inV":42,"properties":{"weight":1}},{"id":39,"inV":43,"properties":{"weight":1}}],"sungBy":[{"id":7190,"inV":340}],"writtenBy":[{"id":7189,"inV":339}]},"properties":{"name":[{"id":24,"value":"HERE COMES SUNSHINE"}],"songType":[{"id":26,"value":"original"}],"performances":[{"id":25,"value":65}]}}
-{"id":10,"label":"song","inE":{"followedBy":[{"id":3841,"outV":60,"properties":{"weight":1}},{"id":1027,"outV":73,"properties":{"weight":5}},{"id":6,"outV":9,"properties":{"weight":3}},{"id":4103,"outV":48,"properties":{"weight":5}},{"id":6279,"outV":49,"properties":{"weight":1}},{"id":3335,"outV":155,"properties":{"weight":1}},{"id":4233,"outV":52,"properties":{"weight":1}},{"id":4878,"outV":100,"properties":{"weight":19}},{"id":5264,"outV":32,"properties":{"weight":2}},{"id":2196,"outV":75,"properties":{"weight":4}},{"id":151,"outV":108,"properties":{"weight":3}},{"id":1571,"outV":18,"properties":{"weight":5}},{"id":3619,"outV":24,"properties":{"weight":2}},{"id":3237,"outV":63,"properties":{"weight":3}},{"id":4647,"outV":154,"properties":{"weight":1}},{"id":4521,"outV":105,"properties":{"weight":3}},{"id":1195,"outV":26,"properties":{"weight":1}},{"id":6956,"outV":84,"properties":{"weight":1}},{"id":6444,"outV":187,"properties":{"weight":9}},{"id":687,"outV":157,"properties":{"we
 ight":1}},{"id":4784,"outV":114,"properties":{"weight":1}},{"id":6064,"outV":115,"properties":{"weight":1}},{"id":3890,"outV":51,"properties":{"weight":9}},{"id":1714,"outV":82,"properties":{"weight":3}},{"id":55,"outV":46,"properties":{"weight":1}},{"id":5175,"outV":71,"properties":{"weight":1}},{"id":1337,"outV":31,"properties":{"weight":1}},{"id":4155,"outV":54,"properties":{"weight":6}},{"id":1083,"outV":59,"properties":{"weight":10}},{"id":6077,"outV":72,"properties":{"weight":5}},{"id":5441,"outV":239,"properties":{"weight":1}},{"id":1987,"outV":152,"properties":{"weight":2}},{"id":2116,"outV":17,"properties":{"weight":7}},{"id":1860,"outV":94,"properties":{"weight":1}},{"id":3269,"outV":160,"properties":{"weight":2}},{"id":454,"outV":38,"properties":{"weight":1}},{"id":3142,"outV":104,"properties":{"weight":4}},{"id":2505,"outV":57,"properties":{"weight":12}},{"id":6859,"outV":64,"properties":{"weight":1}},{"id":6603,"outV":127,"properties":{"weight":4}},{"id":717,"outV":80,"
 properties":{"weight":9}},{"id":1360,"outV":130,"properties":{"weight":2}},{"id":3026,"outV":14,"properties":{"weight":1}},{"id":5972,"outV":50,"properties":{"weight":1}},{"id":5077,"outV":4,"properties":{"weight":4}},{"id":2392,"outV":87,"properties":{"weight":1}},{"id":1250,"outV":27,"properties":{"weight":10}},{"id":4706,"outV":111,"properties":{"weight":3}},{"id":6755,"outV":53,"properties":{"weight":1}},{"id":2917,"outV":78,"properties":{"weight":10}},{"id":485,"outV":98,"properties":{"weight":4}},{"id":3559,"outV":56,"properties":{"weight":16}},{"id":3436,"outV":58,"properties":{"weight":10}},{"id":3820,"outV":88,"properties":{"weight":1}},{"id":4463,"outV":202,"properties":{"weight":4}},{"id":6256,"outV":117,"properties":{"weight":1}},{"id":880,"outV":189,"properties":{"weight":1}},{"id":3698,"outV":3,"properties":{"weight":1}},{"id":2291,"outV":25,"properties":{"weight":1}},{"id":2035,"outV":180,"properties":{"weight":1}},{"id":3317,"outV":252,"properties":{"weight":1}},{"id
 ":2806,"outV":15,"properties":{"weight":2}},{"id":2427,"outV":68,"properties":{"weight":2}},{"id":6782,"outV":39,"properties":{"weight":4}},{"id":4351,"outV":62,"properties":{"weight":2}}]},"outE":{"followedBy":[{"id":4235,"inV":56,"properties":{"weight":13}},{"id":4236,"inV":27,"properties":{"weight":7}},{"id":4237,"inV":58,"properties":{"weight":11}},{"id":4238,"inV":80,"properties":{"weight":6}},{"id":4239,"inV":59,"properties":{"weight":9}},{"id":4240,"inV":100,"properties":{"weight":21}},{"id":4241,"inV":104,"properties":{"weight":5}},{"id":4242,"inV":50,"properties":{"weight":2}},{"id":4243,"inV":48,"properties":{"weight":8}},{"id":4244,"inV":54,"properties":{"weight":13}},{"id":4245,"inV":19,"properties":{"weight":9}},{"id":4246,"inV":72,"properties":{"weight":4}},{"id":4247,"inV":14,"properties":{"weight":1}},{"id":4248,"inV":122,"properties":{"weight":2}},{"id":4249,"inV":235,"properties":{"weight":1}},{"id":4250,"inV":218,"properties":{"weight":1}},{"id":4251,"inV":252,"pr
 operties":{"weight":1}},{"id":4252,"inV":89,"properties":{"weight":3}},{"id":4253,"inV":57,"properties":{"weight":12}},{"id":4254,"inV":49,"properties":{"weight":3}},{"id":4255,"inV":94,"properties":{"weight":3}},{"id":4256,"inV":153,"properties":{"weight":1}},{"id":4257,"inV":13,"properties":{"weight":1}},{"id":4258,"inV":160,"properties":{"weight":1}},{"id":4259,"inV":51,"properties":{"weight":10}},{"id":4260,"inV":18,"properties":{"weight":3}},{"id":4261,"inV":202,"properties":{"weight":4}},{"id":4262,"inV":17,"properties":{"weight":5}},{"id":4263,"inV":46,"properties":{"weight":1}},{"id":4264,"inV":9,"properties":{"weight":1}},{"id":4265,"inV":55,"properties":{"weight":1}},{"id":4266,"inV":125,"properties":{"weight":1}},{"id":4267,"inV":69,"properties":{"weight":2}},{"id":4268,"inV":98,"properties":{"weight":8}},{"id":4269,"inV":82,"properties":{"weight":4}},{"id":4270,"inV":154,"properties":{"weight":1}},{"id":4271,"inV":105,"properties":{"weight":7}},{"id":4272,"inV":112,"prop
 erties":{"weight":2}},{"id":4273,"inV":109,"properties":{"weight":1}},{"id":4274,"inV":42,"properties":{"weight":2}},{"id":4275,"inV":121,"properties":{"weight":1}},{"id":4276,"inV":73,"properties":{"weight":5}},{"id":4277,"inV":106,"properties":{"weight":1}},{"id":4278,"inV":116,"properties":{"weight":1}},{"id":4279,"inV":68,"properties":{"weight":2}},{"id":4280,"inV":152,"properties":{"weight":1}},{"id":4281,"inV":23,"properties":{"weight":6}},{"id":4282,"inV":88,"properties":{"weight":1}},{"id":4283,"inV":39,"properties":{"weight":4}},{"id":4284,"inV":12,"properties":{"weight":1}},{"id":4285,"inV":111,"properties":{"weight":1}},{"id":4286,"inV":99,"properties":{"weight":1}},{"id":4287,"inV":87,"properties":{"weight":2}},{"id":4288,"inV":108,"properties":{"weight":2}},{"id":4289,"inV":53,"properties":{"weight":4}},{"id":4290,"inV":26,"properties":{"weight":5}},{"id":4291,"inV":117,"properties":{"weight":2}},{"id":4292,"inV":115,"properties":{"weight":2}},{"id":4293,"inV":63,"prope
 rties":{"weight":3}},{"id":4294,"inV":103,"properties":{"weight":1}}],"sungBy":[{"id":7460,"inV":351}],"writtenBy":[{"id":7459,"inV":471}]},"properties":{"name":[{"id":27,"value":"BEAT IT ON DOWN THE LINE"}],"songType":[{"id":29,"value":"cover"}],"performances":[{"id":28,"value":325}]}}
-{"id":11,"label":"song","inE":{"followedBy":[{"id":1088,"outV":59,"properties":{"weight":14}},{"id":6273,"outV":49,"properties":{"weight":2}},{"id":1989,"outV":152,"properties":{"weight":2}},{"id":7,"outV":9,"properties":{"weight":2}},{"id":4552,"outV":105,"properties":{"weight":3}},{"id":521,"outV":205,"properties":{"weight":1}},{"id":714,"outV":80,"properties":{"weight":5}},{"id":3146,"outV":104,"properties":{"weight":3}},{"id":4876,"outV":100,"properties":{"weight":2}},{"id":2190,"outV":235,"properties":{"weight":1}},{"id":4496,"outV":202,"properties":{"weight":1}},{"id":2513,"outV":57,"properties":{"weight":4}},{"id":4053,"outV":173,"properties":{"weight":1}},{"id":5078,"outV":4,"properties":{"weight":3}},{"id":1309,"outV":27,"properties":{"weight":5}},{"id":5025,"outV":30,"properties":{"weight":1}},{"id":4769,"outV":114,"properties":{"weight":1}},{"id":3554,"outV":56,"properties":{"weight":7}},{"id":1064,"outV":73,"properties":{"weight":1}},{"id":2920,"outV":78,"properties":{"w
 eight":2}},{"id":6056,"outV":115,"properties":{"weight":2}},{"id":41,"outV":46,"properties":{"weight":2}},{"id":3434,"outV":58,"properties":{"weight":5}},{"id":6442,"outV":187,"properties":{"weight":7}},{"id":1775,"outV":234,"properties":{"weight":4}},{"id":3888,"outV":51,"properties":{"weight":1}},{"id":626,"outV":23,"properties":{"weight":1}},{"id":6772,"outV":39,"properties":{"weight":1}},{"id":1396,"outV":190,"properties":{"weight":1}},{"id":4020,"outV":191,"properties":{"weight":1}},{"id":3637,"outV":24,"properties":{"weight":2}},{"id":6072,"outV":72,"properties":{"weight":5}},{"id":4157,"outV":54,"properties":{"weight":2}}]},"outE":{"followedBy":[{"id":972,"inV":57,"properties":{"weight":4}},{"id":973,"inV":59,"properties":{"weight":3}},{"id":974,"inV":53,"properties":{"weight":4}},{"id":975,"inV":54,"properties":{"weight":15}},{"id":976,"inV":56,"properties":{"weight":3}},{"id":977,"inV":48,"properties":{"weight":3}},{"id":978,"inV":72,"properties":{"weight":4}},{"id":979,"in
 V":19,"properties":{"weight":9}},{"id":980,"inV":4,"properties":{"weight":3}},{"id":981,"inV":58,"properties":{"weight":6}},{"id":982,"inV":46,"properties":{"weight":1}},{"id":983,"inV":234,"properties":{"weight":7}},{"id":984,"inV":235,"properties":{"weight":2}},{"id":985,"inV":207,"properties":{"weight":4}},{"id":986,"inV":39,"properties":{"weight":3}},{"id":987,"inV":50,"properties":{"weight":1}},{"id":988,"inV":104,"properties":{"weight":2}},{"id":989,"inV":49,"properties":{"weight":1}},{"id":990,"inV":17,"properties":{"weight":3}},{"id":991,"inV":100,"properties":{"weight":1}},{"id":992,"inV":24,"properties":{"weight":1}},{"id":993,"inV":170,"properties":{"weight":2}},{"id":994,"inV":73,"properties":{"weight":1}},{"id":995,"inV":173,"properties":{"weight":1}},{"id":996,"inV":236,"properties":{"weight":1}},{"id":997,"inV":202,"properties":{"weight":3}},{"id":998,"inV":80,"properties":{"weight":2}},{"id":999,"inV":115,"properties":{"weight":4}},{"id":1000,"inV":105,"properties":{
 "weight":1}}],"sungBy":[{"id":7072,"inV":351}],"writtenBy":[{"id":7071,"inV":350}]},"properties":{"name":[{"id":30,"value":"BLACK THROATED WIND"}],"songType":[{"id":32,"value":"original"}],"performances":[{"id":31,"value":158}]}}
-{"id":12,"label":"song","inE":{"followedBy":[{"id":3072,"outV":153,"properties":{"weight":4}},{"id":2433,"outV":68,"properties":{"weight":1}},{"id":1410,"outV":83,"properties":{"weight":1}},{"id":4227,"outV":52,"properties":{"weight":3}},{"id":3331,"outV":155,"properties":{"weight":2}},{"id":1028,"outV":73,"properties":{"weight":12}},{"id":4102,"outV":48,"properties":{"weight":33}},{"id":8,"outV":9,"properties":{"weight":3}},{"id":6281,"outV":49,"properties":{"weight":2}},{"id":652,"outV":23,"properties":{"weight":2}},{"id":5388,"outV":69,"properties":{"weight":1}},{"id":525,"outV":120,"properties":{"weight":1}},{"id":3726,"outV":3,"properties":{"weight":1}},{"id":3855,"outV":60,"properties":{"weight":1}},{"id":783,"outV":122,"properties":{"weight":1}},{"id":3986,"outV":106,"properties":{"weight":1}},{"id":1938,"outV":148,"properties":{"weight":1}},{"id":1172,"outV":26,"properties":{"weight":4}},{"id":916,"outV":91,"properties":{"weight":1}},{"id":6935,"outV":84,"properties":{"weigh
 t":5}},{"id":5017,"outV":30,"properties":{"weight":1}},{"id":3225,"outV":63,"properties":{"weight":4}},{"id":2203,"outV":75,"properties":{"weight":3}},{"id":155,"outV":108,"properties":{"weight":6}},{"id":4893,"outV":100,"properties":{"weight":7}},{"id":4640,"outV":154,"properties":{"weight":10}},{"id":5665,"outV":169,"properties":{"weight":1}},{"id":5286,"outV":32,"properties":{"weight":4}},{"id":2598,"outV":112,"properties":{"weight":7}},{"id":1702,"outV":124,"properties":{"weight":1}},{"id":3879,"outV":51,"properties":{"weight":12}},{"id":4007,"outV":225,"properties":{"weight":1}},{"id":424,"outV":38,"properties":{"weight":5}},{"id":5034,"outV":47,"properties":{"weight":1}},{"id":4522,"outV":105,"properties":{"weight":12}},{"id":4779,"outV":114,"properties":{"weight":3}},{"id":6576,"outV":116,"properties":{"weight":1}},{"id":6835,"outV":64,"properties":{"weight":1}},{"id":6455,"outV":187,"properties":{"weight":12}},{"id":5304,"outV":170,"properties":{"weight":2}},{"id":824,"outV"
 :171,"properties":{"weight":1}},{"id":6074,"outV":72,"properties":{"weight":4}},{"id":1722,"outV":82,"properties":{"weight":1}},{"id":4284,"outV":10,"properties":{"weight":1}},{"id":2109,"outV":17,"properties":{"weight":24}},{"id":703,"outV":206,"properties":{"weight":2}},{"id":5952,"outV":50,"properties":{"weight":7}},{"id":5440,"outV":239,"properties":{"weight":2}},{"id":1858,"outV":94,"properties":{"weight":2}},{"id":1347,"outV":31,"properties":{"weight":1}},{"id":1605,"outV":18,"properties":{"weight":1}},{"id":4165,"outV":54,"properties":{"weight":17}},{"id":3654,"outV":24,"properties":{"weight":3}},{"id":6598,"outV":127,"properties":{"weight":1}},{"id":4038,"outV":173,"properties":{"weight":1}},{"id":3271,"outV":160,"properties":{"weight":1}},{"id":3527,"outV":223,"properties":{"weight":1}},{"id":1096,"outV":59,"properties":{"weight":26}},{"id":3144,"outV":104,"properties":{"weight":24}},{"id":1993,"outV":152,"properties":{"weight":2}},{"id":6985,"outV":175,"properties":{"weigh
 t":1}},{"id":6730,"outV":53,"properties":{"weight":4}},{"id":3019,"outV":14,"properties":{"weight":1}},{"id":3788,"outV":168,"properties":{"weight":1}},{"id":5072,"outV":4,"properties":{"weight":26}},{"id":2515,"outV":57,"properties":{"weight":3}},{"id":1365,"outV":130,"properties":{"weight":2}},{"id":2647,"outV":137,"properties":{"weight":1}},{"id":730,"outV":80,"properties":{"weight":12}},{"id":2780,"outV":15,"properties":{"weight":3}},{"id":3810,"outV":88,"properties":{"weight":6}},{"id":482,"outV":98,"properties":{"weight":8}},{"id":7013,"outV":89,"properties":{"weight":1}},{"id":4072,"outV":109,"properties":{"weight":1}},{"id":2281,"outV":25,"properties":{"weight":2}},{"id":2668,"outV":13,"properties":{"weight":3}},{"id":3565,"outV":56,"properties":{"weight":9}},{"id":1262,"outV":27,"properties":{"weight":17}},{"id":2031,"outV":180,"properties":{"weight":1}},{"id":6769,"outV":39,"properties":{"weight":2}},{"id":1779,"outV":234,"properties":{"weight":1}},{"id":4468,"outV":202,"p
 roperties":{"weight":4}},{"id":1909,"outV":103,"properties":{"weight":1}},{"id":3446,"outV":58,"properties":{"weight":4}},{"id":2934,"outV":78,"properties":{"weight":1}},{"id":381,"outV":74,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":6656,"inV":49,"properties":{"weight":9}},{"id":6657,"inV":19,"properties":{"weight":3}},{"id":6658,"inV":27,"properties":{"weight":9}},{"id":6659,"inV":252,"properties":{"weight":1}},{"id":6660,"inV":206,"properties":{"weight":1}},{"id":6661,"inV":89,"properties":{"weight":4}},{"id":6662,"inV":160,"properties":{"weight":1}},{"id":6663,"inV":15,"properties":{"weight":167}},{"id":6664,"inV":4,"properties":{"weight":3}},{"id":6665,"inV":202,"properties":{"weight":2}},{"id":6666,"inV":5,"properties":{"weight":1}},{"id":6667,"inV":9,"properties":{"weight":2}},{"id":6668,"inV":83,"properties":{"weight":3}},{"id":6669,"inV":3,"properties":{"weight":1}},{"id":6670,"inV":52,"properties":{"weight":1}},{"id":6671,"inV":25,"properties":{"weight":1}},{"
 id":6672,"inV":46,"properties":{"weight":1}},{"id":6673,"inV":123,"properties":{"weight":2}},{"id":6674,"inV":51,"properties":{"weight":4}},{"id":6675,"inV":17,"properties":{"weight":3}},{"id":6676,"inV":56,"properties":{"weight":5}},{"id":6677,"inV":98,"properties":{"weight":5}},{"id":6678,"inV":104,"properties":{"weight":4}},{"id":6679,"inV":69,"properties":{"weight":3}},{"id":6680,"inV":170,"properties":{"weight":2}},{"id":6681,"inV":82,"properties":{"weight":1}},{"id":6682,"inV":80,"properties":{"weight":2}},{"id":6683,"inV":215,"properties":{"weight":1}},{"id":6684,"inV":48,"properties":{"weight":1}},{"id":6685,"inV":14,"properties":{"weight":3}},{"id":6686,"inV":50,"properties":{"weight":2}},{"id":6687,"inV":24,"properties":{"weight":83}},{"id":6688,"inV":18,"properties":{"weight":1}},{"id":6689,"inV":39,"properties":{"weight":6}},{"id":6690,"inV":105,"properties":{"weight":1}},{"id":6691,"inV":131,"properties":{"weight":14}},{"id":6645,"inV":72,"properties":{"weight":7}},{"id
 ":6646,"inV":58,"properties":{"weight":7}},{"id":6647,"inV":57,"properties":{"weight":6}},{"id":6648,"inV":54,"properties":{"weight":8}},{"id":6649,"inV":59,"properties":{"weight":14}},{"id":6650,"inV":100,"properties":{"weight":7}},{"id":6651,"inV":53,"properties":{"weight":4}},{"id":6652,"inV":148,"properties":{"weight":1}},{"id":6653,"inV":218,"properties":{"weight":2}},{"id":6654,"inV":235,"properties":{"weight":2}},{"id":6655,"inV":130,"properties":{"weight":1}}],"sungBy":[{"id":7776,"inV":351}],"writtenBy":[{"id":7775,"inV":659}]},"properties":{"name":[{"id":33,"value":"ME AND MY UNCLE"}],"songType":[{"id":35,"value":"cover"}],"performances":[{"id":34,"value":616}]}}
-{"id":13,"label":"song","inE":{"followedBy":[{"id":4865,"outV":35,"properties":{"weight":4}},{"id":1026,"outV":73,"properties":{"weight":1}},{"id":3330,"outV":155,"properties":{"weight":2}},{"id":5636,"outV":22,"properties":{"weight":1}},{"id":775,"outV":122,"properties":{"weight":1}},{"id":6407,"outV":134,"properties":{"weight":24}},{"id":1799,"outV":196,"properties":{"weight":2}},{"id":9,"outV":9,"properties":{"weight":6}},{"id":4874,"outV":100,"properties":{"weight":6}},{"id":4108,"outV":48,"properties":{"weight":3}},{"id":5132,"outV":222,"properties":{"weight":1}},{"id":2830,"outV":101,"properties":{"weight":8}},{"id":3857,"outV":60,"properties":{"weight":35}},{"id":6931,"outV":84,"properties":{"weight":7}},{"id":6165,"outV":36,"properties":{"weight":1}},{"id":533,"outV":120,"properties":{"weight":1}},{"id":5142,"outV":125,"properties":{"weight":11}},{"id":4630,"outV":154,"properties":{"weight":8}},{"id":283,"outV":5,"properties":{"weight":3}},{"id":1567,"outV":18,"properties":{
 "weight":3}},{"id":1823,"outV":41,"properties":{"weight":4}},{"id":3359,"outV":184,"properties":{"weight":3}},{"id":3617,"outV":24,"properties":{"weight":1}},{"id":3108,"outV":153,"properties":{"weight":1}},{"id":3878,"outV":51,"properties":{"weight":6}},{"id":2347,"outV":87,"properties":{"weight":8}},{"id":6443,"outV":187,"properties":{"weight":47}},{"id":6700,"outV":141,"properties":{"weight":4}},{"id":5682,"outV":167,"properties":{"weight":1}},{"id":53,"outV":46,"properties":{"weight":4}},{"id":5943,"outV":50,"properties":{"weight":1}},{"id":823,"outV":171,"properties":{"weight":24}},{"id":4151,"outV":218,"properties":{"weight":2}},{"id":2617,"outV":158,"properties":{"weight":1}},{"id":3386,"outV":177,"properties":{"weight":2}},{"id":4411,"outV":327,"properties":{"weight":1}},{"id":1852,"outV":94,"properties":{"weight":4}},{"id":6206,"outV":319,"properties":{"weight":1}},{"id":2111,"outV":17,"properties":{"weight":4}},{"id":4159,"outV":54,"properties":{"weight":16}},{"id":1087,"o
 utV":59,"properties":{"weight":5}},{"id":6723,"outV":53,"properties":{"weight":6}},{"id":6984,"outV":175,"properties":{"weight":1}},{"id":3145,"outV":104,"properties":{"weight":4}},{"id":4947,"outV":86,"properties":{"weight":1}},{"id":5203,"outV":99,"properties":{"weight":2}},{"id":1366,"outV":130,"properties":{"weight":12}},{"id":1622,"outV":210,"properties":{"weight":1}},{"id":2908,"outV":118,"properties":{"weight":1}},{"id":1885,"outV":103,"properties":{"weight":3}},{"id":4959,"outV":207,"properties":{"weight":6}},{"id":6763,"outV":39,"properties":{"weight":8}},{"id":3435,"outV":58,"properties":{"weight":8}},{"id":5741,"outV":129,"properties":{"weight":12}},{"id":366,"outV":74,"properties":{"weight":38}},{"id":2926,"outV":78,"properties":{"weight":3}},{"id":623,"outV":23,"properties":{"weight":1}},{"id":4721,"outV":186,"properties":{"weight":4}},{"id":2165,"outV":151,"properties":{"weight":1}},{"id":886,"outV":140,"properties":{"weight":1}},{"id":3703,"outV":3,"properties":{"weig
 ht":5}},{"id":7031,"outV":89,"properties":{"weight":4}},{"id":1411,"outV":83,"properties":{"weight":7}},{"id":6278,"outV":49,"properties":{"weight":1}},{"id":3974,"outV":106,"properties":{"weight":2}},{"id":912,"outV":91,"properties":{"weight":59}},{"id":2192,"outV":235,"properties":{"weight":1}},{"id":4759,"outV":37,"properties":{"weight":2}},{"id":1179,"outV":26,"properties":{"weight":2}},{"id":5789,"outV":76,"properties":{"weight":3}},{"id":4257,"outV":10,"properties":{"weight":1}},{"id":6561,"outV":172,"properties":{"weight":1}},{"id":4771,"outV":114,"properties":{"weight":3}},{"id":1454,"outV":81,"properties":{"weight":10}},{"id":6073,"outV":72,"properties":{"weight":13}},{"id":5306,"outV":170,"properties":{"weight":4}},{"id":4027,"outV":173,"properties":{"weight":3}},{"id":1725,"outV":82,"properties":{"weight":3}},{"id":960,"outV":67,"properties":{"weight":2}},{"id":1985,"outV":152,"properties":{"weight":1}},{"id":6594,"outV":127,"properties":{"weight":6}},{"id":6342,"outV":21
 ,"properties":{"weight":4}},{"id":455,"outV":139,"properties":{"weight":1}},{"id":3277,"outV":160,"properties":{"weight":3}},{"id":5837,"outV":258,"properties":{"weight":1}},{"id":2256,"outV":29,"properties":{"weight":1}},{"id":208,"outV":70,"properties":{"weight":2}},{"id":721,"outV":80,"properties":{"weight":1}},{"id":2771,"outV":15,"properties":{"weight":3}},{"id":5076,"outV":4,"properties":{"weight":12}},{"id":2519,"outV":57,"properties":{"weight":10}},{"id":4312,"outV":110,"properties":{"weight":1}},{"id":2268,"outV":25,"properties":{"weight":8}},{"id":2014,"outV":149,"properties":{"weight":1}},{"id":3552,"outV":56,"properties":{"weight":8}},{"id":481,"outV":98,"properties":{"weight":3}},{"id":1764,"outV":28,"properties":{"weight":3}},{"id":1258,"outV":27,"properties":{"weight":3}},{"id":4846,"outV":119,"properties":{"weight":1}},{"id":1518,"outV":164,"properties":{"weight":1}},{"id":4593,"outV":85,"properties":{"weight":2}},{"id":244,"outV":150,"properties":{"weight":3}},{"id"
 :1780,"outV":234,"properties":{"weight":2}},{"id":4344,"outV":62,"properties":{"weight":12}},{"id":2044,"outV":92,"properties":{"weight":2}},{"id":5374,"outV":69,"properties":{"weight":34}},{"id":5886,"outV":96,"properties":{"weight":15}}]},"outE":{"followedBy":[{"id":2688,"inV":94,"properties":{"weight":4}},{"id":2689,"inV":130,"properties":{"weight":11}},{"id":2690,"inV":83,"properties":{"weight":13}},{"id":2691,"inV":170,"properties":{"weight":1}},{"id":2692,"inV":51,"properties":{"weight":3}},{"id":2693,"inV":22,"properties":{"weight":2}},{"id":2694,"inV":296,"properties":{"weight":1}},{"id":2695,"inV":52,"properties":{"weight":1}},{"id":2696,"inV":17,"properties":{"weight":2}},{"id":2697,"inV":202,"properties":{"weight":3}},{"id":2698,"inV":27,"properties":{"weight":2}},{"id":2699,"inV":9,"properties":{"weight":3}},{"id":2700,"inV":25,"properties":{"weight":12}},{"id":2701,"inV":195,"properties":{"weight":2}},{"id":2702,"inV":206,"properties":{"weight":1}},{"id":2703,"inV":39,"
 properties":{"weight":1}},{"id":2704,"inV":69,"properties":{"weight":6}},{"id":2705,"inV":24,"properties":{"weight":1}},{"id":2706,"inV":82,"properties":{"weight":3}},{"id":2707,"inV":57,"properties":{"weight":1}},{"id":2708,"inV":134,"properties":{"weight":9}},{"id":2709,"inV":110,"properties":{"weight":1}},{"id":2710,"inV":99,"properties":{"weight":3}},{"id":2711,"inV":76,"properties":{"weight":4}},{"id":2712,"inV":3,"properties":{"weight":3}},{"id":2713,"inV":178,"properties":{"weight":1}},{"id":2714,"inV":184,"properties":{"weight":1}},{"id":2715,"inV":60,"properties":{"weight":21}},{"id":2716,"inV":148,"properties":{"weight":1}},{"id":2717,"inV":32,"properties":{"weight":1}},{"id":2718,"inV":91,"properties":{"weight":42}},{"id":2719,"inV":103,"properties":{"weight":1}},{"id":2720,"inV":114,"properties":{"weight":4}},{"id":2721,"inV":141,"properties":{"weight":4}},{"id":2722,"inV":154,"properties":{"weight":3}},{"id":2723,"inV":109,"properties":{"weight":2}},{"id":2724,"inV":125
 ,"properties":{"weight":9}},{"id":2725,"inV":85,"properties":{"weight":2}},{"id":2726,"inV":84,"properties":{"weight":5}},{"id":2727,"inV":50,"properties":{"weight":1}},{"id":2728,"inV":214,"properties":{"weight":1}},{"id":2729,"inV":72,"properties":{"weight":1}},{"id":2730,"inV":246,"properties":{"weight":1}},{"id":2731,"inV":129,"properties":{"weight":29}},{"id":2732,"inV":65,"properties":{"weight":2}},{"id":2733,"inV":133,"properties":{"weight":1}},{"id":2734,"inV":62,"properties":{"weight":1}},{"id":2735,"inV":29,"properties":{"weight":4}},{"id":2736,"inV":5,"properties":{"weight":3}},{"id":2737,"inV":183,"properties":{"weight":3}},{"id":2738,"inV":210,"properties":{"weight":1}},{"id":2739,"inV":128,"properties":{"weight":1}},{"id":2740,"inV":67,"properties":{"weight":1}},{"id":2741,"inV":212,"properties":{"weight":1}},{"id":2742,"inV":70,"properties":{"weight":2}},{"id":2743,"inV":75,"properties":{"weight":1}},{"id":2744,"inV":71,"properties":{"weight":1}},{"id":2745,"inV":168,
 "properties":{"weight":2}},{"id":2746,"inV":157,"properties":{"weight":1}},{"id":2747,"inV":92,"properties":{"weight":1}},{"id":2748,"inV":89,"properties":{"weight":5}},{"id":2749,"inV":81,"properties":{"weight":1}},{"id":2750,"inV":187,"properties":{"weight":1}},{"id":2751,"inV":164,"properties":{"weight":1}},{"id":2752,"inV":136,"properties":{"weight":1}},{"id":2753,"inV":46,"properties":{"weight":1}},{"id":2660,"inV":207,"properties":{"weight":3}},{"id":2661,"inV":122,"properties":{"weight":17}},{"id":2662,"inV":96,"properties":{"weight":157}},{"id":2663,"inV":104,"properties":{"weight":1}},{"id":2664,"inV":26,"properties":{"weight":14}},{"id":2665,"inV":123,"properties":{"weight":3}},{"id":2666,"inV":19,"properties":{"weight":12}},{"id":2667,"inV":100,"properties":{"weight":5}},{"id":2668,"inV":12,"properties":{"weight":3}},{"id":2669,"inV":49,"properties":{"weight":12}},{"id":2670,"inV":21,"properties":{"weight":4}},{"id":2671,"inV":120,"properties":{"weight":9}},{"id":2672,"in
 V":23,"properties":{"weight":5}},{"id":2673,"inV":59,"properties":{"weight":6}},{"id":2674,"inV":54,"properties":{"weight":5}},{"id":2675,"inV":80,"properties":{"weight":1}},{"id":2676,"inV":234,"properties":{"weight":1}},{"id":2677,"inV":53,"properties":{"weight":2}},{"id":2678,"inV":225,"properties":{"weight":1}},{"id":2679,"inV":235,"properties":{"weight":2}},{"id":2680,"inV":160,"properties":{"weight":3}},{"id":2681,"inV":56,"properties":{"weight":3}},{"id":2682,"inV":127,"properties":{"weight":6}},{"id":2683,"inV":18,"properties":{"weight":3}},{"id":2684,"inV":4,"properties":{"weight":9}},{"id":2685,"inV":15,"properties":{"weight":7}},{"id":2686,"inV":74,"properties":{"weight":86}},{"id":2687,"inV":153,"properties":{"weight":12}}],"sungBy":[{"id":7292,"inV":359}],"writtenBy":[{"id":7291,"inV":339}]},"properties":{"name":[{"id":36,"value":"PLAYING IN THE BAND"}],"songType":[{"id":38,"value":"original"}],"performances":[{"id":37,"value":582}]}}
-{"id":14,"label":"song","inE":{"followedBy":[{"id":6784,"outV":39,"properties":{"weight":10}},{"id":5251,"outV":32,"properties":{"weight":1}},{"id":4229,"outV":52,"properties":{"weight":3}},{"id":4745,"outV":294,"properties":{"weight":4}},{"id":10,"outV":9,"properties":{"weight":3}},{"id":6283,"outV":49,"properties":{"weight":2}},{"id":4364,"outV":62,"properties":{"weight":16}},{"id":4109,"outV":48,"properties":{"weight":10}},{"id":6544,"outV":55,"properties":{"weight":1}},{"id":4881,"outV":100,"properties":{"weight":20}},{"id":6034,"outV":115,"properties":{"weight":1}},{"id":3219,"outV":63,"properties":{"weight":2}},{"id":531,"outV":120,"properties":{"weight":1}},{"id":4758,"outV":37,"properties":{"weight":2}},{"id":4247,"outV":10,"properties":{"weight":1}},{"id":4631,"outV":154,"properties":{"weight":6}},{"id":3866,"outV":60,"properties":{"weight":2}},{"id":1947,"outV":148,"properties":{"weight":1}},{"id":1436,"outV":83,"properties":{"weight":7}},{"id":2844,"outV":101,"properties"
 :{"weight":1}},{"id":6685,"outV":12,"properties":{"weight":3}},{"id":1183,"outV":26,"properties":{"weight":2}},{"id":160,"outV":108,"properties":{"weight":2}},{"id":4517,"outV":105,"properties":{"weight":6}},{"id":6954,"outV":84,"properties":{"weight":4}},{"id":1451,"outV":81,"properties":{"weight":12}},{"id":1582,"outV":18,"properties":{"weight":4}},{"id":3892,"outV":51,"properties":{"weight":10}},{"id":2107,"outV":17,"properties":{"weight":19}},{"id":5820,"outV":76,"properties":{"weight":1}},{"id":6463,"outV":187,"properties":{"weight":26}},{"id":1090,"outV":59,"properties":{"weight":7}},{"id":6083,"outV":72,"properties":{"weight":9}},{"id":1731,"outV":82,"properties":{"weight":4}},{"id":4037,"outV":173,"properties":{"weight":1}},{"id":2375,"outV":87,"properties":{"weight":8}},{"id":4169,"outV":54,"properties":{"weight":36}},{"id":5578,"outV":42,"properties":{"weight":1}},{"id":5964,"outV":50,"properties":{"weight":2}},{"id":716,"outV":80,"properties":{"weight":10}},{"id":5709,"ou
 tV":20,"properties":{"weight":1}},{"id":845,"outV":171,"properties":{"weight":11}},{"id":5838,"outV":258,"properties":{"weight":1}},{"id":1232,"outV":248,"properties":{"weight":1}},{"id":6993,"outV":175,"properties":{"weight":1}},{"id":3666,"outV":24,"properties":{"weight":2}},{"id":3796,"outV":88,"properties":{"weight":1}},{"id":3156,"outV":104,"properties":{"weight":6}},{"id":6742,"outV":53,"properties":{"weight":15}},{"id":2523,"outV":57,"properties":{"weight":9}},{"id":864,"outV":189,"properties":{"weight":2}},{"id":3556,"outV":56,"properties":{"weight":21}},{"id":102,"outV":46,"properties":{"weight":1}},{"id":5096,"outV":4,"properties":{"weight":2}},{"id":1257,"outV":27,"properties":{"weight":19}},{"id":489,"outV":98,"properties":{"weight":3}},{"id":2030,"outV":180,"properties":{"weight":2}},{"id":2159,"outV":151,"properties":{"weight":1}},{"id":2803,"outV":15,"properties":{"weight":4}},{"id":2935,"outV":78,"properties":{"weight":1}},{"id":2426,"outV":68,"properties":{"weight":
 4}},{"id":3962,"outV":106,"properties":{"weight":2}},{"id":4474,"outV":202,"properties":{"weight":1}},{"id":123,"outV":97,"properties":{"weight":1}},{"id":5628,"outV":22,"properties":{"weight":1}},{"id":4092,"outV":109,"properties":{"weight":1}},{"id":1021,"outV":73,"properties":{"weight":20}},{"id":3455,"outV":58,"properties":{"weight":12}}]},"outE":{"followedBy":[{"id":2981,"inV":50,"properties":{"weight":2}},{"id":2982,"inV":4,"properties":{"weight":3}},{"id":2983,"inV":53,"properties":{"weight":8}},{"id":2984,"inV":57,"properties":{"weight":55}},{"id":2985,"inV":89,"properties":{"weight":2}},{"id":2986,"inV":122,"properties":{"weight":1}},{"id":2987,"inV":153,"properties":{"weight":1}},{"id":2988,"inV":72,"properties":{"weight":26}},{"id":2989,"inV":19,"properties":{"weight":17}},{"id":2990,"inV":9,"properties":{"weight":4}},{"id":2991,"inV":17,"properties":{"weight":13}},{"id":2992,"inV":46,"properties":{"weight":5}},{"id":2993,"inV":51,"properties":{"weight":15}},{"id":2994,"i
 nV":54,"properties":{"weight":28}},{"id":2995,"inV":202,"properties":{"weight":3}},{"id":2996,"inV":27,"properties":{"weight":6}},{"id":2997,"inV":52,"properties":{"weight":3}},{"id":2998,"inV":58,"properties":{"weight":1}},{"id":2999,"inV":56,"properties":{"weight":8}},{"id":3000,"inV":100,"properties":{"weight":12}},{"id":3001,"inV":99,"properties":{"weight":26}},{"id":3002,"inV":98,"properties":{"weight":3}},{"id":3003,"inV":104,"properties":{"weight":2}},{"id":3004,"inV":82,"properties":{"weight":6}},{"id":3005,"inV":215,"properties":{"weight":1}},{"id":3006,"inV":69,"properties":{"weight":2}},{"id":3007,"inV":103,"properties":{"weight":1}},{"id":3008,"inV":83,"properties":{"weight":8}},{"id":3009,"inV":101,"properties":{"weight":1}},{"id":3010,"inV":80,"properties":{"weight":8}},{"id":3011,"inV":121,"properties":{"weight":3}},{"id":3012,"inV":59,"properties":{"weight":1}},{"id":3013,"inV":26,"properties":{"weight":2}},{"id":3014,"inV":32,"properties":{"weight":2}},{"id":3015,"i
 nV":155,"properties":{"weight":1}},{"id":3016,"inV":42,"properties":{"weight":2}},{"id":3017,"inV":18,"properties":{"weight":1}},{"id":3018,"inV":105,"properties":{"weight":11}},{"id":3019,"inV":12,"properties":{"weight":1}},{"id":3020,"inV":49,"properties":{"weight":27}},{"id":3021,"inV":65,"properties":{"weight":2}},{"id":3022,"inV":85,"properties":{"weight":2}},{"id":3023,"inV":73,"properties":{"weight":8}},{"id":3024,"inV":106,"properties":{"weight":3}},{"id":3025,"inV":189,"properties":{"weight":3}},{"id":3026,"inV":10,"properties":{"weight":1}},{"id":3027,"inV":210,"properties":{"weight":3}},{"id":3028,"inV":76,"properties":{"weight":1}},{"id":3029,"inV":87,"properties":{"weight":1}},{"id":3030,"inV":96,"properties":{"weight":1}},{"id":3031,"inV":150,"properties":{"weight":1}},{"id":3032,"inV":66,"properties":{"weight":1}},{"id":3033,"inV":5,"properties":{"weight":1}},{"id":3034,"inV":91,"properties":{"weight":29}},{"id":3035,"inV":60,"properties":{"weight":6}},{"id":3036,"inV
 ":67,"properties":{"weight":1}},{"id":3037,"inV":74,"properties":{"weight":1}},{"id":3038,"inV":21,"properties":{"weight":1}},{"id":3039,"inV":169,"properties":{"weight":1}},{"id":3040,"inV":62,"properties":{"weight":1}},{"id":3041,"inV":39,"properties":{"weight":2}},{"id":3042,"inV":175,"properties":{"weight":1}},{"id":3043,"inV":172,"properties":{"weight":1}},{"id":3044,"inV":28,"properties":{"weight":5}},{"id":3045,"inV":173,"properties":{"weight":1}},{"id":3046,"inV":37,"properties":{"weight":5}},{"id":3047,"inV":35,"properties":{"weight":2}}],"sungBy":[{"id":7232,"inV":351}],"writtenBy":[{"id":7231,"inV":350}]},"properties":{"name":[{"id":39,"value":"LOOKS LIKE RAIN"}],"songType":[{"id":41,"value":"original"}],"performances":[{"id":40,"value":417}]}}
-{"id":15,"label":"song","inE":{"followedBy":[{"id":1152,"outV":26,"properties":{"weight":1}},{"id":769,"outV":122,"properties":{"weight":3}},{"id":5379,"outV":69,"properties":{"weight":4}},{"id":3844,"outV":60,"properties":{"weight":2}},{"id":1414,"outV":83,"properties":{"weight":2}},{"id":6663,"outV":12,"properties":{"weight":167}},{"id":4872,"outV":100,"properties":{"weight":9}},{"id":4105,"outV":48,"properties":{"weight":4}},{"id":11,"outV":9,"properties":{"weight":3}},{"id":4622,"outV":154,"properties":{"weight":1}},{"id":2833,"outV":101,"properties":{"weight":1}},{"id":2195,"outV":235,"properties":{"weight":1}},{"id":5141,"outV":125,"properties":{"weight":2}},{"id":3224,"outV":63,"properties":{"weight":2}},{"id":1945,"outV":148,"properties":{"weight":2}},{"id":5024,"outV":30,"properties":{"weight":2}},{"id":2597,"outV":112,"properties":{"weight":35}},{"id":1062,"outV":73,"properties":{"weight":1}},{"id":5032,"outV":47,"properties":{"weight":1}},{"id":4776,"outV":114,"properties
 ":{"weight":1}},{"id":6698,"outV":141,"properties":{"weight":1}},{"id":3885,"outV":51,"properties":{"weight":14}},{"id":1712,"outV":82,"properties":{"weight":4}},{"id":5301,"outV":170,"properties":{"weight":1}},{"id":1847,"outV":94,"properties":{"weight":6}},{"id":4153,"outV":54,"properties":{"weight":7}},{"id":1339,"outV":31,"properties":{"weight":2}},{"id":6075,"outV":72,"properties":{"weight":4}},{"id":2108,"outV":17,"properties":{"weight":8}},{"id":60,"outV":46,"properties":{"weight":1}},{"id":6460,"outV":187,"properties":{"weight":10}},{"id":3653,"outV":24,"properties":{"weight":14}},{"id":6731,"outV":53,"properties":{"weight":1}},{"id":3147,"outV":104,"properties":{"weight":2}},{"id":1101,"outV":59,"properties":{"weight":2}},{"id":4052,"outV":173,"properties":{"weight":1}},{"id":2518,"outV":57,"properties":{"weight":5}},{"id":476,"outV":98,"properties":{"weight":3}},{"id":1372,"outV":130,"properties":{"weight":1}},{"id":5085,"outV":4,"properties":{"weight":1}},{"id":1245,"outV
 ":27,"properties":{"weight":5}},{"id":2272,"outV":25,"properties":{"weight":4}},{"id":4577,"outV":254,"properties":{"weight":1}},{"id":5735,"outV":129,"properties":{"weight":2}},{"id":3432,"outV":58,"properties":{"weight":7}},{"id":3562,"outV":56,"properties":{"weight":6}},{"id":746,"outV":80,"properties":{"weight":1}},{"id":2411,"outV":68,"properties":{"weight":1}},{"id":2924,"outV":78,"properties":{"weight":3}},{"id":4467,"outV":202,"properties":{"weight":6}},{"id":376,"outV":74,"properties":{"weight":1}},{"id":5242,"outV":32,"properties":{"weight":2}},{"id":6267,"outV":49,"properties":{"weight":1}},{"id":2685,"outV":13,"properties":{"weight":7}}]},"outE":{"followedBy":[{"id":2816,"inV":103,"properties":{"weight":1}},{"id":2817,"inV":62,"properties":{"weight":1}},{"id":2818,"inV":64,"properties":{"weight":1}},{"id":2819,"inV":75,"properties":{"weight":3}},{"id":2820,"inV":152,"properties":{"weight":1}},{"id":2821,"inV":117,"properties":{"weight":1}},{"id":2822,"inV":168,"propertie
 s":{"weight":1}},{"id":2823,"inV":188,"properties":{"weight":1}},{"id":2824,"inV":131,"properties":{"weight":4}},{"id":2825,"inV":28,"properties":{"weight":1}},{"id":2826,"inV":124,"properties":{"weight":1}},{"id":2827,"inV":190,"properties":{"weight":1}},{"id":2828,"inV":137,"properties":{"weight":1}},{"id":2755,"inV":19,"properties":{"weight":8}},{"id":2756,"inV":56,"properties":{"weight":22}},{"id":2757,"inV":104,"properties":{"weight":17}},{"id":2758,"inV":49,"properties":{"weight":4}},{"id":2759,"inV":122,"properties":{"weight":3}},{"id":2760,"inV":23,"properties":{"weight":2}},{"id":2761,"inV":27,"properties":{"weight":23}},{"id":2762,"inV":89,"properties":{"weight":7}},{"id":2763,"inV":46,"properties":{"weight":1}},{"id":2764,"inV":57,"properties":{"weight":7}},{"id":2765,"inV":59,"properties":{"weight":6}},{"id":2766,"inV":58,"properties":{"weight":18}},{"id":2767,"inV":54,"properties":{"weight":25}},{"id":2768,"inV":100,"properties":{"weight":24}},{"id":2769,"inV":39,"prope
 rties":{"weight":3}},{"id":2770,"inV":160,"properties":{"weight":5}},{"id":2771,"inV":13,"properties":{"weight":3}},{"id":2772,"inV":51,"properties":{"weight":14}},{"id":2773,"inV":94,"properties":{"weight":4}},{"id":2774,"inV":148,"properties":{"weight":1}},{"id":2775,"inV":9,"properties":{"weight":5}},{"id":2776,"inV":48,"properties":{"weight":17}},{"id":2777,"inV":55,"properties":{"weight":1}},{"id":2778,"inV":72,"properties":{"weight":3}},{"id":2779,"inV":52,"properties":{"weight":1}},{"id":2780,"inV":12,"properties":{"weight":3}},{"id":2781,"inV":4,"properties":{"weight":4}},{"id":2782,"inV":83,"properties":{"weight":2}},{"id":2783,"inV":202,"properties":{"weight":6}},{"id":2784,"inV":82,"properties":{"weight":3}},{"id":2785,"inV":74,"properties":{"weight":1}},{"id":2786,"inV":69,"properties":{"weight":7}},{"id":2787,"inV":98,"properties":{"weight":10}},{"id":2788,"inV":21,"properties":{"weight":1}},{"id":2789,"inV":125,"properties":{"weight":1}},{"id":2790,"inV":170,"propertie
 s":{"weight":3}},{"id":2791,"inV":26,"properties":{"weight":1}},{"id":2792,"inV":60,"properties":{"weight":1}},{"id":2793,"inV":294,"properties":{"weight":2}},{"id":2794,"inV":99,"properties":{"weight":3}},{"id":2795,"inV":17,"properties":{"weight":10}},{"id":2796,"inV":63,"properties":{"weight":5}},{"id":2797,"inV":68,"properties":{"weight":3}},{"id":2798,"inV":108,"properties":{"weight":6}},{"id":2799,"inV":109,"properties":{"weight":1}},{"id":2800,"inV":196,"properties":{"weight":3}},{"id":2801,"inV":91,"properties":{"weight":1}},{"id":2802,"inV":18,"properties":{"weight":1}},{"id":2803,"inV":14,"properties":{"weight":4}},{"id":2804,"inV":105,"properties":{"weight":8}},{"id":2805,"inV":101,"properties":{"weight":2}},{"id":2806,"inV":10,"properties":{"weight":2}},{"id":2807,"inV":73,"properties":{"weight":26}},{"id":2808,"inV":78,"properties":{"weight":1}},{"id":2809,"inV":32,"properties":{"weight":3}},{"id":2810,"inV":106,"properties":{"weight":2}},{"id":2811,"inV":180,"propertie
 s":{"weight":2}},{"id":2812,"inV":88,"properties":{"weight":1}},{"id":2813,"inV":97,"properties":{"weight":1}},{"id":2814,"inV":53,"properties":{"weight":3}},{"id":2815,"inV":115,"properties":{"weight":4}}],"sungBy":[{"id":7472,"inV":351}],"writtenBy":[{"id":7471,"inV":479}]},"properties":{"name":[{"id":42,"value":"BIG RIVER"}],"songType":[{"id":44,"value":"cover"}],"performances":[{"id":43,"value":397}]}}
-{"id":16,"label":"song","inE":{"followedBy":[{"id":7008,"outV":89,"properties":{"weight":1}},{"id":6467,"outV":187,"properties":{"weight":1}},{"id":6341,"outV":21,"properties":{"weight":1}},{"id":5637,"outV":22,"properties":{"weight":3}},{"id":4101,"outV":48,"properties":{"weight":1}},{"id":5382,"outV":69,"properties":{"weight":4}},{"id":6537,"outV":55,"properties":{"weight":1}},{"id":3273,"outV":160,"properties":{"weight":2}},{"id":3882,"outV":51,"properties":{"weight":12}},{"id":12,"outV":9,"properties":{"weight":1}},{"id":1260,"outV":27,"properties":{"weight":1}},{"id":4172,"outV":54,"properties":{"weight":1}},{"id":6285,"outV":49,"properties":{"weight":1}},{"id":368,"outV":74,"properties":{"weight":1}},{"id":4464,"outV":202,"properties":{"weight":1}},{"id":468,"outV":195,"properties":{"weight":3}},{"id":5303,"outV":170,"properties":{"weight":2}},{"id":472,"outV":98,"properties":{"weight":2}},{"id":5081,"outV":4,"properties":{"weight":2}},{"id":2521,"outV":57,"properties":{"weigh
 t":1}},{"id":5146,"outV":125,"properties":{"weight":1}},{"id":1405,"outV":83,"properties":{"weight":5}},{"id":1854,"outV":94,"properties":{"weight":2}},{"id":1950,"outV":148,"properties":{"weight":1}}]},"outE":{"followedBy":[{"id":2169,"inV":25,"properties":{"weight":1}},{"id":2170,"inV":101,"properties":{"weight":46}},{"id":2171,"inV":89,"properties":{"weight":2}},{"id":2172,"inV":130,"properties":{"weight":1}},{"id":2173,"inV":83,"properties":{"weight":1}}]},"properties":{"name":[{"id":45,"value":"WEATHER REPORT SUITE"}],"songType":[{"id":47,"value":""}],"performances":[{"id":46,"value":0}]}}
-{"id":17,"label":"song","inE":{"followedBy":[{"id":5955,"outV":50,"properties":{"weight":43}},{"id":5702,"outV":20,"properties":{"weight":2}},{"id":2696,"outV":13,"properties":{"weight":2}},{"id":6538,"outV":55,"properties":{"weight":1}},{"id":1163,"outV":26,"properties":{"weight":34}},{"id":13,"outV":9,"properties":{"weight":1}},{"id":402,"outV":38,"properties":{"weight":12}},{"id":6675,"outV":12,"properties":{"weight":3}},{"id":5011,"outV":30,"properties":{"weight":3}},{"id":1877,"outV":103,"properties":{"weight":2}},{"id":2522,"outV":57,"properties":{"weight":1}},{"id":3803,"outV":88,"properties":{"weight":4}},{"id":475,"outV":98,"properties":{"weight":1}},{"id":3996,"outV":106,"properties":{"weight":1}},{"id":2588,"outV":112,"properties":{"weight":3}},{"id":540,"outV":120,"properties":{"weight":1}},{"id":990,"outV":11,"properties":{"weight":3}},{"id":1570,"outV":18,"properties":{"weight":6}},{"id":2275,"outV":25,"properties":{"weight":1}},{"id":4262,"outV":10,"properties":{"weig
 ht":5}},{"id":2795,"outV":15,"properties":{"weight":10}},{"id":6955,"outV":84,"properties":{"weight":1}},{"id":2413,"outV":68,"properties":{"weight":9}},{"id":4077,"outV":109,"properties":{"weight":1}},{"id":2991,"outV":14,"properties":{"weight":13}},{"id":4912,"outV":100,"properties":{"weight":1}},{"id":3639,"outV":24,"properties":{"weight":13}},{"id":6583,"outV":116,"properties":{"weight":1}},{"id":58,"outV":46,"properties":{"weight":2}},{"id":635,"outV":23,"properties":{"weight":16}},{"id":5244,"outV":32,"properties":{"weight":19}},{"id":2942,"outV":78,"properties":{"weight":1}},{"id":6847,"outV":64,"properties":{"weight":7}}]},"outE":{"followedBy":[{"id":2112,"inV":24,"properties":{"weight":9}},{"id":2113,"inV":21,"properties":{"weight":1}},{"id":2114,"inV":46,"properties":{"weight":1}},{"id":2115,"inV":20,"properties":{"weight":2}},{"id":2116,"inV":10,"properties":{"weight":7}},{"id":2117,"inV":68,"properties":{"weight":25}},{"id":2118,"inV":32,"properties":{"weight":19}},{"id"
 :2119,"inV":103,"properties":{"weight":3}},{"id":2120,"inV":121,"properties":{"weight":3}},{"id":2121,"inV":112,"properties":{"weight":31}},{"id":2122,"inV":85,"properties":{"weight":1}},{"id":2123,"inV":101,"properties":{"weight":1}},{"id":2124,"inV":109,"properties":{"weight":1}},{"id":2125,"inV":73,"properties":{"weight":1}},{"id":2126,"inV":88,"properties":{"weight":8}},{"id":2127,"inV":111,"properties":{"weight":3}},{"id":2128,"inV":54,"properties":{"weight":2}},{"id":2129,"inV":97,"properties":{"weight":2}},{"id":2130,"inV":100,"properties":{"weight":1}},{"id":2131,"inV":42,"properties":{"weight":1}},{"id":2132,"inV":58,"properties":{"weight":2}},{"id":2133,"inV":244,"properties":{"weight":1}},{"id":2134,"inV":56,"properties":{"weight":1}},{"id":2135,"inV":63,"properties":{"weight":1}},{"id":2136,"inV":188,"properties":{"weight":2}},{"id":2137,"inV":71,"properties":{"weight":1}},{"id":2138,"inV":30,"properties":{"weight":2}},{"id":2139,"inV":31,"properties":{"weight":1}},{"id"
 :2140,"inV":77,"properties":{"weight":2}},{"id":2141,"inV":40,"properties":{"weight":1}},{"id":2142,"inV":33,"properties":{"weight":1}},{"id":2103,"inV":18,"properties":{"weight":17}},{"id":2104,"inV":39,"properties":{"weight":2}},{"id":2105,"inV":22,"properties":{"weight":4}},{"id":2106,"inV":50,"properties":{"weight":6}},{"id":2107,"inV":14,"properties":{"weight":19}},{"id":2108,"inV":15,"properties":{"weight":8}},{"id":2109,"inV":12,"properties":{"weight":24}},{"id":2110,"inV":23,"properties":{"weight":2}},{"id":2111,"inV":13,"properties":{"weight":4}}],"sungBy":[{"id":7364,"inV":340}],"writtenBy":[{"id":7363,"inV":339}]},"properties":{"name":[{"id":48,"value":"THEY LOVE EACH OTHER"}],"songType":[{"id":50,"value":"original"}],"performances":[{"id":49,"value":227}]}}
-{"id":18,"label":"song","inE":{"followedBy":[{"id":1024,"outV":73,"properties":{"weight":4}},{"id":4097,"outV":48,"properties":{"weight":13}},{"id":6276,"outV":49,"properties":{"weight":2}},{"id":2309,"outV":25,"properties":{"weight":1}},{"id":3333,"outV":155,"properties":{"weight":1}},{"id":4231,"outV":52,"properties":{"weight":1}},{"id":4360,"outV":62,"properties":{"weight":1}},{"id":5257,"outV":32,"properties":{"weight":3}},{"id":3849,"outV":60,"properties":{"weight":1}},{"id":5385,"outV":69,"properties":{"weight":2}},{"id":2189,"outV":235,"properties":{"weight":1}},{"id":14,"outV":9,"properties":{"weight":5}},{"id":654,"outV":23,"properties":{"weight":1}},{"id":5010,"outV":30,"properties":{"weight":2}},{"id":6546,"outV":55,"properties":{"weight":1}},{"id":4885,"outV":100,"properties":{"weight":11}},{"id":1814,"outV":273,"properties":{"weight":1}},{"id":1943,"outV":148,"properties":{"weight":1}},{"id":5145,"outV":125,"properties":{"weight":1}},{"id":6688,"outV":12,"properties":{"
 weight":1}},{"id":4642,"outV":154,"properties":{"weight":3}},{"id":4260,"outV":10,"properties":{"weight":3}},{"id":2852,"outV":101,"properties":{"weight":1}},{"id":3238,"outV":63,"properties":{"weight":1}},{"id":6695,"outV":141,"properties":{"weight":1}},{"id":3880,"outV":51,"properties":{"weight":12}},{"id":1193,"outV":26,"properties":{"weight":1}},{"id":425,"outV":38,"properties":{"weight":2}},{"id":2601,"outV":112,"properties":{"weight":1}},{"id":4524,"outV":105,"properties":{"weight":3}},{"id":45,"outV":46,"properties":{"weight":3}},{"id":4015,"outV":292,"properties":{"weight":1}},{"id":560,"outV":120,"properties":{"weight":1}},{"id":6579,"outV":116,"properties":{"weight":1}},{"id":5299,"outV":170,"properties":{"weight":3}},{"id":4404,"outV":40,"properties":{"weight":1}},{"id":1716,"outV":82,"properties":{"weight":3}},{"id":5429,"outV":315,"properties":{"weight":1}},{"id":4150,"outV":218,"properties":{"weight":1}

<TRUNCATED>

[24/48] tinkerpop git commit: TINKERPOP-1407 More default serializers for Gremlin Server.

Posted by sp...@apache.org.
TINKERPOP-1407 More default serializers for Gremlin Server.

If no serializers are configured then Gremlin Server will set up graphson and gryo as the standard to ensure the server can deal with at least the most common serialization formats. CTR


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/da47a21c
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/da47a21c
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/da47a21c

Branch: refs/heads/TINKERPOP-1278
Commit: da47a21cf8d7bed2f7f198c6cf91165d38bd957f
Parents: 848e367
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Fri Aug 19 12:43:06 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Fri Aug 19 12:43:06 2016 -0400

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |  1 +
 .../src/reference/gremlin-applications.asciidoc |  4 ++--
 .../AbstractGraphSONMessageSerializerV1d0.java  |  2 +-
 gremlin-server/conf/gremlin-server-min.yaml     | 14 ------------
 .../gremlin/server/AbstractChannelizer.java     | 23 +++++++++++++++++---
 .../tinkerpop/gremlin/server/Settings.java      | 21 ++++++++++--------
 6 files changed, 36 insertions(+), 29 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/da47a21c/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index d4eff5d..1b93ecd 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -26,6 +26,7 @@ image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima
 TinkerPop 3.2.2 (NOT OFFICIALLY RELEASED YET)
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
+* Included GraphSON as a default serializer (in addition to Gryo, which was already present) in Gremlin Server if none are defined
 * Defaulted the `gremlinPool` setting in Gremlin Server to be zero, which will instructs it to use `Runtime.availableProcessors()` for that settings.
 * Changed scope of log4j dependencies so that they would only be used in tests and the binary distributions of Gremlin Console and Server.
 * Deprecated `Io.Builder.registry()` in favor of the newly introduced `Io.Builder.onMapper()`.

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/da47a21c/docs/src/reference/gremlin-applications.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/reference/gremlin-applications.asciidoc b/docs/src/reference/gremlin-applications.asciidoc
index 7b84b43..76dd45e 100644
--- a/docs/src/reference/gremlin-applications.asciidoc
+++ b/docs/src/reference/gremlin-applications.asciidoc
@@ -955,13 +955,13 @@ The following table describes the various configuration options that Gremlin Ser
 |processors[X].className |The full class name of the `OpProcessor` implementation. |_none_
 |processors[X].config |A `Map` containing `OpProcessor` specific configurations. |_none_
 |resultIterationBatchSize |Defines the size in which the result of a request is "batched" back to the client.  In other words, if set to `1`, then a result that had ten items in it would get each result sent back individually.  If set to `2` the same ten results would come back in five batches of two each. |64
-|scriptEngines |A `Map` of `ScriptEngine` implementations to expose through Gremlin Server, where the key is the name given by the `ScriptEngine` implementation.  The key must match the name exactly for the `ScriptEngine` to be constructed.  The value paired with this key is itself a `Map` of configuration for that `ScriptEngine`.  |_none_
+|scriptEngines |A `Map` of `ScriptEngine` implementations to expose through Gremlin Server, where the key is the name given by the `ScriptEngine` implementation.  The key must match the name exactly for the `ScriptEngine` to be constructed.  The value paired with this key is itself a `Map` of configuration for that `ScriptEngine`.  If this value is not set, it will default to "gremlin-groovy". |_gremlin-groovy_
 |scriptEngines.<name>.imports |A comma separated list of classes/packages to make available to the `ScriptEngine`. |_none_
 |scriptEngines.<name>.staticImports |A comma separated list of "static" imports to make available to the `ScriptEngine`. |_none_
 |scriptEngines.<name>.scripts |A comma separated list of script files to execute on `ScriptEngine` initialization. `Graph` and `TraversalSource` instance references produced from scripts will be stored globally in Gremlin Server, therefore it is possible to use initialization scripts to add Traversal Strategies or create entirely new `Graph` instances all together. Instantiating a `LifeCycleHook` in a script provides a way to execute scripts when Gremlin Server starts and stops.|_none_
 |scriptEngines.<name>.config |A `Map` of configuration settings for the `ScriptEngine`.  These settings are dependent on the `ScriptEngine` implementation being used. |_none_
 |scriptEvaluationTimeout |The amount of time in milliseconds before a script evaluation times out. The notion of "script evaluation" refers to the time it takes for the `ScriptEngine` to do its work and *not* any additional time it takes for the result of the evaluation to be iterated and serialized. This feature can be turned off by setting the value to `0`. |30000
-|serializers |A `List` of `Map` settings, where each `Map` represents a `MessageSerializer` implementation to use along with its configuration. |_none_
+|serializers |A `List` of `Map` settings, where each `Map` represents a `MessageSerializer` implementation to use along with its configuration. If this value is not set, then Gremlin Server will configure with GraphSON and Gryo but will not register any `ioRegistries` for configured graphs. |_empty_
 |serializers[X].className |The full class name of the `MessageSerializer` implementation. |_none_
 |serializers[X].config |A `Map` containing `MessageSerializer` specific configurations. |_none_
 |ssl.enabled |Determines if SSL is turned on or not. |false

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/da47a21c/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/AbstractGraphSONMessageSerializerV1d0.java
----------------------------------------------------------------------
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/AbstractGraphSONMessageSerializerV1d0.java b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/AbstractGraphSONMessageSerializerV1d0.java
index 810220b..ac6a74f 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/AbstractGraphSONMessageSerializerV1d0.java
+++ b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/AbstractGraphSONMessageSerializerV1d0.java
@@ -55,7 +55,7 @@ public abstract class AbstractGraphSONMessageSerializerV1d0 extends AbstractMess
 
     protected ObjectMapper mapper;
 
-    protected static final String TOKEN_USE_MAPPER_FROM_GRAPH = "useMapperFromGraph";
+    public static final String TOKEN_USE_MAPPER_FROM_GRAPH = "useMapperFromGraph";
 
     protected final TypeReference<Map<String, Object>> mapTypeReference = new TypeReference<Map<String, Object>>() {
     };

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/da47a21c/gremlin-server/conf/gremlin-server-min.yaml
----------------------------------------------------------------------
diff --git a/gremlin-server/conf/gremlin-server-min.yaml b/gremlin-server/conf/gremlin-server-min.yaml
index d4471f5..9ce6b5e 100644
--- a/gremlin-server/conf/gremlin-server-min.yaml
+++ b/gremlin-server/conf/gremlin-server-min.yaml
@@ -17,23 +17,9 @@
 
 host: localhost
 port: 8182
-scriptEvaluationTimeout: 30000
 graphs: {
   graph: conf/tinkergraph-empty.properties}
 plugins:
   - tinkerpop.tinkergraph
-scriptEngines: {
-  gremlin-groovy: {
-    imports: []}}
-serializers:
-  - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV1d0, config: { useMapperFromGraph: graph }}  # application/vnd.gremlin-v1.0+json
-  - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV1d0, config: { useMapperFromGraph: graph }}         # application/json
 metrics: {
   slf4jReporter: {enabled: true, interval: 180000}}
-strictTransactionManagement: false
-maxInitialLineLength: 4096
-maxHeaderSize: 8192
-maxChunkSize: 8192
-maxContentLength: 65536
-maxAccumulationBufferComponents: 1024
-resultIterationBatchSize: 64

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/da47a21c/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/AbstractChannelizer.java
----------------------------------------------------------------------
diff --git a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/AbstractChannelizer.java b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/AbstractChannelizer.java
index 829a3ee..10dbc1c 100644
--- a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/AbstractChannelizer.java
+++ b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/AbstractChannelizer.java
@@ -24,9 +24,11 @@ import io.netty.handler.ssl.SslContextBuilder;
 import io.netty.handler.ssl.SslProvider;
 import io.netty.handler.ssl.util.SelfSignedCertificate;
 import org.apache.tinkerpop.gremlin.driver.MessageSerializer;
+import org.apache.tinkerpop.gremlin.driver.ser.AbstractGraphSONMessageSerializerV1d0;
+import org.apache.tinkerpop.gremlin.driver.ser.AbstractGryoMessageSerializerV1d0;
+import org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV1d0;
+import org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0;
 import org.apache.tinkerpop.gremlin.groovy.engine.GremlinExecutor;
-import org.apache.tinkerpop.gremlin.server.auth.AllowAllAuthenticator;
-import org.apache.tinkerpop.gremlin.server.handler.SaslAuthenticationHandler;
 import org.apache.tinkerpop.gremlin.server.auth.Authenticator;
 import org.apache.tinkerpop.gremlin.server.handler.IteratorHandler;
 import org.apache.tinkerpop.gremlin.server.handler.OpExecutorHandler;
@@ -42,7 +44,10 @@ import org.slf4j.LoggerFactory;
 import javax.net.ssl.SSLException;
 import java.io.File;
 import java.security.cert.CertificateException;
+import java.util.Arrays;
+import java.util.Collections;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 import java.util.Optional;
 import java.util.concurrent.ExecutorService;
@@ -62,6 +67,14 @@ import java.util.stream.Stream;
  */
 public abstract class AbstractChannelizer extends ChannelInitializer<SocketChannel> implements Channelizer {
     private static final Logger logger = LoggerFactory.getLogger(AbstractChannelizer.class);
+    protected static final List<Settings.SerializerSettings> DEFAULT_SERIALIZERS = Arrays.asList(
+            new Settings.SerializerSettings(GryoMessageSerializerV1d0.class.getName(), Collections.emptyMap()),
+            new Settings.SerializerSettings(GryoMessageSerializerV1d0.class.getName(), new HashMap<String,Object>(){{
+                put(AbstractGryoMessageSerializerV1d0.TOKEN_SERIALIZE_RESULT_TO_STRING, true);
+            }}),
+            new Settings.SerializerSettings(GraphSONMessageSerializerV1d0.class.getName(), Collections.emptyMap())
+    );
+
     protected Settings settings;
     protected GremlinExecutor gremlinExecutor;
     protected Optional<SslContext> sslContext;
@@ -153,7 +166,11 @@ public abstract class AbstractChannelizer extends ChannelInitializer<SocketChann
     }
 
     private void configureSerializers() {
-        this.settings.serializers.stream().map(config -> {
+        // grab some sensible defaults if no serializers are present in the config
+        final List<Settings.SerializerSettings> serializerSettings =
+                (null == this.settings.serializers || this.settings.serializers.isEmpty()) ? DEFAULT_SERIALIZERS : settings.serializers;
+
+        serializerSettings.stream().map(config -> {
             try {
                 final Class clazz = Class.forName(config.className);
                 if (!MessageSerializer.class.isAssignableFrom(clazz)) {

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/da47a21c/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/Settings.java
----------------------------------------------------------------------
diff --git a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/Settings.java b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/Settings.java
index b36bd6a..8b9fe89 100644
--- a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/Settings.java
+++ b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/Settings.java
@@ -54,15 +54,9 @@ import java.util.UUID;
 public class Settings {
 
     public Settings() {
-        // setup some sensible defaults like gremlin-groovy and gryo serialization
+        // setup some sensible defaults like gremlin-groovy
         scriptEngines = new HashMap<>();
         scriptEngines.put("gremlin-groovy", new ScriptEngineSettings());
-
-        serializers = new ArrayList<>();
-        final SerializerSettings gryoSerializerSettings = new SerializerSettings();
-        gryoSerializerSettings.className = GryoMessageSerializerV1d0.class.getName();
-        gryoSerializerSettings.config = Collections.emptyMap();
-        serializers.add(gryoSerializerSettings);
     }
 
     /**
@@ -195,9 +189,10 @@ public class Settings {
     public Map<String, ScriptEngineSettings> scriptEngines;
 
     /**
-     * List of {@link MessageSerializer} to configure.
+     * List of {@link MessageSerializer} to configure. If no serializers are specified then default serializers for
+     * the most current versions of "application/json" and "application/vnd.gremlin-v1.0+gryo" are applied.
      */
-    public List<SerializerSettings> serializers;
+    public List<SerializerSettings> serializers = Collections.emptyList();
 
     /**
      * Configures settings for SSL.
@@ -348,6 +343,14 @@ public class Settings {
      * Settings for the {@link MessageSerializer} implementations.
      */
     public static class SerializerSettings {
+
+        public SerializerSettings() {}
+
+        SerializerSettings(final String className, final Map<String, Object> config) {
+            this.className = className;
+            this.config = config;
+        }
+
         /**
          * The fully qualified class name of the {@link MessageSerializer} implementation. This class name will be
          * used to load the implementation from the classpath.


[05/48] tinkerpop git commit: Add a landing page for documentation.

Posted by sp...@apache.org.
Add a landing page for documentation.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/f1ec0b6e
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/f1ec0b6e
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/f1ec0b6e

Branch: refs/heads/TINKERPOP-1278
Commit: f1ec0b6e6159dab6833f1f675ddfcd87c4c4d84c
Parents: 4571061
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Fri Aug 12 07:00:55 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Fri Aug 12 07:00:55 2016 -0400

----------------------------------------------------------------------
 docs/src/index.asciidoc                    |  87 ++++++++++++++++++++++++
 docs/static/images/gremlin-gym-cropped.png | Bin 0 -> 32532 bytes
 pom.xml                                    |  22 ++++++
 3 files changed, 109 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f1ec0b6e/docs/src/index.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/index.asciidoc b/docs/src/index.asciidoc
new file mode 100644
index 0000000..ea00418
--- /dev/null
+++ b/docs/src/index.asciidoc
@@ -0,0 +1,87 @@
+////
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+////
+
+image::apache-tinkerpop-logo.png[width=500]
+
+*x.y.z*
+
+TinkerPop Compendium
+====================
+
+image::tinkerpop-reading.png[width=800,align="center"]
+
+The primary documentation for Apache TinkerPop is the link:http://tinkerpop.apache.org/docs/x.y.z/reference[Reference Documentation],
+which provides the most complete guide to TinkerPop usage. All other documentation tends to exist in support of that
+reference guide. Other documentation tends to fall into one of these other categories:
+
+1. <<tutorials,Tutorials>> - Brief but detailed explanations of specific technologies, patterns, use cases or best practices related
+to TinkerPop.
+1. <<publications,Publications>> - Blog posts, technical papers, presentation materials, etc.
+1. <<developer,Developer>> - Documentation for contributors to TinkerPop or for providers (i.e. those who implement TinkerPop's
+interfaces).
+
+NOTE: Some of the documentation listed here leads to third-party web sites. Such documentation is supplemental to
+Apache TinkerPop. Third-party documentation is marked as such in the listings below.
+
+////
+Note the "+" following the link in each table entry - it forces an asciidoc line break after the link
+////
+
+[[tutorials]]
+Tutorials
+---------
+
+[width="100%",cols="<.<3,<.^10",grid="none"]
+|=========================================================
+|image:gremlin-gym-cropped.png[] |link:http://tinkerpop.apache.org/docs/x.y.z/tutorials/getting-started/[Getting Started with TinkerPop] +
+A gentle introduction to TinkerPop and the Gremlin traversal language that is divided into five, ten and fifteen minute tutorial blocks.
+|image:gremlin-dashboard.png[] |link:http://tinkerpop.apache.org/docs/x.y.z/tutorials/the-gremlin-console/[The Gremlin Console] +
+Provides a detailed look at The Gremlin Console and how it can be used when working with TinkerPop.
+|image:gremlin-lab-coat.png[width=200] |link:http://sql2gremlin.com/[Sql2Gremlin] +
+Learn Gremlin using typical patterns found when querying data with SQL. (*external*)
+^|image:gremlin-standing.png[width=125] |link:https://academy.datastax.com/resources/getting-started-graph-databases[Getting Started with Graph Databases] +
+A brief overview of RDBMS architecture in comparison to graph, basic graph terminology, a real-world use case for graph,
+and an overview of Gremlin. (*external*)
+|=========================================================
+
+[[publications]]
+Publications
+------------
+
+Unless otherwise noted, all "publications" are externally managed:
+
+* Rodriguez, M.A., link:http://www.datastax.com/dev/blog/the-mechanics-of-gremlin-olap["The Mechanics of Gremlin OLAP,"] DataStax Engineering Blog, April 2016.
+* Rodriguez, M.A., link:http://www.slideshare.net/slidarko/quantum-processes-in-graph-computing["Quantum Processes in Graph Computing,"] GraphDay '16 Presentation, Austin Texas, January 2016. [video presentation]
+* Rodriguez, M.A., Watkins, J.H., link:http://arxiv.org/abs/1511.06278["Quantum Walks with Gremlin,"] GraphDay '16 Proceedings, Austin Texas, January 2016.
+* Rodriguez, M.A., "(Keynote): link:http://www.slideshare.net/slidarko/acm-dbpl-keynote-the-graph-traversal-machine-and-language[The Gremlin Graph Traversal Machine and Language,"] ACM Database Programming Language Conference Presentation, October 2015.
+* Rodriguez, M.A., link:http://arxiv.org/abs/1508.03843["The Gremlin Graph Traversal Machine and Language,"] ACM Database Programming Languages Conference Proceedings, October 2015.
+* Mallette, S.P., link:http://www.slideshare.net/StephenMallette/tinkerpopfinal["What's New In Apache TinkerPop?,"] Cassandra Summit, September 2015.
+* Rodriguez, M.A., Kuppitz, D., link:http://www.datastax.com/dev/blog/the-benefits-of-the-gremlin-graph-traversal-machine["The Benefits of the Gremlin Graph Traversal Machine,"] DataStax Engineering Blog, September 2015.
+* Rodriguez, M.A., Kuppitz, D., link:http://www.slideshare.net/slidarko/the-gremlin-traversal-language["The Gremlin Graph Traversal Language,"] 2015 NoSQLNow Conference, August 2015.
+* Rodriguez, M.A., Kuppitz, D., Yim, K., link:http://www.datastax.com/dev/blog/tales-from-the-tinkerpop["Tales from the TinkerPop,"] DataStax Engineering Blog, July 2015.
+
+[[developer]]
+Developer
+---------
+
+[width="100%",cols="<.<3,<.^10",grid="none"]
+|=========================================================
+|image:business-gremlin.png[width=200] |link:http://tinkerpop.apache.org/docs/x.y.z/dev/developer/[Contributors] +
+Provides information on ways to contribute to TinkerPop as well as details on building the project and other specific information for contributors.
+|image:tinkerpop-enabled.png[width=200] |link:http://tinkerpop.apache.org/docs/x.y.z/dev/provider/[Providers] +
+Documentation for providers who implement the TinkerPop interfaces, develop plugins or drivers, or provide other third-party libraries for TinkerPop.
+|=========================================================
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f1ec0b6e/docs/static/images/gremlin-gym-cropped.png
----------------------------------------------------------------------
diff --git a/docs/static/images/gremlin-gym-cropped.png b/docs/static/images/gremlin-gym-cropped.png
new file mode 100644
index 0000000..3aaa9f8
Binary files /dev/null and b/docs/static/images/gremlin-gym-cropped.png differ

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f1ec0b6e/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 35c1a64..c3668c3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -675,6 +675,28 @@ limitations under the License.
                         <inherited>false</inherited>
                         <executions>
                             <execution>
+                                <id>home</id>
+                                <phase>generate-resources</phase>
+                                <goals>
+                                    <goal>process-asciidoc</goal>
+                                </goals>
+                                <configuration>
+                                    <sourceDirectory>${asciidoc.input.dir}/</sourceDirectory>
+                                    <sourceDocumentName>index.asciidoc</sourceDocumentName>
+                                    <outputDirectory>${htmlsingle.output.dir}/</outputDirectory>
+                                    <backend>html5</backend>
+                                    <doctype>article</doctype>
+                                    <attributes>
+                                        <imagesdir>images</imagesdir>
+                                        <encoding>UTF-8</encoding>
+                                        <stylesdir>${asciidoctor.style.dir}</stylesdir>
+                                        <stylesheet>tinkerpop.css</stylesheet>
+                                        <source-highlighter>coderay</source-highlighter>
+                                        <basedir>${project.basedir}</basedir>
+                                    </attributes>
+                                </configuration>
+                            </execution>
+                            <execution>
                                 <id>reference-book</id>
                                 <phase>generate-resources</phase>
                                 <goals>


[38/48] tinkerpop git commit: TINKERPOP-1274: GraphSON 2.0.

Posted by sp...@apache.org.
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/data/grateful-dead-v2d0-typed.json
----------------------------------------------------------------------
diff --git a/data/grateful-dead-v2d0-typed.json b/data/grateful-dead-v2d0-typed.json
new file mode 100644
index 0000000..3b24d37
--- /dev/null
+++ b/data/grateful-dead-v2d0-typed.json
@@ -0,0 +1,808 @@
+{"id":{"@type":"gremlin:int32","@value":1},"label":"song","inE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":3059},"outV":{"@type":"gremlin:int32","@value":153},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":276},"outV":{"@type":"gremlin:int32","@value":5},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3704},"outV":{"@type":"gremlin:int32","@value":3},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":4383},"outV":{"@type":"gremlin:int32","@value":62},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}]},"outE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":0},"inV":{"@type":"gremlin:int32","@value":2},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1},"inV":{"@type":"gremlin:int32","@value":3},"properties":{"weight":{"@type":"gremlin:int32","@
 value":2}}},{"id":{"@type":"gremlin:int32","@value":2},"inV":{"@type":"gremlin:int32","@value":4},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3},"inV":{"@type":"gremlin:int32","@value":5},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4},"inV":{"@type":"gremlin:int32","@value":6},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}],"sungBy":[{"id":{"@type":"gremlin:int32","@value":7612},"inV":{"@type":"gremlin:int32","@value":340}}],"writtenBy":[{"id":{"@type":"gremlin:int32","@value":7611},"inV":{"@type":"gremlin:int32","@value":527}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":0},"value":"HEY BO DIDDLEY"}],"songType":[{"id":{"@type":"gremlin:int64","@value":2},"value":"cover"}],"performances":[{"id":{"@type":"gremlin:int64","@value":1},"value":{"@type":"gremlin:int32","@value":5}}]}}
+{"id":{"@type":"gremlin:int32","@value":2},"label":"song","inE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":0},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":323},"outV":{"@type":"gremlin:int32","@value":34},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}]},"outE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":6190},"inV":{"@type":"gremlin:int32","@value":123},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":6191},"inV":{"@type":"gremlin:int32","@value":50},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}],"sungBy":[{"id":{"@type":"gremlin:int32","@value":7666},"inV":{"@type":"gremlin:int32","@value":525}}],"writtenBy":[{"id":{"@type":"gremlin:int32","@value":7665},"inV":{"@type":"gremlin:int32","@value":525}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":3},"value":"IM 
 A MAN"}],"songType":[{"id":{"@type":"gremlin:int64","@value":5},"value":"cover"}],"performances":[{"id":{"@type":"gremlin:int64","@value":4},"value":{"@type":"gremlin:int32","@value":1}}]}}
+{"id":{"@type":"gremlin:int32","@value":3},"label":"song","inE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":1},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":2051},"outV":{"@type":"gremlin:int32","@value":92},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":1412},"outV":{"@type":"gremlin:int32","@value":83},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}},{"id":{"@type":"gremlin:int32","@value":6669},"outV":{"@type":"gremlin:int32","@value":12},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":526},"outV":{"@type":"gremlin:int32","@value":120},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":910},"outV":{"@type":"gremlin:int32","@value":91},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id"
 :{"@type":"gremlin:int32","@value":1166},"outV":{"@type":"gremlin:int32","@value":26},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":6286},"outV":{"@type":"gremlin:int32","@value":49},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":273},"outV":{"@type":"gremlin:int32","@value":5},"properties":{"weight":{"@type":"gremlin:int32","@value":40}}},{"id":{"@type":"gremlin:int32","@value":2194},"outV":{"@type":"gremlin:int32","@value":235},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1684},"outV":{"@type":"gremlin:int32","@value":124},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1941},"outV":{"@type":"gremlin:int32","@value":148},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":3221},"outV":{"@type":"gremlin:int32","@va
 lue":63},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2712},"outV":{"@type":"gremlin:int32","@value":13},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":6425},"outV":{"@type":"gremlin:int32","@value":134},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5787},"outV":{"@type":"gremlin:int32","@value":76},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5148},"outV":{"@type":"gremlin:int32","@value":125},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":6692},"outV":{"@type":"gremlin:int32","@value":141},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":6310},"outV":{"@type":"gremlin:int32","@value":123},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id
 ":{"@type":"gremlin:int32","@value":6448},"outV":{"@type":"gremlin:int32","@value":187},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":2225},"outV":{"@type":"gremlin:int32","@value":226},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5042},"outV":{"@type":"gremlin:int32","@value":209},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4789},"outV":{"@type":"gremlin:int32","@value":114},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":1464},"outV":{"@type":"gremlin:int32","@value":81},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2232},"outV":{"@type":"gremlin:int32","@value":215},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4665},"outV":{"@type":"gremlin:int32",
 "@value":154},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2235},"outV":{"@type":"gremlin:int32","@value":29},"properties":{"weight":{"@type":"gremlin:int32","@value":163}}},{"id":{"@type":"gremlin:int32","@value":6208},"outV":{"@type":"gremlin:int32","@value":319},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":706},"outV":{"@type":"gremlin:int32","@value":206},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":835},"outV":{"@type":"gremlin:int32","@value":171},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5188},"outV":{"@type":"gremlin:int32","@value":99},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1862},"outV":{"@type":"gremlin:int32","@value":94},"properties":{"weight":{"@type":"gremlin:int32","@value":10}}}
 ,{"id":{"@type":"gremlin:int32","@value":1735},"outV":{"@type":"gremlin:int32","@value":82},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":6343},"outV":{"@type":"gremlin:int32","@value":21},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4937},"outV":{"@type":"gremlin:int32","@value":277},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3276},"outV":{"@type":"gremlin:int32","@value":160},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3149},"outV":{"@type":"gremlin:int32","@value":104},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1358},"outV":{"@type":"gremlin:int32","@value":130},"properties":{"weight":{"@type":"gremlin:int32","@value":18}}},{"id":{"@type":"gremlin:int32","@value":4304},"outV":{"@type":"gremlin:in
 t32","@value":110},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1105},"outV":{"@type":"gremlin:int32","@value":59},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":722},"outV":{"@type":"gremlin:int32","@value":80},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4182},"outV":{"@type":"gremlin:int32","@value":54},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1499},"outV":{"@type":"gremlin:int32","@value":164},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":2397},"outV":{"@type":"gremlin:int32","@value":179},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":351},"outV":{"@type":"gremlin:int32","@value":178},"properties":{"weight":{"@type":"gremlin:int32","@value":1}
 }},{"id":{"@type":"gremlin:int32","@value":6623},"outV":{"@type":"gremlin:int32","@value":127},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":2018},"outV":{"@type":"gremlin:int32","@value":149},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":7011},"outV":{"@type":"gremlin:int32","@value":89},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5348},"outV":{"@type":"gremlin:int32","@value":165},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2278},"outV":{"@type":"gremlin:int32","@value":25},"properties":{"weight":{"@type":"gremlin:int32","@value":7}}},{"id":{"@type":"gremlin:int32","@value":1255},"outV":{"@type":"gremlin:int32","@value":27},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3048},"outV":{"@type":"gremlin:in
 t32","@value":153},"properties":{"weight":{"@type":"gremlin:int32","@value":13}}},{"id":{"@type":"gremlin:int32","@value":5867},"outV":{"@type":"gremlin:int32","@value":96},"properties":{"weight":{"@type":"gremlin:int32","@value":116}}},{"id":{"@type":"gremlin:int32","@value":364},"outV":{"@type":"gremlin:int32","@value":74},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":492},"outV":{"@type":"gremlin:int32","@value":98},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3948},"outV":{"@type":"gremlin:int32","@value":138},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":4335},"outV":{"@type":"gremlin:int32","@value":62},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3312},"outV":{"@type":"gremlin:int32","@value":252},"properties":{"weight":{"@type":"gremlin:int32","@value":
 1}}},{"id":{"@type":"gremlin:int32","@value":5745},"outV":{"@type":"gremlin:int32","@value":129},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4596},"outV":{"@type":"gremlin:int32","@value":85},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":5367},"outV":{"@type":"gremlin:int32","@value":132},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":633},"outV":{"@type":"gremlin:int32","@value":23},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":891},"outV":{"@type":"gremlin:int32","@value":140},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5375},"outV":{"@type":"gremlin:int32","@value":69},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":6143},"outV":{"@type":"gremlin:in
 t32","@value":289},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}}]},"outE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":3712},"inV":{"@type":"gremlin:int32","@value":27},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3713},"inV":{"@type":"gremlin:int32","@value":110},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":3714},"inV":{"@type":"gremlin:int32","@value":215},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":3715},"inV":{"@type":"gremlin:int32","@value":127},"properties":{"weight":{"@type":"gremlin:int32","@value":10}}},{"id":{"@type":"gremlin:int32","@value":3716},"inV":{"@type":"gremlin:int32","@value":83},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3717},"inV":{"@type":"gremlin:int32","@value":103},"properties":{"weight":{"@type":"grem
 lin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3718},"inV":{"@type":"gremlin:int32","@value":68},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3719},"inV":{"@type":"gremlin:int32","@value":134},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3720},"inV":{"@type":"gremlin:int32","@value":25},"properties":{"weight":{"@type":"gremlin:int32","@value":10}}},{"id":{"@type":"gremlin:int32","@value":3721},"inV":{"@type":"gremlin:int32","@value":125},"properties":{"weight":{"@type":"gremlin:int32","@value":54}}},{"id":{"@type":"gremlin:int32","@value":3722},"inV":{"@type":"gremlin:int32","@value":130},"properties":{"weight":{"@type":"gremlin:int32","@value":26}}},{"id":{"@type":"gremlin:int32","@value":3723},"inV":{"@type":"gremlin:int32","@value":141},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3724},"inV":{
 "@type":"gremlin:int32","@value":145},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3725},"inV":{"@type":"gremlin:int32","@value":319},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3726},"inV":{"@type":"gremlin:int32","@value":12},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3727},"inV":{"@type":"gremlin:int32","@value":160},"properties":{"weight":{"@type":"gremlin:int32","@value":37}}},{"id":{"@type":"gremlin:int32","@value":3728},"inV":{"@type":"gremlin:int32","@value":70},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3729},"inV":{"@type":"gremlin:int32","@value":123},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3730},"inV":{"@type":"gremlin:int32","@value":129},"properties":{"weight":{"@type":"gremlin:i
 nt32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3731},"inV":{"@type":"gremlin:int32","@value":30},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3732},"inV":{"@type":"gremlin:int32","@value":148},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3733},"inV":{"@type":"gremlin:int32","@value":211},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3734},"inV":{"@type":"gremlin:int32","@value":87},"properties":{"weight":{"@type":"gremlin:int32","@value":13}}},{"id":{"@type":"gremlin:int32","@value":3735},"inV":{"@type":"gremlin:int32","@value":164},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":3736},"inV":{"@type":"gremlin:int32","@value":64},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3737},"inV":{"@type":
 "gremlin:int32","@value":320},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3738},"inV":{"@type":"gremlin:int32","@value":61},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3739},"inV":{"@type":"gremlin:int32","@value":210},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3740},"inV":{"@type":"gremlin:int32","@value":50},"properties":{"weight":{"@type":"gremlin:int32","@value":7}}},{"id":{"@type":"gremlin:int32","@value":3741},"inV":{"@type":"gremlin:int32","@value":128},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3742},"inV":{"@type":"gremlin:int32","@value":315},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3743},"inV":{"@type":"gremlin:int32","@value":261},"properties":{"weight":{"@type":"gremlin:int32","@v
 alue":1}}},{"id":{"@type":"gremlin:int32","@value":3744},"inV":{"@type":"gremlin:int32","@value":213},"properties":{"weight":{"@type":"gremlin:int32","@value":13}}},{"id":{"@type":"gremlin:int32","@value":3745},"inV":{"@type":"gremlin:int32","@value":72},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3746},"inV":{"@type":"gremlin:int32","@value":38},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":3747},"inV":{"@type":"gremlin:int32","@value":204},"properties":{"weight":{"@type":"gremlin:int32","@value":14}}},{"id":{"@type":"gremlin:int32","@value":3748},"inV":{"@type":"gremlin:int32","@value":62},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3749},"inV":{"@type":"gremlin:int32","@value":150},"properties":{"weight":{"@type":"gremlin:int32","@value":8}}},{"id":{"@type":"gremlin:int32","@value":3750},"inV":{"@type":"gremlin
 :int32","@value":309},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3751},"inV":{"@type":"gremlin:int32","@value":131},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3752},"inV":{"@type":"gremlin:int32","@value":151},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3753},"inV":{"@type":"gremlin:int32","@value":321},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3754},"inV":{"@type":"gremlin:int32","@value":90},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3755},"inV":{"@type":"gremlin:int32","@value":82},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3756},"inV":{"@type":"gremlin:int32","@value":120},"properties":{"weight":{"@type":"gremlin:int32","@value":1}
 }},{"id":{"@type":"gremlin:int32","@value":3757},"inV":{"@type":"gremlin:int32","@value":46},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":3758},"inV":{"@type":"gremlin:int32","@value":157},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":3759},"inV":{"@type":"gremlin:int32","@value":59},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3760},"inV":{"@type":"gremlin:int32","@value":81},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3761},"inV":{"@type":"gremlin:int32","@value":86},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":3762},"inV":{"@type":"gremlin:int32","@value":140},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3763},"inV":{"@type":"gremlin:int32","@v
 alue":201},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3764},"inV":{"@type":"gremlin:int32","@value":214},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3765},"inV":{"@type":"gremlin:int32","@value":185},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3766},"inV":{"@type":"gremlin:int32","@value":216},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3767},"inV":{"@type":"gremlin:int32","@value":217},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3768},"inV":{"@type":"gremlin:int32","@value":236},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":3769},"inV":{"@type":"gremlin:int32","@value":193},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":
 {"@type":"gremlin:int32","@value":3770},"inV":{"@type":"gremlin:int32","@value":79},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3771},"inV":{"@type":"gremlin:int32","@value":84},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3772},"inV":{"@type":"gremlin:int32","@value":23},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3773},"inV":{"@type":"gremlin:int32","@value":31},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3774},"inV":{"@type":"gremlin:int32","@value":240},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3775},"inV":{"@type":"gremlin:int32","@value":292},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3776},"inV":{"@type":"gremlin:int32","@value":9},
 "properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3777},"inV":{"@type":"gremlin:int32","@value":259},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3694},"inV":{"@type":"gremlin:int32","@value":5},"properties":{"weight":{"@type":"gremlin:int32","@value":57}}},{"id":{"@type":"gremlin:int32","@value":3695},"inV":{"@type":"gremlin:int32","@value":114},"properties":{"weight":{"@type":"gremlin:int32","@value":30}}},{"id":{"@type":"gremlin:int32","@value":3696},"inV":{"@type":"gremlin:int32","@value":74},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3697},"inV":{"@type":"gremlin:int32","@value":78},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3698},"inV":{"@type":"gremlin:int32","@value":10},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"grem
 lin:int32","@value":3699},"inV":{"@type":"gremlin:int32","@value":26},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":3700},"inV":{"@type":"gremlin:int32","@value":153},"properties":{"weight":{"@type":"gremlin:int32","@value":7}}},{"id":{"@type":"gremlin:int32","@value":3701},"inV":{"@type":"gremlin:int32","@value":4},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":3702},"inV":{"@type":"gremlin:int32","@value":317},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3703},"inV":{"@type":"gremlin:int32","@value":13},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":3704},"inV":{"@type":"gremlin:int32","@value":1},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3705},"inV":{"@type":"gremlin:int32","@value":21},"properties":{"
 weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3706},"inV":{"@type":"gremlin:int32","@value":57},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3707},"inV":{"@type":"gremlin:int32","@value":122},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3708},"inV":{"@type":"gremlin:int32","@value":318},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3709},"inV":{"@type":"gremlin:int32","@value":94},"properties":{"weight":{"@type":"gremlin:int32","@value":26}}},{"id":{"@type":"gremlin:int32","@value":3710},"inV":{"@type":"gremlin:int32","@value":96},"properties":{"weight":{"@type":"gremlin:int32","@value":7}}},{"id":{"@type":"gremlin:int32","@value":3711},"inV":{"@type":"gremlin:int32","@value":124},"properties":{"weight":{"@type":"gremlin:int32","@value":15}}}],"sungBy":[{"id":{"@type":"gremli
 n:int32","@value":7808},"inV":{"@type":"gremlin:int32","@value":351}}],"writtenBy":[{"id":{"@type":"gremlin:int32","@value":7807},"inV":{"@type":"gremlin:int32","@value":671}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":6},"value":"NOT FADE AWAY"}],"songType":[{"id":{"@type":"gremlin:int64","@value":8},"value":"cover"}],"performances":[{"id":{"@type":"gremlin:int64","@value":7},"value":{"@type":"gremlin:int32","@value":531}}]}}
+{"id":{"@type":"gremlin:int32","@value":4},"label":"song","inE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":128},"outV":{"@type":"gremlin:int32","@value":97},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1664},"outV":{"@type":"gremlin:int32","@value":267},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":899},"outV":{"@type":"gremlin:int32","@value":140},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1667},"outV":{"@type":"gremlin:int32","@value":124},"properties":{"weight":{"@type":"gremlin:int32","@value":15}}},{"id":{"@type":"gremlin:int32","@value":4099},"outV":{"@type":"gremlin:int32","@value":48},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"
 id":{"@type":"gremlin:int32","@value":1156},"outV":{"@type":"gremlin:int32","@value":26},"properties":{"weight":{"@type":"gremlin:int32","@value":16}}},{"id":{"@type":"gremlin:int32","@value":773},"outV":{"@type":"gremlin:int32","@value":122},"properties":{"weight":{"@type":"gremlin:int32","@value":9}}},{"id":{"@type":"gremlin:int32","@value":6534},"outV":{"@type":"gremlin:int32","@value":242},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1032},"outV":{"@type":"gremlin:int32","@value":73},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":6664},"outV":{"@type":"gremlin:int32","@value":12},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":5129},"outV":{"@type":"gremlin:int32","@value":222},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5387},"outV":{"@type":"gremlin:int32",
 "@value":69},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5517},"outV":{"@type":"gremlin:int32","@value":43},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5006},"outV":{"@type":"gremlin:int32","@value":30},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":6030},"outV":{"@type":"gremlin:int32","@value":204},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":2063},"outV":{"@type":"gremlin:int32","@value":92},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":915},"outV":{"@type":"gremlin:int32","@value":91},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":6940},"outV":{"@type":"gremlin:int32","@value":84},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id
 ":{"@type":"gremlin:int32","@value":2464},"outV":{"@type":"gremlin:int32","@value":68},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5795},"outV":{"@type":"gremlin:int32","@value":76},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3620},"outV":{"@type":"gremlin:int32","@value":24},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":4772},"outV":{"@type":"gremlin:int32","@value":114},"properties":{"weight":{"@type":"gremlin:int32","@value":25}}},{"id":{"@type":"gremlin:int32","@value":2982},"outV":{"@type":"gremlin:int32","@value":14},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3367},"outV":{"@type":"gremlin:int32","@value":184},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}},{"id":{"@type":"gremlin:int32","@value":2345},"outV":{"@type":"gremlin:int32","@
 value":87},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":2861},"outV":{"@type":"gremlin:int32","@value":101},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}},{"id":{"@type":"gremlin:int32","@value":1840},"outV":{"@type":"gremlin:int32","@value":275},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5425},"outV":{"@type":"gremlin:int32","@value":102},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":180},"outV":{"@type":"gremlin:int32","@value":70},"properties":{"weight":{"@type":"gremlin:int32","@value":46}}},{"id":{"@type":"gremlin:int32","@value":2613},"outV":{"@type":"gremlin:int32","@value":158},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5434},"outV":{"@type":"gremlin:int32","@value":217},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{
 "id":{"@type":"gremlin:int32","@value":5562},"outV":{"@type":"gremlin:int32","@value":162},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":1469},"outV":{"@type":"gremlin:int32","@value":81},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":446},"outV":{"@type":"gremlin:int32","@value":38},"properties":{"weight":{"@type":"gremlin:int32","@value":7}}},{"id":{"@type":"gremlin:int32","@value":2494},"outV":{"@type":"gremlin:int32","@value":90},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3266},"outV":{"@type":"gremlin:int32","@value":160},"properties":{"weight":{"@type":"gremlin:int32","@value":10}}},{"id":{"@type":"gremlin:int32","@value":326},"outV":{"@type":"gremlin:int32","@value":34},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":583},"outV":{"@type":"gremlin:int32","@
 value":120},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":6855},"outV":{"@type":"gremlin:int32","@value":64},"properties":{"weight":{"@type":"gremlin:int32","@value":12}}},{"id":{"@type":"gremlin:int32","@value":73},"outV":{"@type":"gremlin:int32","@value":46},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":4425},"outV":{"@type":"gremlin:int32","@value":212},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1613},"outV":{"@type":"gremlin:int32","@value":210},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":4941},"outV":{"@type":"gremlin:int32","@value":86},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":6350},"outV":{"@type":"gremlin:int32","@value":21},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id
 ":{"@type":"gremlin:int32","@value":3535},"outV":{"@type":"gremlin:int32","@value":201},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":980},"outV":{"@type":"gremlin:int32","@value":11},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":1494},"outV":{"@type":"gremlin:int32","@value":164},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":5206},"outV":{"@type":"gremlin:int32","@value":99},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5847},"outV":{"@type":"gremlin:int32","@value":61},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":6490},"outV":{"@type":"gremlin:int32","@value":187},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2781},"outV":{"@type":"gremlin:int32","@v
 alue":15},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":5600},"outV":{"@type":"gremlin:int32","@value":42},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":353},"outV":{"@type":"gremlin:int32","@value":74},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}},{"id":{"@type":"gremlin:int32","@value":5474},"outV":{"@type":"gremlin:int32","@value":79},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1891},"outV":{"@type":"gremlin:int32","@value":103},"properties":{"weight":{"@type":"gremlin:int32","@value":19}}},{"id":{"@type":"gremlin:int32","@value":3811},"outV":{"@type":"gremlin:int32","@value":88},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5989},"outV":{"@type":"gremlin:int32","@value":50},"properties":{"weight":{"@type":"gremlin:int32","@value":12}}},{"id"
 :{"@type":"gremlin:int32","@value":4327},"outV":{"@type":"gremlin:int32","@value":110},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":2538},"outV":{"@type":"gremlin:int32","@value":57},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":3050},"outV":{"@type":"gremlin:int32","@value":153},"properties":{"weight":{"@type":"gremlin:int32","@value":13}}},{"id":{"@type":"gremlin:int32","@value":4970},"outV":{"@type":"gremlin:int32","@value":236},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2283},"outV":{"@type":"gremlin:int32","@value":25},"properties":{"weight":{"@type":"gremlin:int32","@value":9}}},{"id":{"@type":"gremlin:int32","@value":236},"outV":{"@type":"gremlin:int32","@value":145},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":6126},"outV":{"@type":"gremlin:int32","@
 value":72},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5232},"outV":{"@type":"gremlin:int32","@value":214},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":4594},"outV":{"@type":"gremlin:int32","@value":85},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1652},"outV":{"@type":"gremlin:int32","@value":213},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":4084},"outV":{"@type":"gremlin:int32","@value":109},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":629},"outV":{"@type":"gremlin:int32","@value":23},"properties":{"weight":{"@type":"gremlin:int32","@value":10}}},{"id":{"@type":"gremlin:int32","@value":3701},"outV":{"@type":"gremlin:int32","@value":3},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id
 ":{"@type":"gremlin:int32","@value":5621},"outV":{"@type":"gremlin:int32","@value":22},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":7029},"outV":{"@type":"gremlin:int32","@value":89},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5238},"outV":{"@type":"gremlin:int32","@value":32},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":2684},"outV":{"@type":"gremlin:int32","@value":13},"properties":{"weight":{"@type":"gremlin:int32","@value":9}}},{"id":{"@type":"gremlin:int32","@value":3325},"outV":{"@type":"gremlin:int32","@value":268},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}]},"outE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":5120},"inV":{"@type":"gremlin:int32","@value":40},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":5121},"inV":{"@type
 ":"gremlin:int32","@value":33},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":5122},"inV":{"@type":"gremlin:int32","@value":79},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5123},"inV":{"@type":"gremlin:int32","@value":292},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5071},"inV":{"@type":"gremlin:int32","@value":50},"properties":{"weight":{"@type":"gremlin:int32","@value":9}}},{"id":{"@type":"gremlin:int32","@value":5072},"inV":{"@type":"gremlin:int32","@value":12},"properties":{"weight":{"@type":"gremlin:int32","@value":26}}},{"id":{"@type":"gremlin:int32","@value":5073},"inV":{"@type":"gremlin:int32","@value":18},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":5074},"inV":{"@type":"gremlin:int32","@value":24},"properties":{"weight":{"@type":"gremlin:int32","@va
 lue":9}}},{"id":{"@type":"gremlin:int32","@value":5075},"inV":{"@type":"gremlin:int32","@value":23},"properties":{"weight":{"@type":"gremlin:int32","@value":63}}},{"id":{"@type":"gremlin:int32","@value":5076},"inV":{"@type":"gremlin:int32","@value":13},"properties":{"weight":{"@type":"gremlin:int32","@value":12}}},{"id":{"@type":"gremlin:int32","@value":5077},"inV":{"@type":"gremlin:int32","@value":10},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":5078},"inV":{"@type":"gremlin:int32","@value":11},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":5079},"inV":{"@type":"gremlin:int32","@value":26},"properties":{"weight":{"@type":"gremlin:int32","@value":18}}},{"id":{"@type":"gremlin:int32","@value":5080},"inV":{"@type":"gremlin:int32","@value":22},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5081},"inV":{"@type":"gremlin:in
 t32","@value":16},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5082},"inV":{"@type":"gremlin:int32","@value":49},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5083},"inV":{"@type":"gremlin:int32","@value":25},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5084},"inV":{"@type":"gremlin:int32","@value":51},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5085},"inV":{"@type":"gremlin:int32","@value":15},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5086},"inV":{"@type":"gremlin:int32","@value":112},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":5087},"inV":{"@type":"gremlin:int32","@value":121},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"i
 d":{"@type":"gremlin:int32","@value":5088},"inV":{"@type":"gremlin:int32","@value":32},"properties":{"weight":{"@type":"gremlin:int32","@value":7}}},{"id":{"@type":"gremlin:int32","@value":5089},"inV":{"@type":"gremlin:int32","@value":68},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5090},"inV":{"@type":"gremlin:int32","@value":120},"properties":{"weight":{"@type":"gremlin:int32","@value":77}}},{"id":{"@type":"gremlin:int32","@value":5091},"inV":{"@type":"gremlin:int32","@value":103},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5092},"inV":{"@type":"gremlin:int32","@value":42},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":5093},"inV":{"@type":"gremlin:int32","@value":85},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":5094},"inV":{"@type":"gremlin:int32","@value"
 :76},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":5095},"inV":{"@type":"gremlin:int32","@value":181},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5096},"inV":{"@type":"gremlin:int32","@value":14},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5097},"inV":{"@type":"gremlin:int32","@value":122},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5098},"inV":{"@type":"gremlin:int32","@value":153},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":5099},"inV":{"@type":"gremlin:int32","@value":96},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5100},"inV":{"@type":"gremlin:int32","@value":82},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":
 "gremlin:int32","@value":5101},"inV":{"@type":"gremlin:int32","@value":110},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5102},"inV":{"@type":"gremlin:int32","@value":19},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}},{"id":{"@type":"gremlin:int32","@value":5103},"inV":{"@type":"gremlin:int32","@value":129},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5104},"inV":{"@type":"gremlin:int32","@value":84},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5105},"inV":{"@type":"gremlin:int32","@value":88},"properties":{"weight":{"@type":"gremlin:int32","@value":9}}},{"id":{"@type":"gremlin:int32","@value":5106},"inV":{"@type":"gremlin:int32","@value":97},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5107},"inV":{"@type":"gremlin:int32","@value":114},"proper
 ties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5108},"inV":{"@type":"gremlin:int32","@value":30},"properties":{"weight":{"@type":"gremlin:int32","@value":8}}},{"id":{"@type":"gremlin:int32","@value":5109},"inV":{"@type":"gremlin:int32","@value":31},"properties":{"weight":{"@type":"gremlin:int32","@value":8}}},{"id":{"@type":"gremlin:int32","@value":5110},"inV":{"@type":"gremlin:int32","@value":69},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":5111},"inV":{"@type":"gremlin:int32","@value":127},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5112},"inV":{"@type":"gremlin:int32","@value":60},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5113},"inV":{"@type":"gremlin:int32","@value":39},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32
 ","@value":5114},"inV":{"@type":"gremlin:int32","@value":21},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5115},"inV":{"@type":"gremlin:int32","@value":117},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5116},"inV":{"@type":"gremlin:int32","@value":78},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5117},"inV":{"@type":"gremlin:int32","@value":38},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5118},"inV":{"@type":"gremlin:int32","@value":169},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5119},"inV":{"@type":"gremlin:int32","@value":118},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}],"sungBy":[{"id":{"@type":"gremlin:int32","@value":7064},"inV":{"@type":"gremlin:int32","@value":340}}],"writte
 nBy":[{"id":{"@type":"gremlin:int32","@value":7063},"inV":{"@type":"gremlin:int32","@value":339}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":9},"value":"BERTHA"}],"songType":[{"id":{"@type":"gremlin:int64","@value":11},"value":"original"}],"performances":[{"id":{"@type":"gremlin:int64","@value":10},"value":{"@type":"gremlin:int32","@value":394}}]}}
+{"id":{"@type":"gremlin:int32","@value":5},"label":"song","inE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":194},"outV":{"@type":"gremlin:int32","@value":70},"properties":{"weight":{"@type":"gremlin:int32","@value":8}}},{"id":{"@type":"gremlin:int32","@value":962},"outV":{"@type":"gremlin:int32","@value":67},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":3},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5446},"outV":{"@type":"gremlin:int32","@value":231},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":6344},"outV":{"@type":"gremlin:int32","@value":21},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}},{"id":{"@type":"gremlin:int32","@value":1738},"outV":{"@type":"gremlin:int32","@value":82},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id"
 :{"@type":"gremlin:int32","@value":6666},"outV":{"@type":"gremlin:int32","@value":12},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1867},"outV":{"@type":"gremlin:int32","@value":94},"properties":{"weight":{"@type":"gremlin:int32","@value":15}}},{"id":{"@type":"gremlin:int32","@value":4300},"outV":{"@type":"gremlin:int32","@value":110},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":847},"outV":{"@type":"gremlin:int32","@value":171},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2832},"outV":{"@type":"gremlin:int32","@value":101},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":6032},"outV":{"@type":"gremlin:int32","@value":115},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1170},"outV":{"@type":"gremlin:int32","@
 value":26},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5330},"outV":{"@type":"gremlin:int32","@value":238},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1491},"outV":{"@type":"gremlin:int32","@value":164},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":1429},"outV":{"@type":"gremlin:int32","@value":83},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3033},"outV":{"@type":"gremlin:int32","@value":14},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":6298},"outV":{"@type":"gremlin:int32","@value":49},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1373},"outV":{"@type":"gremlin:int32","@value":130},"properties":{"weight":{"@type":"gremlin:int32","@value":11}}},{"
 id":{"@type":"gremlin:int32","@value":4447},"outV":{"@type":"gremlin:int32","@value":113},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5151},"outV":{"@type":"gremlin:int32","@value":125},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}},{"id":{"@type":"gremlin:int32","@value":5343},"outV":{"@type":"gremlin:int32","@value":165},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":6431},"outV":{"@type":"gremlin:int32","@value":134},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":1953},"outV":{"@type":"gremlin:int32","@value":148},"properties":{"weight":{"@type":"gremlin:int32","@value":10}}},{"id":{"@type":"gremlin:int32","@value":1634},"outV":{"@type":"gremlin:int32","@value":210},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2274},"outV":{"@type":"gremlin:int
 32","@value":25},"properties":{"weight":{"@type":"gremlin:int32","@value":8}}},{"id":{"@type":"gremlin:int32","@value":100},"outV":{"@type":"gremlin:int32","@value":46},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":933},"outV":{"@type":"gremlin:int32","@value":91},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2021},"outV":{"@type":"gremlin:int32","@value":149},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":6694},"outV":{"@type":"gremlin:int32","@value":141},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":4009},"outV":{"@type":"gremlin:int32","@value":225},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":682},"outV":{"@type":"gremlin:int32","@value":219},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}
 ,{"id":{"@type":"gremlin:int32","@value":3694},"outV":{"@type":"gremlin:int32","@value":3},"properties":{"weight":{"@type":"gremlin:int32","@value":57}}},{"id":{"@type":"gremlin:int32","@value":4718},"outV":{"@type":"gremlin:int32","@value":186},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}},{"id":{"@type":"gremlin:int32","@value":3055},"outV":{"@type":"gremlin:int32","@value":153},"properties":{"weight":{"@type":"gremlin:int32","@value":9}}},{"id":{"@type":"gremlin:int32","@value":2480},"outV":{"@type":"gremlin:int32","@value":68},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2736},"outV":{"@type":"gremlin:int32","@value":13},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":5426},"outV":{"@type":"gremlin:int32","@value":102},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":6899},"outV":{"@type":"gremlin:int3
 2","@value":147},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5879},"outV":{"@type":"gremlin:int32","@value":96},"properties":{"weight":{"@type":"gremlin:int32","@value":22}}},{"id":{"@type":"gremlin:int32","@value":6201},"outV":{"@type":"gremlin:int32","@value":319},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5370},"outV":{"@type":"gremlin:int32","@value":132},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":700},"outV":{"@type":"gremlin:int32","@value":206},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2236},"outV":{"@type":"gremlin:int32","@value":29},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":4604},"outV":{"@type":"gremlin:int32","@value":85},"properties":{"weight":{"@type":"gremlin:int32","@value":2}
 }},{"id":{"@type":"gremlin:int32","@value":5759},"outV":{"@type":"gremlin:int32","@value":129},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}}]},"outE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":273},"inV":{"@type":"gremlin:int32","@value":3},"properties":{"weight":{"@type":"gremlin:int32","@value":40}}},{"id":{"@type":"gremlin:int32","@value":274},"inV":{"@type":"gremlin:int32","@value":26},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":275},"inV":{"@type":"gremlin:int32","@value":114},"properties":{"weight":{"@type":"gremlin:int32","@value":40}}},{"id":{"@type":"gremlin:int32","@value":276},"inV":{"@type":"gremlin:int32","@value":1},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":277},"inV":{"@type":"gremlin:int32","@value":74},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":278},"inV":{"@type":
 "gremlin:int32","@value":122},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":279},"inV":{"@type":"gremlin:int32","@value":133},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":280},"inV":{"@type":"gremlin:int32","@value":83},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":281},"inV":{"@type":"gremlin:int32","@value":153},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":282},"inV":{"@type":"gremlin:int32","@value":159},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":283},"inV":{"@type":"gremlin:int32","@value":13},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":284},"inV":{"@type":"gremlin:int32","@value":25},"properties":{"weight":{"@type":"gremlin:int32","@value":1
 9}}},{"id":{"@type":"gremlin:int32","@value":285},"inV":{"@type":"gremlin:int32","@value":96},"properties":{"weight":{"@type":"gremlin:int32","@value":10}}},{"id":{"@type":"gremlin:int32","@value":286},"inV":{"@type":"gremlin:int32","@value":160},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":287},"inV":{"@type":"gremlin:int32","@value":32},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":288},"inV":{"@type":"gremlin:int32","@value":120},"properties":{"weight":{"@type":"gremlin:int32","@value":16}}},{"id":{"@type":"gremlin:int32","@value":289},"inV":{"@type":"gremlin:int32","@value":50},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":290},"inV":{"@type":"gremlin:int32","@value":116},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":291},"inV":{"@type":"gremlin:int32","@val
 ue":127},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}},{"id":{"@type":"gremlin:int32","@value":292},"inV":{"@type":"gremlin:int32","@value":65},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":293},"inV":{"@type":"gremlin:int32","@value":130},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":294},"inV":{"@type":"gremlin:int32","@value":125},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":295},"inV":{"@type":"gremlin:int32","@value":70},"properties":{"weight":{"@type":"gremlin:int32","@value":13}}},{"id":{"@type":"gremlin:int32","@value":296},"inV":{"@type":"gremlin:int32","@value":134},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":297},"inV":{"@type":"gremlin:int32","@value":161},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":
 "gremlin:int32","@value":298},"inV":{"@type":"gremlin:int32","@value":162},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":299},"inV":{"@type":"gremlin:int32","@value":124},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":300},"inV":{"@type":"gremlin:int32","@value":38},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":301},"inV":{"@type":"gremlin:int32","@value":29},"properties":{"weight":{"@type":"gremlin:int32","@value":11}}},{"id":{"@type":"gremlin:int32","@value":302},"inV":{"@type":"gremlin:int32","@value":163},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":303},"inV":{"@type":"gremlin:int32","@value":94},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":304},"inV":{"@type":"gremlin:int32","@value":85},"properties":
 {"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":305},"inV":{"@type":"gremlin:int32","@value":164},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}},{"id":{"@type":"gremlin:int32","@value":306},"inV":{"@type":"gremlin:int32","@value":64},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":307},"inV":{"@type":"gremlin:int32","@value":150},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":308},"inV":{"@type":"gremlin:int32","@value":165},"properties":{"weight":{"@type":"gremlin:int32","@value":7}}},{"id":{"@type":"gremlin:int32","@value":309},"inV":{"@type":"gremlin:int32","@value":92},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":310},"inV":{"@type":"gremlin:int32","@value":140},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value
 ":311},"inV":{"@type":"gremlin:int32","@value":166},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}],"sungBy":[{"id":{"@type":"gremlin:int32","@value":7582},"inV":{"@type":"gremlin:int32","@value":340}}],"writtenBy":[{"id":{"@type":"gremlin:int32","@value":7581},"inV":{"@type":"gremlin:int32","@value":446}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":12},"value":"GOING DOWN THE ROAD FEELING BAD"}],"songType":[{"id":{"@type":"gremlin:int64","@value":14},"value":"cover"}],"performances":[{"id":{"@type":"gremlin:int64","@value":13},"value":{"@type":"gremlin:int32","@value":293}}]}}
+{"id":{"@type":"gremlin:int32","@value":6},"label":"song","inE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":4},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2023},"outV":{"@type":"gremlin:int32","@value":282},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}]},"outE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":2406},"inV":{"@type":"gremlin:int32","@value":293},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2407},"inV":{"@type":"gremlin:int32","@value":96},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}],"sungBy":[{"id":{"@type":"gremlin:int32","@value":7782},"inV":{"@type":"gremlin:int32","@value":351}}],"writtenBy":[{"id":{"@type":"gremlin:int32","@value":7781},"inV":{"@type":"gremlin:int32","@value":527}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":15},"value":"
 MONA"}],"songType":[{"id":{"@type":"gremlin:int64","@value":17},"value":"cover"}],"performances":[{"id":{"@type":"gremlin:int64","@value":16},"value":{"@type":"gremlin:int32","@value":1}}]}}
+{"id":{"@type":"gremlin:int32","@value":7},"label":"song","inE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":2607},"outV":{"@type":"gremlin:int32","@value":295},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}]},"outE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":5},"inV":{"@type":"gremlin:int32","@value":8},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":18},"value":"WHERE HAVE THE HEROES GONE"}],"songType":[{"id":{"@type":"gremlin:int64","@value":20},"value":""}],"performances":[{"id":{"@type":"gremlin:int64","@value":19},"value":{"@type":"gremlin:int32","@value":0}}]}}
+{"id":{"@type":"gremlin:int32","@value":8},"label":"song","inE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":4705},"outV":{"@type":"gremlin:int32","@value":111},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5},"outV":{"@type":"gremlin:int32","@value":7},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5901},"outV":{"@type":"gremlin:int32","@value":96},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}]},"outE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":2976},"inV":{"@type":"gremlin:int32","@value":302},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2977},"inV":{"@type":"gremlin:int32","@value":96},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2978},"inV":{"@type":"gremlin:int32","@value":72},"properties":{"weight":{"@type":"gremlin:in
 t32","@value":1}}}],"sungBy":[{"id":{"@type":"gremlin:int32","@value":7814},"inV":{"@type":"gremlin:int32","@value":351}}],"writtenBy":[{"id":{"@type":"gremlin:int32","@value":7813},"inV":{"@type":"gremlin:int32","@value":674}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":21},"value":"OH BOY"}],"songType":[{"id":{"@type":"gremlin:int64","@value":23},"value":"cover"}],"performances":[{"id":{"@type":"gremlin:int64","@value":22},"value":{"@type":"gremlin:int32","@value":2}}]}}
+{"id":{"@type":"gremlin:int32","@value":9},"label":"song","inE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":3776},"outV":{"@type":"gremlin:int32","@value":3},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":65},"outV":{"@type":"gremlin:int32","@value":46},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":1923},"outV":{"@type":"gremlin:int32","@value":103},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":5956},"outV":{"@type":"gremlin:int32","@value":50},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3077},"outV":{"@type":"gremlin:int32","@value":153},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5832},"outV":{"@type":"gremlin:int32","@value":76},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{
 "id":{"@type":"gremlin:int32","@value":1161},"outV":{"@type":"gremlin:int32","@value":26},"properties":{"weight":{"@type":"gremlin:int32","@value":8}}},{"id":{"@type":"gremlin:int32","@value":2699},"outV":{"@type":"gremlin:int32","@value":13},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":6539},"outV":{"@type":"gremlin:int32","@value":55},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":6667},"outV":{"@type":"gremlin:int32","@value":12},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":2578},"outV":{"@type":"gremlin:int32","@value":57},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":787},"outV":{"@type":"gremlin:int32","@value":122},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3542},"outV":{"@type":"gremlin:int32","@
 value":201},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2775},"outV":{"@type":"gremlin:int32","@value":15},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":2840},"outV":{"@type":"gremlin:int32","@value":101},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":4953},"outV":{"@type":"gremlin:int32","@value":86},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":1572},"outV":{"@type":"gremlin:int32","@value":18},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":229},"outV":{"@type":"gremlin:int32","@value":70},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4264},"outV":{"@type":"gremlin:int32","@value":10},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id"
 :{"@type":"gremlin:int32","@value":4969},"outV":{"@type":"gremlin:int32","@value":236},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3498},"outV":{"@type":"gremlin:int32","@value":58},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":5226},"outV":{"@type":"gremlin:int32","@value":216},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5548},"outV":{"@type":"gremlin:int32","@value":166},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2990},"outV":{"@type":"gremlin:int32","@value":14},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":3950},"outV":{"@type":"gremlin:int32","@value":138},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2488},"outV":{"@type":"gremlin:int32","@
 value":68},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":6776},"outV":{"@type":"gremlin:int32","@value":39},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3641},"outV":{"@type":"gremlin:int32","@value":24},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":1532},"outV":{"@type":"gremlin:int32","@value":164},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":1853},"outV":{"@type":"gremlin:int32","@value":94},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":638},"outV":{"@type":"gremlin:int32","@value":23},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":6335},"outV":{"@type":"gremlin:int32","@value":21},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}]},"out
 E":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":6},"inV":{"@type":"gremlin:int32","@value":10},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":7},"inV":{"@type":"gremlin:int32","@value":11},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":8},"inV":{"@type":"gremlin:int32","@value":12},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":9},"inV":{"@type":"gremlin:int32","@value":13},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}},{"id":{"@type":"gremlin:int32","@value":10},"inV":{"@type":"gremlin:int32","@value":14},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":11},"inV":{"@type":"gremlin:int32","@value":15},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":12},"inV":{"@type":"gremlin:int32","@value"
 :16},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":13},"inV":{"@type":"gremlin:int32","@value":17},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":14},"inV":{"@type":"gremlin:int32","@value":18},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":15},"inV":{"@type":"gremlin:int32","@value":19},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":16},"inV":{"@type":"gremlin:int32","@value":20},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":17},"inV":{"@type":"gremlin:int32","@value":21},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":18},"inV":{"@type":"gremlin:int32","@value":22},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32"
 ,"@value":19},"inV":{"@type":"gremlin:int32","@value":23},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":20},"inV":{"@type":"gremlin:int32","@value":24},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":21},"inV":{"@type":"gremlin:int32","@value":25},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":22},"inV":{"@type":"gremlin:int32","@value":26},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":23},"inV":{"@type":"gremlin:int32","@value":27},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":24},"inV":{"@type":"gremlin:int32","@value":28},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":25},"inV":{"@type":"gremlin:int32","@value":29},"properties":{"weight":{"@type":"gremli
 n:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":26},"inV":{"@type":"gremlin:int32","@value":30},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":27},"inV":{"@type":"gremlin:int32","@value":31},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":28},"inV":{"@type":"gremlin:int32","@value":32},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":29},"inV":{"@type":"gremlin:int32","@value":33},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":30},"inV":{"@type":"gremlin:int32","@value":34},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":31},"inV":{"@type":"gremlin:int32","@value":35},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":32},"inV":{"@type":"gremlin:int32"
 ,"@value":36},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":33},"inV":{"@type":"gremlin:int32","@value":37},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":34},"inV":{"@type":"gremlin:int32","@value":38},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":35},"inV":{"@type":"gremlin:int32","@value":39},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":36},"inV":{"@type":"gremlin:int32","@value":40},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":37},"inV":{"@type":"gremlin:int32","@value":41},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":38},"inV":{"@type":"gremlin:int32","@value":42},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"greml
 in:int32","@value":39},"inV":{"@type":"gremlin:int32","@value":43},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}}],"sungBy":[{"id":{"@type":"gremlin:int32","@value":7190},"inV":{"@type":"gremlin:int32","@value":340}}],"writtenBy":[{"id":{"@type":"gremlin:int32","@value":7189},"inV":{"@type":"gremlin:int32","@value":339}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":24},"value":"HERE COMES SUNSHINE"}],"songType":[{"id":{"@type":"gremlin:int64","@value":26},"value":"original"}],"performances":[{"id":{"@type":"gremlin:int64","@value":25},"value":{"@type":"gremlin:int32","@value":65}}]}}
+{"id":{"@type":"gremlin:int32","@value":10},"label":"song","inE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":3841},"outV":{"@type":"gremlin:int32","@value":60},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1027},"outV":{"@type":"gremlin:int32","@value":73},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":6},"outV":{"@type":"gremlin:int32","@value":9},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3335},"outV":{"@type":"gremlin:int32","@value":155},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4103},"outV":{"@type":"gremlin:int32","@value":48},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":6279},"outV":{"@type":"gremlin:int32","@value":49},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"
 id":{"@type":"gremlin:int32","@value":4233},"outV":{"@type":"gremlin:int32","@value":52},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4878},"outV":{"@type":"gremlin:int32","@value":100},"properties":{"weight":{"@type":"gremlin:int32","@value":19}}},{"id":{"@type":"gremlin:int32","@value":5264},"outV":{"@type":"gremlin:int32","@value":32},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":2196},"outV":{"@type":"gremlin:int32","@value":75},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":151},"outV":{"@type":"gremlin:int32","@value":108},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":1571},"outV":{"@type":"gremlin:int32","@value":18},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":3619},"outV":{"@type":"gremlin:int32","
 @value":24},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3237},"outV":{"@type":"gremlin:int32","@value":63},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":4647},"outV":{"@type":"gremlin:int32","@value":154},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4521},"outV":{"@type":"gremlin:int32","@value":105},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":1195},"outV":{"@type":"gremlin:int32","@value":26},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":6444},"outV":{"@type":"gremlin:int32","@value":187},"properties":{"weight":{"@type":"gremlin:int32","@value":9}}},{"id":{"@type":"gremlin:int32","@value":6956},"outV":{"@type":"gremlin:int32","@value":84},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"
 id":{"@type":"gremlin:int32","@value":687},"outV":{"@type":"gremlin:int32","@value":157},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4784},"outV":{"@type":"gremlin:int32","@value":114},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":6064},"outV":{"@type":"gremlin:int32","@value":115},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1714},"outV":{"@type":"gremlin:int32","@value":82},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":3890},"outV":{"@type":"gremlin:int32","@value":51},"properties":{"weight":{"@type":"gremlin:int32","@value":9}}},{"id":{"@type":"gremlin:int32","@value":55},"outV":{"@type":"gremlin:int32","@value":46},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5175},"outV":{"@type":"gremlin:int32","@v
 alue":71},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1337},"outV":{"@type":"gremlin:int32","@value":31},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1083},"outV":{"@type":"gremlin:int32","@value":59},"properties":{"weight":{"@type":"gremlin:int32","@value":10}}},{"id":{"@type":"gremlin:int32","@value":4155},"outV":{"@type":"gremlin:int32","@value":54},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}},{"id":{"@type":"gremlin:int32","@value":6077},"outV":{"@type":"gremlin:int32","@value":72},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":5441},"outV":{"@type":"gremlin:int32","@value":239},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1987},"outV":{"@type":"gremlin:int32","@value":152},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id
 ":{"@type":"gremlin:int32","@value":1860},"outV":{"@type":"gremlin:int32","@value":94},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2116},"outV":{"@type":"gremlin:int32","@value":17},"properties":{"weight":{"@type":"gremlin:int32","@value":7}}},{"id":{"@type":"gremlin:int32","@value":3269},"outV":{"@type":"gremlin:int32","@value":160},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":454},"outV":{"@type":"gremlin:int32","@value":38},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3142},"outV":{"@type":"gremlin:int32","@value":104},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":2505},"outV":{"@type":"gremlin:int32","@value":57},"properties":{"weight":{"@type":"gremlin:int32","@value":12}}},{"id":{"@type":"gremlin:int32","@value":6603},"outV":{"@type":"gremlin:int32","@v
 alue":127},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":6859},"outV":{"@type":"gremlin:int32","@value":64},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":717},"outV":{"@type":"gremlin:int32","@value":80},"properties":{"weight":{"@type":"gremlin:int32","@value":9}}},{"id":{"@type":"gremlin:int32","@value":1360},"outV":{"@type":"gremlin:int32","@value":130},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":3026},"outV":{"@type":"gremlin:int32","@value":14},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5972},"outV":{"@type":"gremlin:int32","@value":50},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":5077},"outV":{"@type":"gremlin:int32","@value":4},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{
 "@type":"gremlin:int32","@value":2392},"outV":{"@type":"gremlin:int32","@value":87},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":1250},"outV":{"@type":"gremlin:int32","@value":27},"properties":{"weight":{"@type":"gremlin:int32","@value":10}}},{"id":{"@type":"gremlin:int32","@value":4706},"outV":{"@type":"gremlin:int32","@value":111},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":6755},"outV":{"@type":"gremlin:int32","@value":53},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":485},"outV":{"@type":"gremlin:int32","@value":98},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":2917},"outV":{"@type":"gremlin:int32","@value":78},"properties":{"weight":{"@type":"gremlin:int32","@value":10}}},{"id":{"@type":"gremlin:int32","@value":3559},"outV":{"@type":"gremlin:int32","@valu
 e":56},"properties":{"weight":{"@type":"gremlin:int32","@value":16}}},{"id":{"@type":"gremlin:int32","@value":3436},"outV":{"@type":"gremlin:int32","@value":58},"properties":{"weight":{"@type":"gremlin:int32","@value":10}}},{"id":{"@type":"gremlin:int32","@value":3820},"outV":{"@type":"gremlin:int32","@value":88},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4463},"outV":{"@type":"gremlin:int32","@value":202},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":880},"outV":{"@type":"gremlin:int32","@value":189},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":6256},"outV":{"@type":"gremlin:int32","@value":117},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3698},"outV":{"@type":"gremlin:int32","@value":3},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{
 "@type":"gremlin:int32","@value":2035},"outV":{"@type":"gremlin:int32","@value":180},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2291},"outV":{"@type":"gremlin:int32","@value":25},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":3317},"outV":{"@type":"gremlin:int32","@value":252},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":2806},"outV":{"@type":"gremlin:int32","@value":15},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":2427},"outV":{"@type":"gremlin:int32","@value":68},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":6782},"outV":{"@type":"gremlin:int32","@value":39},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":4351},"outV":{"@type":"gremlin:int32","@valu
 e":62},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}}]},"outE":{"followedBy":[{"id":{"@type":"gremlin:int32","@value":4235},"inV":{"@type":"gremlin:int32","@value":56},"properties":{"weight":{"@type":"gremlin:int32","@value":13}}},{"id":{"@type":"gremlin:int32","@value":4236},"inV":{"@type":"gremlin:int32","@value":27},"properties":{"weight":{"@type":"gremlin:int32","@value":7}}},{"id":{"@type":"gremlin:int32","@value":4237},"inV":{"@type":"gremlin:int32","@value":58},"properties":{"weight":{"@type":"gremlin:int32","@value":11}}},{"id":{"@type":"gremlin:int32","@value":4238},"inV":{"@type":"gremlin:int32","@value":80},"properties":{"weight":{"@type":"gremlin:int32","@value":6}}},{"id":{"@type":"gremlin:int32","@value":4239},"inV":{"@type":"gremlin:int32","@value":59},"properties":{"weight":{"@type":"gremlin:int32","@value":9}}},{"id":{"@type":"gremlin:int32","@value":4240},"inV":{"@type":"gremlin:int32","@value":100},"properties":{"weight":{"@type":"gremlin:int32","@v
 alue":21}}},{"id":{"@type":"gremlin:int32","@value":4241},"inV":{"@type":"gremlin:int32","@value":104},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":4242},"inV":{"@type":"gremlin:int32","@value":50},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":4243},"inV":{"@type":"gremlin:int32","@value":48},"properties":{"weight":{"@type":"gremlin:int32","@value":8}}},{"id":{"@type":"gremlin:int32","@value":4244},"inV":{"@type":"gremlin:int32","@value":54},"properties":{"weight":{"@type":"gremlin:int32","@value":13}}},{"id":{"@type":"gremlin:int32","@value":4245},"inV":{"@type":"gremlin:int32","@value":19},"properties":{"weight":{"@type":"gremlin:int32","@value":9}}},{"id":{"@type":"gremlin:int32","@value":4246},"inV":{"@type":"gremlin:int32","@value":72},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":4247},"inV":{"@type":"gremlin:i
 nt32","@value":14},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4248},"inV":{"@type":"gremlin:int32","@value":122},"properties":{"weight":{"@type":"gremlin:int32","@value":2}}},{"id":{"@type":"gremlin:int32","@value":4249},"inV":{"@type":"gremlin:int32","@value":235},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4250},"inV":{"@type":"gremlin:int32","@value":218},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4251},"inV":{"@type":"gremlin:int32","@value":252},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4252},"inV":{"@type":"gremlin:int32","@value":89},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":4253},"inV":{"@type":"gremlin:int32","@value":57},"properties":{"weight":{"@type":"gremlin:int32","@value":12}}}
 ,{"id":{"@type":"gremlin:int32","@value":4254},"inV":{"@type":"gremlin:int32","@value":49},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":4255},"inV":{"@type":"gremlin:int32","@value":94},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":4256},"inV":{"@type":"gremlin:int32","@value":153},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4257},"inV":{"@type":"gremlin:int32","@value":13},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4258},"inV":{"@type":"gremlin:int32","@value":160},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4259},"inV":{"@type":"gremlin:int32","@value":51},"properties":{"weight":{"@type":"gremlin:int32","@value":10}}},{"id":{"@type":"gremlin:int32","@value":4260},"inV":{"@type":"gremlin:int32","@va
 lue":18},"properties":{"weight":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":4261},"inV":{"@type":"gremlin:int32","@value":202},"properties":{"weight":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":4262},"inV":{"@type":"gremlin:int32","@value":17},"properties":{"weight":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":4263},"inV":{"@type":"gremlin:int32","@value":46},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4264},"inV":{"@type":"gremlin:int32","@value":9},"properties":{"weight":{"@type":"gremlin:int32","@value":1}}},{"id":{"@type":"gremlin:int32","@value":4265},"inV":{"@type":"gremlin:int32","@value":55},"properties"

<TRUNCATED>

[29/48] tinkerpop git commit: TINKERPOP-1274: GraphSON 2.0.

Posted by sp...@apache.org.
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/grateful-dead-typed.json
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/grateful-dead-typed.json b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/grateful-dead-typed.json
index 9679502..3806d5e 100644
--- a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/grateful-dead-typed.json
+++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/grateful-dead-typed.json
@@ -1,257 +1,257 @@
 {"@class":"java.util.HashMap","id":1,"label":"song","inE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":3059,"outV":153,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":276,"outV":5,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3704,"outV":3,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":4383,"outV":62,"properties":{"@class":"java.util.HashMap","weight":1}}]]},"outE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":0,"inV":2,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1,"inV":3,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":2,"inV":4,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3,"inV":5,"properties":{"@class":"j
 ava.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":4,"inV":6,"properties":{"@class":"java.util.HashMap","weight":1}}]],"sungBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":7612,"inV":340}]],"writtenBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":7611,"inV":527}]]},"properties":{"@class":"java.util.HashMap","name":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",0],"value":"HEY BO DIDDLEY"}]],"songType":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",2],"value":"cover"}]],"performances":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",1],"value":5}]]}}
 {"@class":"java.util.HashMap","id":2,"label":"song","inE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":0,"outV":1,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":323,"outV":34,"properties":{"@class":"java.util.HashMap","weight":1}}]]},"outE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":6190,"inV":123,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":6191,"inV":50,"properties":{"@class":"java.util.HashMap","weight":1}}]],"sungBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":7666,"inV":525}]],"writtenBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":7665,"inV":525}]]},"properties":{"@class":"java.util.HashMap","name":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",3],"value":"IM A MAN"}]],"songType":["java.util.ArrayList",[{"@class":"j
 ava.util.HashMap","id":["java.lang.Long",5],"value":"cover"}]],"performances":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",4],"value":1}]]}}
-{"@class":"java.util.HashMap","id":3,"label":"song","inE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":1,"outV":1,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":2051,"outV":92,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":1412,"outV":83,"properties":{"@class":"java.util.HashMap","weight":6}},{"@class":"java.util.HashMap","id":6669,"outV":12,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1166,"outV":26,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":6286,"outV":49,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":910,"outV":91,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":526,"outV":120,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap"
 ,"id":273,"outV":5,"properties":{"@class":"java.util.HashMap","weight":40}},{"@class":"java.util.HashMap","id":2194,"outV":235,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1684,"outV":124,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3221,"outV":63,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1941,"outV":148,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":2712,"outV":13,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":6425,"outV":134,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5787,"outV":76,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5148,"outV":125,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":6692,"outV":141,"properties":{"@c
 lass":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":6310,"outV":123,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":6448,"outV":187,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":2225,"outV":226,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5042,"outV":209,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":4789,"outV":114,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":1464,"outV":81,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2232,"outV":215,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":4665,"outV":154,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2235,"outV":29,"properties":{"@class":"java.util.HashMap","weight":1
 63}},{"@class":"java.util.HashMap","id":6208,"outV":319,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":706,"outV":206,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":835,"outV":171,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5188,"outV":99,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1862,"outV":94,"properties":{"@class":"java.util.HashMap","weight":10}},{"@class":"java.util.HashMap","id":6343,"outV":21,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1735,"outV":82,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":4937,"outV":277,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3276,"outV":160,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id"
 :3149,"outV":104,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1358,"outV":130,"properties":{"@class":"java.util.HashMap","weight":18}},{"@class":"java.util.HashMap","id":4304,"outV":110,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1105,"outV":59,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":722,"outV":80,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":4182,"outV":54,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1499,"outV":164,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":2397,"outV":179,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":6623,"outV":127,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":351,"outV":178,"properties":{"@class
 ":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2018,"outV":149,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":7011,"outV":89,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5348,"outV":165,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2278,"outV":25,"properties":{"@class":"java.util.HashMap","weight":7}},{"@class":"java.util.HashMap","id":1255,"outV":27,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3048,"outV":153,"properties":{"@class":"java.util.HashMap","weight":13}},{"@class":"java.util.HashMap","id":5867,"outV":96,"properties":{"@class":"java.util.HashMap","weight":116}},{"@class":"java.util.HashMap","id":364,"outV":74,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":492,"outV":98,"properties":{"@class":"java.util.HashMap","weight":1}},{"@c
 lass":"java.util.HashMap","id":3948,"outV":138,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":4335,"outV":62,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3312,"outV":252,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5745,"outV":129,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":4596,"outV":85,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":5367,"outV":132,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":633,"outV":23,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":891,"outV":140,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5375,"outV":69,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":6143,"out
 V":289,"properties":{"@class":"java.util.HashMap","weight":3}}]]},"outE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":3712,"inV":27,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3713,"inV":110,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":3714,"inV":215,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":3715,"inV":127,"properties":{"@class":"java.util.HashMap","weight":10}},{"@class":"java.util.HashMap","id":3716,"inV":83,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":3717,"inV":103,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3718,"inV":68,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3719,"inV":134,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"
 java.util.HashMap","id":3720,"inV":25,"properties":{"@class":"java.util.HashMap","weight":10}},{"@class":"java.util.HashMap","id":3721,"inV":125,"properties":{"@class":"java.util.HashMap","weight":54}},{"@class":"java.util.HashMap","id":3722,"inV":130,"properties":{"@class":"java.util.HashMap","weight":26}},{"@class":"java.util.HashMap","id":3723,"inV":141,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3724,"inV":145,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3725,"inV":319,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":3726,"inV":12,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3727,"inV":160,"properties":{"@class":"java.util.HashMap","weight":37}},{"@class":"java.util.HashMap","id":3728,"inV":70,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3729,"inV":123,"pr
 operties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3730,"inV":129,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3731,"inV":30,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3732,"inV":148,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3733,"inV":211,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":3734,"inV":87,"properties":{"@class":"java.util.HashMap","weight":13}},{"@class":"java.util.HashMap","id":3735,"inV":164,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":3736,"inV":64,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3737,"inV":320,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3738,"inV":61,"properties":{"@class":"java.util.HashMap","weigh
 t":3}},{"@class":"java.util.HashMap","id":3739,"inV":210,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":3740,"inV":50,"properties":{"@class":"java.util.HashMap","weight":7}},{"@class":"java.util.HashMap","id":3741,"inV":128,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":3742,"inV":315,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3743,"inV":261,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3744,"inV":213,"properties":{"@class":"java.util.HashMap","weight":13}},{"@class":"java.util.HashMap","id":3745,"inV":72,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3746,"inV":38,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":3747,"inV":204,"properties":{"@class":"java.util.HashMap","weight":14}},{"@class":"java.util.HashMap","id":37
 48,"inV":62,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3749,"inV":150,"properties":{"@class":"java.util.HashMap","weight":8}},{"@class":"java.util.HashMap","id":3750,"inV":309,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3751,"inV":131,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3752,"inV":151,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3753,"inV":321,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3754,"inV":90,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3755,"inV":82,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3756,"inV":120,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3757,"inV":46,"properties":{"@class":"java.util.
 HashMap","weight":5}},{"@class":"java.util.HashMap","id":3758,"inV":157,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":3759,"inV":59,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3760,"inV":81,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3761,"inV":86,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":3762,"inV":140,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3763,"inV":201,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3764,"inV":214,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3765,"inV":185,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3766,"inV":216,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.Has
 hMap","id":3767,"inV":217,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3768,"inV":236,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":3769,"inV":193,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3770,"inV":79,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3771,"inV":84,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3772,"inV":23,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3773,"inV":31,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3774,"inV":240,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3775,"inV":292,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3776,"inV":9,"properties":{"@class":
 "java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3777,"inV":259,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3694,"inV":5,"properties":{"@class":"java.util.HashMap","weight":57}},{"@class":"java.util.HashMap","id":3695,"inV":114,"properties":{"@class":"java.util.HashMap","weight":30}},{"@class":"java.util.HashMap","id":3696,"inV":74,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3697,"inV":78,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":3698,"inV":10,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3699,"inV":26,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":3700,"inV":153,"properties":{"@class":"java.util.HashMap","weight":7}},{"@class":"java.util.HashMap","id":3701,"inV":4,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.
 util.HashMap","id":3702,"inV":317,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3703,"inV":13,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":3704,"inV":1,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3705,"inV":21,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3706,"inV":57,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3707,"inV":122,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3708,"inV":318,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3709,"inV":94,"properties":{"@class":"java.util.HashMap","weight":26}},{"@class":"java.util.HashMap","id":3710,"inV":96,"properties":{"@class":"java.util.HashMap","weight":7}},{"@class":"java.util.HashMap","id":3711,"inV":124,"properties":{"
 @class":"java.util.HashMap","weight":15}}]],"sungBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":7808,"inV":351}]],"writtenBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":7807,"inV":671}]]},"properties":{"@class":"java.util.HashMap","name":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",6],"value":"NOT FADE AWAY"}]],"songType":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",8],"value":"cover"}]],"performances":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",7],"value":531}]]}}
-{"@class":"java.util.HashMap","id":4,"label":"song","inE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":128,"outV":97,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1664,"outV":267,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2,"outV":1,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":4099,"outV":48,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1667,"outV":124,"properties":{"@class":"java.util.HashMap","weight":15}},{"@class":"java.util.HashMap","id":899,"outV":140,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1156,"outV":26,"properties":{"@class":"java.util.HashMap","weight":16}},{"@class":"java.util.HashMap","id":773,"outV":122,"properties":{"@class":"java.util.HashMap","weight":9}},{"@class":"java.util.Hash
 Map","id":6534,"outV":242,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":6664,"outV":12,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":1032,"outV":73,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5129,"outV":222,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5387,"outV":69,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5517,"outV":43,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5006,"outV":30,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":6030,"outV":204,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":2063,"outV":92,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":915,"outV":91,"properties":{"@
 class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":6940,"outV":84,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":2464,"outV":68,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5795,"outV":76,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3620,"outV":24,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":4772,"outV":114,"properties":{"@class":"java.util.HashMap","weight":25}},{"@class":"java.util.HashMap","id":2982,"outV":14,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":3367,"outV":184,"properties":{"@class":"java.util.HashMap","weight":6}},{"@class":"java.util.HashMap","id":2345,"outV":87,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":2861,"outV":101,"properties":{"@class":"java.util.HashMap","weight":6}}
 ,{"@class":"java.util.HashMap","id":1840,"outV":275,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5425,"outV":102,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":180,"outV":70,"properties":{"@class":"java.util.HashMap","weight":46}},{"@class":"java.util.HashMap","id":2613,"outV":158,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5562,"outV":162,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5434,"outV":217,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1469,"outV":81,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":446,"outV":38,"properties":{"@class":"java.util.HashMap","weight":7}},{"@class":"java.util.HashMap","id":2494,"outV":90,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":326
 6,"outV":160,"properties":{"@class":"java.util.HashMap","weight":10}},{"@class":"java.util.HashMap","id":326,"outV":34,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":6855,"outV":64,"properties":{"@class":"java.util.HashMap","weight":12}},{"@class":"java.util.HashMap","id":583,"outV":120,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":73,"outV":46,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":4425,"outV":212,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":4941,"outV":86,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":1613,"outV":210,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":6350,"outV":21,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3535,"outV":201,"properties":{"@class":"java
 .util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":980,"outV":11,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":5206,"outV":99,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1494,"outV":164,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":5847,"outV":61,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":6490,"outV":187,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2781,"outV":15,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":5600,"outV":42,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":353,"outV":74,"properties":{"@class":"java.util.HashMap","weight":6}},{"@class":"java.util.HashMap","id":5474,"outV":79,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java
 .util.HashMap","id":3811,"outV":88,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":1891,"outV":103,"properties":{"@class":"java.util.HashMap","weight":19}},{"@class":"java.util.HashMap","id":5989,"outV":50,"properties":{"@class":"java.util.HashMap","weight":12}},{"@class":"java.util.HashMap","id":4327,"outV":110,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":2538,"outV":57,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":3050,"outV":153,"properties":{"@class":"java.util.HashMap","weight":13}},{"@class":"java.util.HashMap","id":4970,"outV":236,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2283,"outV":25,"properties":{"@class":"java.util.HashMap","weight":9}},{"@class":"java.util.HashMap","id":236,"outV":145,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":6126,"outV":72,"
 properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5232,"outV":214,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":4594,"outV":85,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":4084,"outV":109,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1652,"outV":213,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":3701,"outV":3,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":5621,"outV":22,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":629,"outV":23,"properties":{"@class":"java.util.HashMap","weight":10}},{"@class":"java.util.HashMap","id":7029,"outV":89,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5238,"outV":32,"properties":{"@class":"java.util.HashMap"
 ,"weight":3}},{"@class":"java.util.HashMap","id":2684,"outV":13,"properties":{"@class":"java.util.HashMap","weight":9}},{"@class":"java.util.HashMap","id":3325,"outV":268,"properties":{"@class":"java.util.HashMap","weight":1}}]]},"outE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":5120,"inV":40,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":5121,"inV":33,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":5122,"inV":79,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5123,"inV":292,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5071,"inV":50,"properties":{"@class":"java.util.HashMap","weight":9}},{"@class":"java.util.HashMap","id":5072,"inV":12,"properties":{"@class":"java.util.HashMap","weight":26}},{"@class":"java.util.HashMap","id":5073,"inV":18,"properties"
 :{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":5074,"inV":24,"properties":{"@class":"java.util.HashMap","weight":9}},{"@class":"java.util.HashMap","id":5075,"inV":23,"properties":{"@class":"java.util.HashMap","weight":63}},{"@class":"java.util.HashMap","id":5076,"inV":13,"properties":{"@class":"java.util.HashMap","weight":12}},{"@class":"java.util.HashMap","id":5077,"inV":10,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":5078,"inV":11,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":5079,"inV":26,"properties":{"@class":"java.util.HashMap","weight":18}},{"@class":"java.util.HashMap","id":5080,"inV":22,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5081,"inV":16,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5082,"inV":49,"properties":{"@class":"java.util.HashMap","weight":1}},{"@cl
 ass":"java.util.HashMap","id":5083,"inV":25,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5084,"inV":51,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5085,"inV":15,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5086,"inV":112,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":5087,"inV":121,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5088,"inV":32,"properties":{"@class":"java.util.HashMap","weight":7}},{"@class":"java.util.HashMap","id":5089,"inV":68,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5090,"inV":120,"properties":{"@class":"java.util.HashMap","weight":77}},{"@class":"java.util.HashMap","id":5091,"inV":103,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5092,"inV":42,"pr
 operties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":5093,"inV":85,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":5094,"inV":76,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":5095,"inV":181,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5096,"inV":14,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5097,"inV":122,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5098,"inV":153,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":5099,"inV":96,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5100,"inV":82,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":5101,"inV":110,"properties":{"@class":"java.util.HashMap","weight"
 :1}},{"@class":"java.util.HashMap","id":5102,"inV":19,"properties":{"@class":"java.util.HashMap","weight":6}},{"@class":"java.util.HashMap","id":5103,"inV":129,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5104,"inV":84,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5105,"inV":88,"properties":{"@class":"java.util.HashMap","weight":9}},{"@class":"java.util.HashMap","id":5106,"inV":97,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5107,"inV":114,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5108,"inV":30,"properties":{"@class":"java.util.HashMap","weight":8}},{"@class":"java.util.HashMap","id":5109,"inV":31,"properties":{"@class":"java.util.HashMap","weight":8}},{"@class":"java.util.HashMap","id":5110,"inV":69,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":5111,"inV"
 :127,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5112,"inV":60,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5113,"inV":39,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5114,"inV":21,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5115,"inV":117,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5116,"inV":78,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5117,"inV":38,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5118,"inV":169,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5119,"inV":118,"properties":{"@class":"java.util.HashMap","weight":1}}]],"sungBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":7064,"inV":340}]],"writ
 tenBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":7063,"inV":339}]]},"properties":{"@class":"java.util.HashMap","name":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",9],"value":"BERTHA"}]],"songType":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",11],"value":"original"}]],"performances":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",10],"value":394}]]}}
-{"@class":"java.util.HashMap","id":5,"label":"song","inE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":962,"outV":67,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":194,"outV":70,"properties":{"@class":"java.util.HashMap","weight":8}},{"@class":"java.util.HashMap","id":3,"outV":1,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5446,"outV":231,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":6344,"outV":21,"properties":{"@class":"java.util.HashMap","weight":6}},{"@class":"java.util.HashMap","id":6666,"outV":12,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1738,"outV":82,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1867,"outV":94,"properties":{"@class":"java.util.HashMap","weight":15}},{"@class":"java.util.HashMap
 ","id":4300,"outV":110,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":847,"outV":171,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2832,"outV":101,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":6032,"outV":115,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1170,"outV":26,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5330,"outV":238,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1491,"outV":164,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":1429,"outV":83,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":3033,"outV":14,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":6298,"outV":49,"properties":{"@
 class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1373,"outV":130,"properties":{"@class":"java.util.HashMap","weight":11}},{"@class":"java.util.HashMap","id":4447,"outV":113,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5151,"outV":125,"properties":{"@class":"java.util.HashMap","weight":6}},{"@class":"java.util.HashMap","id":6431,"outV":134,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5343,"outV":165,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":1953,"outV":148,"properties":{"@class":"java.util.HashMap","weight":10}},{"@class":"java.util.HashMap","id":2274,"outV":25,"properties":{"@class":"java.util.HashMap","weight":8}},{"@class":"java.util.HashMap","id":1634,"outV":210,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":100,"outV":46,"properties":{"@class":"java.util.HashMap","weight"
 :1}},{"@class":"java.util.HashMap","id":933,"outV":91,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2021,"outV":149,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":6694,"outV":141,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":4009,"outV":225,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":682,"outV":219,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3694,"outV":3,"properties":{"@class":"java.util.HashMap","weight":57}},{"@class":"java.util.HashMap","id":4718,"outV":186,"properties":{"@class":"java.util.HashMap","weight":6}},{"@class":"java.util.HashMap","id":3055,"outV":153,"properties":{"@class":"java.util.HashMap","weight":9}},{"@class":"java.util.HashMap","id":2736,"outV":13,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id"
 :2480,"outV":68,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5426,"outV":102,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":6899,"outV":147,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5879,"outV":96,"properties":{"@class":"java.util.HashMap","weight":22}},{"@class":"java.util.HashMap","id":6201,"outV":319,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5370,"outV":132,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":2236,"outV":29,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":4604,"outV":85,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":700,"outV":206,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5759,"outV":129,"properties":{"@class
 ":"java.util.HashMap","weight":6}}]]},"outE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":273,"inV":3,"properties":{"@class":"java.util.HashMap","weight":40}},{"@class":"java.util.HashMap","id":274,"inV":26,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":275,"inV":114,"properties":{"@class":"java.util.HashMap","weight":40}},{"@class":"java.util.HashMap","id":276,"inV":1,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":277,"inV":74,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":278,"inV":122,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":279,"inV":133,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":280,"inV":83,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":281,"inV":153,"
 properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":282,"inV":159,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":283,"inV":13,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":284,"inV":25,"properties":{"@class":"java.util.HashMap","weight":19}},{"@class":"java.util.HashMap","id":285,"inV":96,"properties":{"@class":"java.util.HashMap","weight":10}},{"@class":"java.util.HashMap","id":286,"inV":160,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":287,"inV":32,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":288,"inV":120,"properties":{"@class":"java.util.HashMap","weight":16}},{"@class":"java.util.HashMap","id":289,"inV":50,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":290,"inV":116,"properties":{"@class":"java.util.HashMap","weight":1}}
 ,{"@class":"java.util.HashMap","id":291,"inV":127,"properties":{"@class":"java.util.HashMap","weight":6}},{"@class":"java.util.HashMap","id":292,"inV":65,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":293,"inV":130,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":294,"inV":125,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":295,"inV":70,"properties":{"@class":"java.util.HashMap","weight":13}},{"@class":"java.util.HashMap","id":296,"inV":134,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":297,"inV":161,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":298,"inV":162,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":299,"inV":124,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":300,"inV":38,"pro
 perties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":301,"inV":29,"properties":{"@class":"java.util.HashMap","weight":11}},{"@class":"java.util.HashMap","id":302,"inV":163,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":303,"inV":94,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":304,"inV":85,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":305,"inV":164,"properties":{"@class":"java.util.HashMap","weight":6}},{"@class":"java.util.HashMap","id":306,"inV":64,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":307,"inV":150,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":308,"inV":165,"properties":{"@class":"java.util.HashMap","weight":7}},{"@class":"java.util.HashMap","id":309,"inV":92,"properties":{"@class":"java.util.HashMap","weight":1}},{"@c
 lass":"java.util.HashMap","id":310,"inV":140,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":311,"inV":166,"properties":{"@class":"java.util.HashMap","weight":1}}]],"sungBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":7582,"inV":340}]],"writtenBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":7581,"inV":446}]]},"properties":{"@class":"java.util.HashMap","name":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",12],"value":"GOING DOWN THE ROAD FEELING BAD"}]],"songType":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",14],"value":"cover"}]],"performances":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",13],"value":293}]]}}
+{"@class":"java.util.HashMap","id":3,"label":"song","inE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":1,"outV":1,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":2051,"outV":92,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":1412,"outV":83,"properties":{"@class":"java.util.HashMap","weight":6}},{"@class":"java.util.HashMap","id":6669,"outV":12,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":526,"outV":120,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":910,"outV":91,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":1166,"outV":26,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":6286,"outV":49,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap"
 ,"id":273,"outV":5,"properties":{"@class":"java.util.HashMap","weight":40}},{"@class":"java.util.HashMap","id":2194,"outV":235,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1684,"outV":124,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1941,"outV":148,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":3221,"outV":63,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2712,"outV":13,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":6425,"outV":134,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5787,"outV":76,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5148,"outV":125,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":6692,"outV":141,"properties":{"@c
 lass":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":6310,"outV":123,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":6448,"outV":187,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":2225,"outV":226,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5042,"outV":209,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":4789,"outV":114,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":1464,"outV":81,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2232,"outV":215,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":4665,"outV":154,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2235,"outV":29,"properties":{"@class":"java.util.HashMap","weight":1
 63}},{"@class":"java.util.HashMap","id":6208,"outV":319,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":706,"outV":206,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":835,"outV":171,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5188,"outV":99,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1862,"outV":94,"properties":{"@class":"java.util.HashMap","weight":10}},{"@class":"java.util.HashMap","id":1735,"outV":82,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":6343,"outV":21,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":4937,"outV":277,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3276,"outV":160,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id"
 :3149,"outV":104,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1358,"outV":130,"properties":{"@class":"java.util.HashMap","weight":18}},{"@class":"java.util.HashMap","id":4304,"outV":110,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1105,"outV":59,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":722,"outV":80,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":4182,"outV":54,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1499,"outV":164,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":2397,"outV":179,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":351,"outV":178,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":6623,"outV":127,"properties":{"@class
 ":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":2018,"outV":149,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":7011,"outV":89,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5348,"outV":165,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2278,"outV":25,"properties":{"@class":"java.util.HashMap","weight":7}},{"@class":"java.util.HashMap","id":1255,"outV":27,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3048,"outV":153,"properties":{"@class":"java.util.HashMap","weight":13}},{"@class":"java.util.HashMap","id":5867,"outV":96,"properties":{"@class":"java.util.HashMap","weight":116}},{"@class":"java.util.HashMap","id":364,"outV":74,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":492,"outV":98,"properties":{"@class":"java.util.HashMap","weight":1}},{"@c
 lass":"java.util.HashMap","id":3948,"outV":138,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":4335,"outV":62,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3312,"outV":252,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5745,"outV":129,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":4596,"outV":85,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":5367,"outV":132,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":633,"outV":23,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":891,"outV":140,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5375,"outV":69,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":6143,"out
 V":289,"properties":{"@class":"java.util.HashMap","weight":3}}]]},"outE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":3712,"inV":27,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3713,"inV":110,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":3714,"inV":215,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":3715,"inV":127,"properties":{"@class":"java.util.HashMap","weight":10}},{"@class":"java.util.HashMap","id":3716,"inV":83,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":3717,"inV":103,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3718,"inV":68,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3719,"inV":134,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"
 java.util.HashMap","id":3720,"inV":25,"properties":{"@class":"java.util.HashMap","weight":10}},{"@class":"java.util.HashMap","id":3721,"inV":125,"properties":{"@class":"java.util.HashMap","weight":54}},{"@class":"java.util.HashMap","id":3722,"inV":130,"properties":{"@class":"java.util.HashMap","weight":26}},{"@class":"java.util.HashMap","id":3723,"inV":141,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3724,"inV":145,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3725,"inV":319,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":3726,"inV":12,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3727,"inV":160,"properties":{"@class":"java.util.HashMap","weight":37}},{"@class":"java.util.HashMap","id":3728,"inV":70,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3729,"inV":123,"pr
 operties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3730,"inV":129,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3731,"inV":30,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3732,"inV":148,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3733,"inV":211,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":3734,"inV":87,"properties":{"@class":"java.util.HashMap","weight":13}},{"@class":"java.util.HashMap","id":3735,"inV":164,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":3736,"inV":64,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3737,"inV":320,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3738,"inV":61,"properties":{"@class":"java.util.HashMap","weigh
 t":3}},{"@class":"java.util.HashMap","id":3739,"inV":210,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":3740,"inV":50,"properties":{"@class":"java.util.HashMap","weight":7}},{"@class":"java.util.HashMap","id":3741,"inV":128,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":3742,"inV":315,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3743,"inV":261,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3744,"inV":213,"properties":{"@class":"java.util.HashMap","weight":13}},{"@class":"java.util.HashMap","id":3745,"inV":72,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3746,"inV":38,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":3747,"inV":204,"properties":{"@class":"java.util.HashMap","weight":14}},{"@class":"java.util.HashMap","id":37
 48,"inV":62,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3749,"inV":150,"properties":{"@class":"java.util.HashMap","weight":8}},{"@class":"java.util.HashMap","id":3750,"inV":309,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3751,"inV":131,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3752,"inV":151,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3753,"inV":321,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3754,"inV":90,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3755,"inV":82,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3756,"inV":120,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3757,"inV":46,"properties":{"@class":"java.util.
 HashMap","weight":5}},{"@class":"java.util.HashMap","id":3758,"inV":157,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":3759,"inV":59,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3760,"inV":81,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3761,"inV":86,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":3762,"inV":140,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3763,"inV":201,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3764,"inV":214,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3765,"inV":185,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3766,"inV":216,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.Has
 hMap","id":3767,"inV":217,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3768,"inV":236,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":3769,"inV":193,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3770,"inV":79,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3771,"inV":84,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3772,"inV":23,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3773,"inV":31,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3774,"inV":240,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3775,"inV":292,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3776,"inV":9,"properties":{"@class":
 "java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3777,"inV":259,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3694,"inV":5,"properties":{"@class":"java.util.HashMap","weight":57}},{"@class":"java.util.HashMap","id":3695,"inV":114,"properties":{"@class":"java.util.HashMap","weight":30}},{"@class":"java.util.HashMap","id":3696,"inV":74,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3697,"inV":78,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":3698,"inV":10,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3699,"inV":26,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":3700,"inV":153,"properties":{"@class":"java.util.HashMap","weight":7}},{"@class":"java.util.HashMap","id":3701,"inV":4,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.
 util.HashMap","id":3702,"inV":317,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3703,"inV":13,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":3704,"inV":1,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3705,"inV":21,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3706,"inV":57,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3707,"inV":122,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3708,"inV":318,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3709,"inV":94,"properties":{"@class":"java.util.HashMap","weight":26}},{"@class":"java.util.HashMap","id":3710,"inV":96,"properties":{"@class":"java.util.HashMap","weight":7}},{"@class":"java.util.HashMap","id":3711,"inV":124,"properties":{"
 @class":"java.util.HashMap","weight":15}}]],"sungBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":7808,"inV":351}]],"writtenBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":7807,"inV":671}]]},"properties":{"@class":"java.util.HashMap","name":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",6],"value":"NOT FADE AWAY"}]],"songType":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",8],"value":"cover"}]],"performances":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",7],"value":531}]]}}
+{"@class":"java.util.HashMap","id":4,"label":"song","inE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":128,"outV":97,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1664,"outV":267,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2,"outV":1,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":899,"outV":140,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1667,"outV":124,"properties":{"@class":"java.util.HashMap","weight":15}},{"@class":"java.util.HashMap","id":4099,"outV":48,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1156,"outV":26,"properties":{"@class":"java.util.HashMap","weight":16}},{"@class":"java.util.HashMap","id":773,"outV":122,"properties":{"@class":"java.util.HashMap","weight":9}},{"@class":"java.util.Hash
 Map","id":6534,"outV":242,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1032,"outV":73,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":6664,"outV":12,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":5129,"outV":222,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5387,"outV":69,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5517,"outV":43,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5006,"outV":30,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":6030,"outV":204,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":2063,"outV":92,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":915,"outV":91,"properties":{"@
 class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":6940,"outV":84,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":2464,"outV":68,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5795,"outV":76,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3620,"outV":24,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":4772,"outV":114,"properties":{"@class":"java.util.HashMap","weight":25}},{"@class":"java.util.HashMap","id":2982,"outV":14,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":3367,"outV":184,"properties":{"@class":"java.util.HashMap","weight":6}},{"@class":"java.util.HashMap","id":2345,"outV":87,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":2861,"outV":101,"properties":{"@class":"java.util.HashMap","weight":6}}
 ,{"@class":"java.util.HashMap","id":1840,"outV":275,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5425,"outV":102,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":180,"outV":70,"properties":{"@class":"java.util.HashMap","weight":46}},{"@class":"java.util.HashMap","id":2613,"outV":158,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5434,"outV":217,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5562,"outV":162,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":1469,"outV":81,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":446,"outV":38,"properties":{"@class":"java.util.HashMap","weight":7}},{"@class":"java.util.HashMap","id":2494,"outV":90,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":326
 6,"outV":160,"properties":{"@class":"java.util.HashMap","weight":10}},{"@class":"java.util.HashMap","id":326,"outV":34,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":583,"outV":120,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":6855,"outV":64,"properties":{"@class":"java.util.HashMap","weight":12}},{"@class":"java.util.HashMap","id":73,"outV":46,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":4425,"outV":212,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1613,"outV":210,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":4941,"outV":86,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":6350,"outV":21,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3535,"outV":201,"properties":{"@class":"java
 .util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":980,"outV":11,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":1494,"outV":164,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":5206,"outV":99,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5847,"outV":61,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":6490,"outV":187,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2781,"outV":15,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":5600,"outV":42,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":353,"outV":74,"properties":{"@class":"java.util.HashMap","weight":6}},{"@class":"java.util.HashMap","id":5474,"outV":79,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java
 .util.HashMap","id":1891,"outV":103,"properties":{"@class":"java.util.HashMap","weight":19}},{"@class":"java.util.HashMap","id":3811,"outV":88,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5989,"outV":50,"properties":{"@class":"java.util.HashMap","weight":12}},{"@class":"java.util.HashMap","id":4327,"outV":110,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":2538,"outV":57,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":3050,"outV":153,"properties":{"@class":"java.util.HashMap","weight":13}},{"@class":"java.util.HashMap","id":4970,"outV":236,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2283,"outV":25,"properties":{"@class":"java.util.HashMap","weight":9}},{"@class":"java.util.HashMap","id":236,"outV":145,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":6126,"outV":72,"
 properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5232,"outV":214,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":4594,"outV":85,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1652,"outV":213,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":4084,"outV":109,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":629,"outV":23,"properties":{"@class":"java.util.HashMap","weight":10}},{"@class":"java.util.HashMap","id":3701,"outV":3,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":5621,"outV":22,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":7029,"outV":89,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5238,"outV":32,"properties":{"@class":"java.util.HashMap"
 ,"weight":3}},{"@class":"java.util.HashMap","id":2684,"outV":13,"properties":{"@class":"java.util.HashMap","weight":9}},{"@class":"java.util.HashMap","id":3325,"outV":268,"properties":{"@class":"java.util.HashMap","weight":1}}]]},"outE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":5120,"inV":40,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":5121,"inV":33,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":5122,"inV":79,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5123,"inV":292,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5071,"inV":50,"properties":{"@class":"java.util.HashMap","weight":9}},{"@class":"java.util.HashMap","id":5072,"inV":12,"properties":{"@class":"java.util.HashMap","weight":26}},{"@class":"java.util.HashMap","id":5073,"inV":18,"properties"
 :{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":5074,"inV":24,"properties":{"@class":"java.util.HashMap","weight":9}},{"@class":"java.util.HashMap","id":5075,"inV":23,"properties":{"@class":"java.util.HashMap","weight":63}},{"@class":"java.util.HashMap","id":5076,"inV":13,"properties":{"@class":"java.util.HashMap","weight":12}},{"@class":"java.util.HashMap","id":5077,"inV":10,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":5078,"inV":11,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":5079,"inV":26,"properties":{"@class":"java.util.HashMap","weight":18}},{"@class":"java.util.HashMap","id":5080,"inV":22,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5081,"inV":16,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5082,"inV":49,"properties":{"@class":"java.util.HashMap","weight":1}},{"@cl
 ass":"java.util.HashMap","id":5083,"inV":25,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5084,"inV":51,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5085,"inV":15,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5086,"inV":112,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":5087,"inV":121,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5088,"inV":32,"properties":{"@class":"java.util.HashMap","weight":7}},{"@class":"java.util.HashMap","id":5089,"inV":68,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5090,"inV":120,"properties":{"@class":"java.util.HashMap","weight":77}},{"@class":"java.util.HashMap","id":5091,"inV":103,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5092,"inV":42,"pr
 operties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":5093,"inV":85,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":5094,"inV":76,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":5095,"inV":181,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5096,"inV":14,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5097,"inV":122,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5098,"inV":153,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":5099,"inV":96,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5100,"inV":82,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":5101,"inV":110,"properties":{"@class":"java.util.HashMap","weight"
 :1}},{"@class":"java.util.HashMap","id":5102,"inV":19,"properties":{"@class":"java.util.HashMap","weight":6}},{"@class":"java.util.HashMap","id":5103,"inV":129,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5104,"inV":84,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5105,"inV":88,"properties":{"@class":"java.util.HashMap","weight":9}},{"@class":"java.util.HashMap","id":5106,"inV":97,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5107,"inV":114,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5108,"inV":30,"properties":{"@class":"java.util.HashMap","weight":8}},{"@class":"java.util.HashMap","id":5109,"inV":31,"properties":{"@class":"java.util.HashMap","weight":8}},{"@class":"java.util.HashMap","id":5110,"inV":69,"properties":{"@class":"java.util.HashMap","weight":4}},{"@class":"java.util.HashMap","id":5111,"inV"
 :127,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5112,"inV":60,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5113,"inV":39,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5114,"inV":21,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5115,"inV":117,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5116,"inV":78,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5117,"inV":38,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5118,"inV":169,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5119,"inV":118,"properties":{"@class":"java.util.HashMap","weight":1}}]],"sungBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":7064,"inV":340}]],"writ
 tenBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":7063,"inV":339}]]},"properties":{"@class":"java.util.HashMap","name":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",9],"value":"BERTHA"}]],"songType":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",11],"value":"original"}]],"performances":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",10],"value":394}]]}}
+{"@class":"java.util.HashMap","id":5,"label":"song","inE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":194,"outV":70,"properties":{"@class":"java.util.HashMap","weight":8}},{"@class":"java.util.HashMap","id":962,"outV":67,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":3,"outV":1,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5446,"outV":231,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":6344,"outV":21,"properties":{"@class":"java.util.HashMap","weight":6}},{"@class":"java.util.HashMap","id":1738,"outV":82,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":6666,"outV":12,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1867,"outV":94,"properties":{"@class":"java.util.HashMap","weight":15}},{"@class":"java.util.HashMap
 ","id":4300,"outV":110,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":847,"outV":171,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2832,"outV":101,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":6032,"outV":115,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1170,"outV":26,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5330,"outV":238,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1491,"outV":164,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":1429,"outV":83,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":3033,"outV":14,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":6298,"outV":49,"properties":{"@
 class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1373,"outV":130,"properties":{"@class":"java.util.HashMap","weight":11}},{"@class":"java.util.HashMap","id":4447,"outV":113,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5151,"outV":125,"properties":{"@class":"java.util.HashMap","weight":6}},{"@class":"java.util.HashMap","id":5343,"outV":165,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":6431,"outV":134,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":1953,"outV":148,"properties":{"@class":"java.util.HashMap","weight":10}},{"@class":"java.util.HashMap","id":1634,"outV":210,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2274,"outV":25,"properties":{"@class":"java.util.HashMap","weight":8}},{"@class":"java.util.HashMap","id":100,"outV":46,"properties":{"@class":"java.util.HashMap","weight"
 :1}},{"@class":"java.util.HashMap","id":933,"outV":91,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2021,"outV":149,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":6694,"outV":141,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":4009,"outV":225,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":682,"outV":219,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":3694,"outV":3,"properties":{"@class":"java.util.HashMap","weight":57}},{"@class":"java.util.HashMap","id":4718,"outV":186,"properties":{"@class":"java.util.HashMap","weight":6}},{"@class":"java.util.HashMap","id":3055,"outV":153,"properties":{"@class":"java.util.HashMap","weight":9}},{"@class":"java.util.HashMap","id":2480,"outV":68,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id"
 :2736,"outV":13,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":5426,"outV":102,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":6899,"outV":147,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5879,"outV":96,"properties":{"@class":"java.util.HashMap","weight":22}},{"@class":"java.util.HashMap","id":6201,"outV":319,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5370,"outV":132,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":700,"outV":206,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2236,"outV":29,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":4604,"outV":85,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5759,"outV":129,"properties":{"@class
 ":"java.util.HashMap","weight":6}}]]},"outE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":273,"inV":3,"properties":{"@class":"java.util.HashMap","weight":40}},{"@class":"java.util.HashMap","id":274,"inV":26,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":275,"inV":114,"properties":{"@class":"java.util.HashMap","weight":40}},{"@class":"java.util.HashMap","id":276,"inV":1,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":277,"inV":74,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":278,"inV":122,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":279,"inV":133,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":280,"inV":83,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":281,"inV":153,"
 properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":282,"inV":159,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":283,"inV":13,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":284,"inV":25,"properties":{"@class":"java.util.HashMap","weight":19}},{"@class":"java.util.HashMap","id":285,"inV":96,"properties":{"@class":"java.util.HashMap","weight":10}},{"@class":"java.util.HashMap","id":286,"inV":160,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":287,"inV":32,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":288,"inV":120,"properties":{"@class":"java.util.HashMap","weight":16}},{"@class":"java.util.HashMap","id":289,"inV":50,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":290,"inV":116,"properties":{"@class":"java.util.HashMap","weight":1}}
 ,{"@class":"java.util.HashMap","id":291,"inV":127,"properties":{"@class":"java.util.HashMap","weight":6}},{"@class":"java.util.HashMap","id":292,"inV":65,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":293,"inV":130,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":294,"inV":125,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":295,"inV":70,"properties":{"@class":"java.util.HashMap","weight":13}},{"@class":"java.util.HashMap","id":296,"inV":134,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":297,"inV":161,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":298,"inV":162,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":299,"inV":124,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":300,"inV":38,"pro
 perties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":301,"inV":29,"properties":{"@class":"java.util.HashMap","weight":11}},{"@class":"java.util.HashMap","id":302,"inV":163,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":303,"inV":94,"properties":{"@class":"java.util.HashMap","weight":5}},{"@class":"java.util.HashMap","id":304,"inV":85,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":305,"inV":164,"properties":{"@class":"java.util.HashMap","weight":6}},{"@class":"java.util.HashMap","id":306,"inV":64,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":307,"inV":150,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":308,"inV":165,"properties":{"@class":"java.util.HashMap","weight":7}},{"@class":"java.util.HashMap","id":309,"inV":92,"properties":{"@class":"java.util.HashMap","weight":1}},{"@c
 lass":"java.util.HashMap","id":310,"inV":140,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":311,"inV":166,"properties":{"@class":"java.util.HashMap","weight":1}}]],"sungBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":7582,"inV":340}]],"writtenBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":7581,"inV":446}]]},"properties":{"@class":"java.util.HashMap","name":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",12],"value":"GOING DOWN THE ROAD FEELING BAD"}]],"songType":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",14],"value":"cover"}]],"performances":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",13],"value":293}]]}}
 {"@class":"java.util.HashMap","id":6,"label":"song","inE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":4,"outV":1,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2023,"outV":282,"properties":{"@class":"java.util.HashMap","weight":1}}]]},"outE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":2406,"inV":293,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2407,"inV":96,"properties":{"@class":"java.util.HashMap","weight":1}}]],"sungBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":7782,"inV":351}]],"writtenBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":7781,"inV":527}]]},"properties":{"@class":"java.util.HashMap","name":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",15],"value":"MONA"}]],"songType":["java.util.ArrayList",[{"@class":"ja
 va.util.HashMap","id":["java.lang.Long",17],"value":"cover"}]],"performances":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",16],"value":1}]]}}
 {"@class":"java.util.HashMap","id":7,"label":"song","inE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":2607,"outV":295,"properties":{"@class":"java.util.HashMap","weight":1}}]]},"outE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":5,"inV":8,"properties":{"@class":"java.util.HashMap","weight":1}}]]},"properties":{"@class":"java.util.HashMap","name":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",18],"value":"WHERE HAVE THE HEROES GONE"}]],"songType":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",20],"value":""}]],"performances":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",19],"value":0}]]}}
 {"@class":"java.util.HashMap","id":8,"label":"song","inE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":4705,"outV":111,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5,"outV":7,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":5901,"outV":96,"properties":{"@class":"java.util.HashMap","weight":1}}]]},"outE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":2976,"inV":302,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2977,"inV":96,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":2978,"inV":72,"properties":{"@class":"java.util.HashMap","weight":1}}]],"sungBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":7814,"inV":351}]],"writtenBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":7813,
 "inV":674}]]},"properties":{"@class":"java.util.HashMap","name":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",21],"value":"OH BOY"}]],"songType":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",23],"value":"cover"}]],"performances":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",22],"value":2}]]}}
-{"@class":"java.util.HashMap","id":9,"label":"song","inE":{"@class":"java.util.HashMap","followedBy":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":3776,"outV":3,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":65,"outV":46,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":1923,"outV":103,"properties":{"@class":"java.util.HashMap","weight":3}},{"@class":"java.util.HashMap","id":5956,"outV":50,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":3077,"outV":153,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.HashMap","id":5832,"outV":76,"properties":{"@class":"java.util.HashMap","weight":1}},{"@class":"java.util.HashMap","id":1161,"outV":26,"properties":{"@class":"java.util.HashMap","weight":8}},{"@class":"java.util.HashMap","id":6667,"outV":12,"properties":{"@class":"java.util.HashMap","weight":2}},{"@class":"java.util.Hash
 Map","id":2699,"outV":13,"properties":{"@class":"java.util.Ha

<TRUNCATED>

[32/48] tinkerpop git commit: TINKERPOP-1274: GraphSON 2.0.

Posted by sp...@apache.org.
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TinkerPopJacksonModule.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TinkerPopJacksonModule.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TinkerPopJacksonModule.java
new file mode 100644
index 0000000..847027c
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TinkerPopJacksonModule.java
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.structure.io.graphson;
+
+import org.apache.tinkerpop.shaded.jackson.databind.module.SimpleModule;
+
+import java.util.Map;
+
+/**
+ * A {@link SimpleModule} extension that does the necessary work to make the automatic typed deserialization
+ * without full canonical class names work.
+ *
+ * Users of custom modules with the GraphSONMapper that want their objects to be deserialized automatically by the
+ * mapper, must extend this class with their module. It is the only required step.
+ *
+ * Using this basis module allows the serialization and deserialization of typed objects without having the whole
+ * canonical name of the serialized classes included in the Json payload. This is also necessary because Java
+ * does not provide an agnostic way to search in a classpath a find a class by its simple name. Although that could
+ * be done with an external library, later if we deem it necessary.
+ *
+ * @author Kevin Gallardo (https://kgdo.me)
+ */
+public abstract class TinkerPopJacksonModule extends SimpleModule {
+
+    public TinkerPopJacksonModule(String name) {
+        super(name);
+    }
+
+    public abstract Map<Class, String> getTypeDefinitions();
+
+    public abstract String getTypeNamespace();
+}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/ToStringGraphSONSerializer.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/ToStringGraphSONSerializer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/ToStringGraphSONSerializer.java
new file mode 100644
index 0000000..fbd9e00
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/ToStringGraphSONSerializer.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.structure.io.graphson;
+
+import org.apache.tinkerpop.shaded.jackson.core.JsonGenerator;
+import org.apache.tinkerpop.shaded.jackson.databind.SerializerProvider;
+import org.apache.tinkerpop.shaded.jackson.databind.jsontype.TypeSerializer;
+import org.apache.tinkerpop.shaded.jackson.databind.ser.std.ToStringSerializer;
+
+import java.io.IOException;
+
+/**
+ * A different implementation of the {@link ToStringSerializer} that does not serialize types by calling
+ * `typeSerializer.writeTypePrefixForScalar()` for unknown objects, because it doesn't make sense when there is a
+ * custom types mechanism in place.
+ *
+ * @author Kevin Gallardo (https://kgdo.me)
+ */
+public class ToStringGraphSONSerializer extends ToStringSerializer {
+    @Override
+    public void serializeWithType(Object value, JsonGenerator gen, SerializerProvider provider, TypeSerializer typeSer) throws IOException {
+        this.serialize(value, gen, provider);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TypeInfo.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TypeInfo.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TypeInfo.java
new file mode 100644
index 0000000..34e0d2b
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TypeInfo.java
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.structure.io.graphson;
+
+/**
+ * Defines how data types are handled in GraphSON through the {@link GraphSONMapper}.
+ *
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ */
+public enum TypeInfo {
+    NO_TYPES,
+    PARTIAL_TYPES
+}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/detached/DetachedEdge.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/detached/DetachedEdge.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/detached/DetachedEdge.java
index 776d313..ba05cca 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/detached/DetachedEdge.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/detached/DetachedEdge.java
@@ -79,12 +79,17 @@ public class DetachedEdge extends DetachedElement<Edge> implements Edge {
         super(id, label);
         this.outVertex = new DetachedVertex(outV.getValue0(), outV.getValue1(), Collections.emptyMap());
         this.inVertex = new DetachedVertex(inV.getValue0(), inV.getValue1(), Collections.emptyMap());
-        if (!properties.isEmpty()) {
+        if (properties != null && !properties.isEmpty()) {
             this.properties = new HashMap<>();
-            properties.entrySet().stream().forEach(entry -> this.properties.put(entry.getKey(), Collections.singletonList(new DetachedProperty<>(entry.getKey(), entry.getValue(), this))));
+            properties.entrySet().stream().forEach(entry -> {
+                if (Property.class.isAssignableFrom(entry.getValue().getClass())) {
+                    this.properties.put(entry.getKey(), Collections.singletonList((Property)entry.getValue()));
+                } else {
+                    this.properties.put(entry.getKey(), Collections.singletonList(new DetachedProperty<>(entry.getKey(), entry.getValue(), this)));
+                }
+            });
         }
     }
-
     @Override
     public String toString() {
         return StringFactory.edgeString(this);

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/detached/DetachedVertex.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/detached/DetachedVertex.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/detached/DetachedVertex.java
index 371c091..70cce37 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/detached/DetachedVertex.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/detached/DetachedVertex.java
@@ -76,12 +76,14 @@ public class DetachedVertex extends DetachedElement<Vertex> implements Vertex {
 
     public DetachedVertex(final Object id, final String label, final Map<String, Object> properties) {
         super(id, label);
-        if (!properties.isEmpty()) {
+        if (properties != null && !properties.isEmpty()) {
             this.properties = new HashMap<>();
             properties.entrySet().stream().forEach(
-                    entry -> this.properties.put(entry.getKey(), ((List<Map<String, Object>>) entry.getValue()).stream()
-                            .map(m -> new DetachedVertexProperty<>(m.get(ID), entry.getKey(), m.get(VALUE), (Map<String, Object>) m.getOrDefault(PROPERTIES, new HashMap<>()), this))
-                            .collect(Collectors.toList())));
+                    entry -> this.properties.put(entry.getKey(), (List<VertexProperty>) ((List) entry.getValue()).stream()
+                                .map(m -> VertexProperty.class.isAssignableFrom(m.getClass())
+                                                ? m
+                                                : new DetachedVertexProperty<>(((Map) m).get(ID), entry.getKey(), ((Map) m).get(VALUE), (Map<String, Object>) ((Map) m).getOrDefault(PROPERTIES, new HashMap<>()), this))
+                                .collect(Collectors.toList())));
         }
     }
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/DirectionalStarGraph.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/DirectionalStarGraph.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/DirectionalStarGraph.java
new file mode 100644
index 0000000..ed7b58c
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/DirectionalStarGraph.java
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.structure.util.star;
+
+import org.apache.tinkerpop.gremlin.structure.Direction;
+
+public class DirectionalStarGraph {
+    private final Direction direction;
+    private final StarGraph starGraphToSerialize;
+
+    public DirectionalStarGraph(final StarGraph starGraphToSerialize, final Direction direction) {
+        this.direction = direction;
+        this.starGraphToSerialize = starGraphToSerialize;
+    }
+
+    public Direction getDirection() {
+        return direction;
+    }
+
+    public StarGraph getStarGraphToSerialize() {
+        return starGraphToSerialize;
+    }
+}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/StarGraphGraphSONDeserializer.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/StarGraphGraphSONDeserializer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/StarGraphGraphSONDeserializer.java
new file mode 100644
index 0000000..84a3fd4
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/StarGraphGraphSONDeserializer.java
@@ -0,0 +1,91 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.structure.util.star;
+
+import org.apache.tinkerpop.gremlin.structure.Edge;
+import org.apache.tinkerpop.gremlin.structure.T;
+import org.apache.tinkerpop.gremlin.structure.VertexProperty;
+import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONTokens;
+import org.apache.tinkerpop.gremlin.structure.util.Attachable;
+
+import java.io.IOException;
+import java.util.List;
+import java.util.Map;
+import java.util.function.Function;
+
+/**
+ * Provides helper functions for reading vertex and edges from their serialized GraphSON forms.
+ */
+public class StarGraphGraphSONDeserializer {
+
+    /**
+     * A helper function for reading vertex edges from a serialized {@link org.apache.tinkerpop.gremlin.structure.util.star.StarGraph} (i.e. a {@link java.util.Map}) generated by
+     * {@link org.apache.tinkerpop.gremlin.structure.util.star.StarGraphGraphSONSerializerV1d0}.
+     */
+    public static void readStarGraphEdges(final Function<Attachable<Edge>, Edge> edgeMaker,
+                                          final StarGraph starGraph,
+                                          final Map<String, Object> vertexData,
+                                          final String direction) throws IOException {
+        final Map<String, List<Map<String,Object>>> edgeDatas = (Map<String, List<Map<String,Object>>>) vertexData.get(direction);
+        for (Map.Entry<String, List<Map<String,Object>>> edgeData : edgeDatas.entrySet()) {
+            for (Map<String,Object> inner : edgeData.getValue()) {
+                final StarGraph.StarEdge starEdge;
+                if (direction.equals(GraphSONTokens.OUT_E))
+                    starEdge = (StarGraph.StarEdge) starGraph.getStarVertex().addOutEdge(edgeData.getKey(), starGraph.addVertex(T.id, inner.get(GraphSONTokens.IN)), T.id, inner.get(GraphSONTokens.ID));
+                else
+                    starEdge = (StarGraph.StarEdge) starGraph.getStarVertex().addInEdge(edgeData.getKey(), starGraph.addVertex(T.id, inner.get(GraphSONTokens.OUT)), T.id, inner.get(GraphSONTokens.ID));
+
+                if (inner.containsKey(GraphSONTokens.PROPERTIES)) {
+                    final Map<String, Object> edgePropertyData = (Map<String, Object>) inner.get(GraphSONTokens.PROPERTIES);
+                    for (Map.Entry<String, Object> epd : edgePropertyData.entrySet()) {
+                        starEdge.property(epd.getKey(), epd.getValue());
+                    }
+                }
+
+                if (edgeMaker != null) edgeMaker.apply(starEdge);
+            }
+        }
+    }
+
+    /**
+     * A helper function for reading a serialized {@link org.apache.tinkerpop.gremlin.structure.util.star.StarGraph} from a {@link java.util.Map} generated by
+     * {@link org.apache.tinkerpop.gremlin.structure.util.star.StarGraphGraphSONSerializerV1d0}.
+     */
+    public static StarGraph readStarGraphVertex(final Map<String, Object> vertexData) throws IOException {
+        final StarGraph starGraph = StarGraph.open();
+        starGraph.addVertex(T.id, vertexData.get(GraphSONTokens.ID), T.label, vertexData.get(GraphSONTokens.LABEL));
+        if (vertexData.containsKey(GraphSONTokens.PROPERTIES)) {
+            final Map<String, List<Map<String, Object>>> properties = (Map<String, List<Map<String, Object>>>) vertexData.get(GraphSONTokens.PROPERTIES);
+            for (Map.Entry<String, List<Map<String, Object>>> property : properties.entrySet()) {
+                for (Map<String, Object> p : property.getValue()) {
+                    final StarGraph.StarVertexProperty vp = (StarGraph.StarVertexProperty) starGraph.getStarVertex().property(VertexProperty.Cardinality.list, property.getKey(), p.get(GraphSONTokens.VALUE), T.id, p.get(GraphSONTokens.ID));
+                    if (p.containsKey(GraphSONTokens.PROPERTIES)) {
+                        final Map<String, Object> edgePropertyData = (Map<String, Object>) p.get(GraphSONTokens.PROPERTIES);
+                        for (Map.Entry<String, Object> epd : edgePropertyData.entrySet()) {
+                            vp.property(epd.getKey(), epd.getValue());
+                        }
+                    }
+                }
+            }
+        }
+
+        return starGraph;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/StarGraphGraphSONSerializer.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/StarGraphGraphSONSerializer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/StarGraphGraphSONSerializer.java
deleted file mode 100644
index 3d1a16a..0000000
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/StarGraphGraphSONSerializer.java
+++ /dev/null
@@ -1,250 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.tinkerpop.gremlin.structure.util.star;
-
-import org.apache.tinkerpop.gremlin.structure.Direction;
-import org.apache.tinkerpop.gremlin.structure.Edge;
-import org.apache.tinkerpop.gremlin.structure.Property;
-import org.apache.tinkerpop.gremlin.structure.T;
-import org.apache.tinkerpop.gremlin.structure.VertexProperty;
-import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONTokens;
-import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONUtil;
-import org.apache.tinkerpop.gremlin.structure.util.Attachable;
-import org.apache.tinkerpop.gremlin.structure.util.Comparators;
-import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
-import org.apache.tinkerpop.shaded.jackson.core.JsonGenerationException;
-import org.apache.tinkerpop.shaded.jackson.core.JsonGenerator;
-import org.apache.tinkerpop.shaded.jackson.core.JsonProcessingException;
-import org.apache.tinkerpop.shaded.jackson.databind.SerializerProvider;
-import org.apache.tinkerpop.shaded.jackson.databind.jsontype.TypeSerializer;
-import org.apache.tinkerpop.shaded.jackson.databind.ser.std.StdSerializer;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.TreeSet;
-import java.util.function.Function;
-
-/**
- * @author Stephen Mallette (http://stephen.genoprime.com)
- */
-public class StarGraphGraphSONSerializer extends StdSerializer<StarGraphGraphSONSerializer.DirectionalStarGraph> {
-    private final boolean normalize;
-    public StarGraphGraphSONSerializer(final boolean normalize) {
-        super(DirectionalStarGraph.class);
-        this.normalize = normalize;
-    }
-
-    @Override
-    public void serialize(final DirectionalStarGraph starGraph, final JsonGenerator jsonGenerator,
-                          final SerializerProvider serializerProvider) throws IOException, JsonGenerationException {
-        ser(starGraph, jsonGenerator, serializerProvider, null);
-    }
-
-    @Override
-    public void serializeWithType(final DirectionalStarGraph starGraph, final JsonGenerator jsonGenerator,
-                                  final SerializerProvider serializerProvider,
-                                  final TypeSerializer typeSerializer) throws IOException, JsonProcessingException {
-        ser(starGraph, jsonGenerator, serializerProvider, typeSerializer);
-    }
-
-    private void ser(final DirectionalStarGraph directionalStarGraph, final JsonGenerator jsonGenerator,
-                     final SerializerProvider serializerProvider,
-                     final TypeSerializer typeSerializer) throws IOException, JsonProcessingException {
-        final StarGraph starGraph = directionalStarGraph.getStarGraphToSerialize();
-        jsonGenerator.writeStartObject();
-        if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
-        GraphSONUtil.writeWithType(GraphSONTokens.ID, starGraph.starVertex.id, jsonGenerator, serializerProvider, typeSerializer);
-        jsonGenerator.writeStringField(GraphSONTokens.LABEL, starGraph.starVertex.label);
-        if (directionalStarGraph.direction != null) writeEdges(directionalStarGraph, jsonGenerator, serializerProvider, typeSerializer, Direction.IN);
-        if (directionalStarGraph.direction != null) writeEdges(directionalStarGraph, jsonGenerator, serializerProvider, typeSerializer, Direction.OUT);
-        if (starGraph.starVertex.vertexProperties != null && !starGraph.starVertex.vertexProperties.isEmpty()) {
-            jsonGenerator.writeObjectFieldStart(GraphSONTokens.PROPERTIES);
-            if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
-            final Set<String> keys = normalize ? new TreeSet<>(starGraph.starVertex.vertexProperties.keySet()) : starGraph.starVertex.vertexProperties.keySet();
-            for (final String k : keys) {
-                final List<VertexProperty> vp = starGraph.starVertex.vertexProperties.get(k);
-                jsonGenerator.writeArrayFieldStart(k);
-                if (typeSerializer != null) {
-                    jsonGenerator.writeString(ArrayList.class.getName());
-                    jsonGenerator.writeStartArray();
-                }
-
-                final List<VertexProperty> vertexProperties = normalize ?sort(vp, Comparators.PROPERTY_COMPARATOR) : vp;
-                for (final VertexProperty property : vertexProperties) {
-                    jsonGenerator.writeStartObject();
-                    if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
-                    GraphSONUtil.writeWithType(GraphSONTokens.ID, property.id(), jsonGenerator, serializerProvider, typeSerializer);
-                    GraphSONUtil.writeWithType(GraphSONTokens.VALUE, property.value(), jsonGenerator, serializerProvider, typeSerializer);
-
-                    final Iterator<Property> metaProperties = normalize ?
-                            IteratorUtils.list(property.properties(), Comparators.PROPERTY_COMPARATOR).iterator() : property.properties();
-                    if (metaProperties.hasNext()) {
-                        jsonGenerator.writeObjectFieldStart(GraphSONTokens.PROPERTIES);
-                        if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
-                        while (metaProperties.hasNext()) {
-                            final Property<Object> meta = metaProperties.next();
-                            GraphSONUtil.writeWithType(meta.key(), meta.value(), jsonGenerator, serializerProvider, typeSerializer);
-                        }
-                        jsonGenerator.writeEndObject();
-                    }
-                    jsonGenerator.writeEndObject();
-                }
-                jsonGenerator.writeEndArray();
-                if (typeSerializer != null) jsonGenerator.writeEndArray();
-            }
-            jsonGenerator.writeEndObject();
-        }
-    }
-
-    private void writeEdges(final DirectionalStarGraph directionalStarGraph, final JsonGenerator jsonGenerator,
-                            final SerializerProvider serializerProvider,
-                            final TypeSerializer typeSerializer,
-                            final Direction direction)  throws IOException, JsonProcessingException {
-        // only write edges if there are some AND if the user requested them to be serialized AND if they match
-        // the direction being serialized by the format
-        final StarGraph starGraph = directionalStarGraph.getStarGraphToSerialize();
-        final Direction edgeDirectionToSerialize = directionalStarGraph.getDirection();
-        final Map<String, List<Edge>> starEdges = direction.equals(Direction.OUT) ? starGraph.starVertex.outEdges : starGraph.starVertex.inEdges;
-        final boolean writeEdges = null != starEdges && edgeDirectionToSerialize != null
-                && (edgeDirectionToSerialize == direction || edgeDirectionToSerialize == Direction.BOTH);
-        if (writeEdges) {
-            jsonGenerator.writeObjectFieldStart(direction == Direction.IN ? GraphSONTokens.IN_E : GraphSONTokens.OUT_E);
-            if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
-            final Set<String> keys = normalize ? new TreeSet<>(starEdges.keySet()) : starEdges.keySet();
-            for (final String k : keys) {
-                final List<Edge> edges = starEdges.get(k);
-                jsonGenerator.writeArrayFieldStart(k);
-                if (typeSerializer != null) {
-                    jsonGenerator.writeString(ArrayList.class.getName());
-                    jsonGenerator.writeStartArray();
-                }
-
-                final List<Edge> edgesToWrite = normalize ? sort(edges, Comparators.EDGE_COMPARATOR) : edges;
-                for (final Edge edge : edgesToWrite) {
-                    jsonGenerator.writeStartObject();
-                    if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
-                    GraphSONUtil.writeWithType(GraphSONTokens.ID, edge.id(), jsonGenerator, serializerProvider, typeSerializer);
-                    GraphSONUtil.writeWithType(direction.equals(Direction.OUT) ? GraphSONTokens.IN : GraphSONTokens.OUT,
-                            direction.equals(Direction.OUT) ? edge.inVertex().id() : edge.outVertex().id(),
-                            jsonGenerator, serializerProvider, typeSerializer);
-
-                    final Iterator<Property<Object>> edgeProperties = normalize ?
-                            IteratorUtils.list(edge.properties(), Comparators.PROPERTY_COMPARATOR).iterator() : edge.properties();
-                    if (edgeProperties.hasNext()) {
-                        jsonGenerator.writeObjectFieldStart(GraphSONTokens.PROPERTIES);
-                        if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
-                        while (edgeProperties.hasNext()) {
-                            final Property<Object> meta = edgeProperties.next();
-                            GraphSONUtil.writeWithType(meta.key(), meta.value(), jsonGenerator, serializerProvider, typeSerializer);
-                        }
-                        jsonGenerator.writeEndObject();
-                    }
-                    jsonGenerator.writeEndObject();
-                }
-                jsonGenerator.writeEndArray();
-                if (typeSerializer != null) jsonGenerator.writeEndArray();
-            }
-            jsonGenerator.writeEndObject();
-        }
-    }
-
-    /**
-     * A helper function for reading vertex edges from a serialized {@link StarGraph} (i.e. a {@link Map}) generated by
-     * {@link StarGraphGraphSONSerializer}.
-     */
-    public static void readStarGraphEdges(final Function<Attachable<Edge>, Edge> edgeMaker,
-                                          final StarGraph starGraph,
-                                          final Map<String, Object> vertexData,
-                                          final String direction) throws IOException {
-        final Map<String, List<Map<String,Object>>> edgeDatas = (Map<String, List<Map<String,Object>>>) vertexData.get(direction);
-        for (Map.Entry<String, List<Map<String,Object>>> edgeData : edgeDatas.entrySet()) {
-            for (Map<String,Object> inner : edgeData.getValue()) {
-                final StarGraph.StarEdge starEdge;
-                if (direction.equals(GraphSONTokens.OUT_E))
-                    starEdge = (StarGraph.StarEdge) starGraph.getStarVertex().addOutEdge(edgeData.getKey(), starGraph.addVertex(T.id, inner.get(GraphSONTokens.IN)), T.id, inner.get(GraphSONTokens.ID));
-                else
-                    starEdge = (StarGraph.StarEdge) starGraph.getStarVertex().addInEdge(edgeData.getKey(), starGraph.addVertex(T.id, inner.get(GraphSONTokens.OUT)), T.id, inner.get(GraphSONTokens.ID));
-
-                if (inner.containsKey(GraphSONTokens.PROPERTIES)) {
-                    final Map<String, Object> edgePropertyData = (Map<String, Object>) inner.get(GraphSONTokens.PROPERTIES);
-                    for (Map.Entry<String, Object> epd : edgePropertyData.entrySet()) {
-                        starEdge.property(epd.getKey(), epd.getValue());
-                    }
-                }
-
-                if (edgeMaker != null) edgeMaker.apply(starEdge);
-            }
-        }
-    }
-
-    /**
-     * A helper function for reading a serialized {@link StarGraph} from a {@link Map} generated by
-     * {@link StarGraphGraphSONSerializer}.
-     */
-    public static StarGraph readStarGraphVertex(final Map<String, Object> vertexData) throws IOException {
-        final StarGraph starGraph = StarGraph.open();
-        starGraph.addVertex(T.id, vertexData.get(GraphSONTokens.ID), T.label, vertexData.get(GraphSONTokens.LABEL));
-        if (vertexData.containsKey(GraphSONTokens.PROPERTIES)) {
-            final Map<String, List<Map<String, Object>>> properties = (Map<String, List<Map<String, Object>>>) vertexData.get(GraphSONTokens.PROPERTIES);
-            for (Map.Entry<String, List<Map<String, Object>>> property : properties.entrySet()) {
-                for (Map<String, Object> p : property.getValue()) {
-                    final StarGraph.StarVertexProperty vp = (StarGraph.StarVertexProperty) starGraph.getStarVertex().property(VertexProperty.Cardinality.list, property.getKey(), p.get(GraphSONTokens.VALUE), T.id, p.get(GraphSONTokens.ID));
-                    if (p.containsKey(GraphSONTokens.PROPERTIES)) {
-                        final Map<String, Object> edgePropertyData = (Map<String, Object>) p.get(GraphSONTokens.PROPERTIES);
-                        for (Map.Entry<String, Object> epd : edgePropertyData.entrySet()) {
-                            vp.property(epd.getKey(), epd.getValue());
-                        }
-                    }
-                }
-            }
-        }
-
-        return starGraph;
-    }
-
-    private static <S> List<S> sort(final List<S> listToSort, final Comparator comparator) {
-        Collections.sort(listToSort, comparator);
-        return listToSort;
-    }
-
-    public static class DirectionalStarGraph {
-        private final Direction direction;
-        private final StarGraph starGraphToSerialize;
-
-        public DirectionalStarGraph(final StarGraph starGraphToSerialize, final Direction direction) {
-            this.direction = direction;
-            this.starGraphToSerialize = starGraphToSerialize;
-        }
-
-        public Direction getDirection() {
-            return direction;
-        }
-
-        public StarGraph getStarGraphToSerialize() {
-            return starGraphToSerialize;
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/StarGraphGraphSONSerializerV1d0.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/StarGraphGraphSONSerializerV1d0.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/StarGraphGraphSONSerializerV1d0.java
new file mode 100644
index 0000000..01cb6d6
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/StarGraphGraphSONSerializerV1d0.java
@@ -0,0 +1,178 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.structure.util.star;
+
+import org.apache.tinkerpop.gremlin.structure.Direction;
+import org.apache.tinkerpop.gremlin.structure.Edge;
+import org.apache.tinkerpop.gremlin.structure.Property;
+import org.apache.tinkerpop.gremlin.structure.VertexProperty;
+import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONTokens;
+import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONUtil;
+import org.apache.tinkerpop.gremlin.structure.util.Comparators;
+import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
+import org.apache.tinkerpop.shaded.jackson.core.JsonGenerationException;
+import org.apache.tinkerpop.shaded.jackson.core.JsonGenerator;
+import org.apache.tinkerpop.shaded.jackson.core.JsonProcessingException;
+import org.apache.tinkerpop.shaded.jackson.databind.SerializerProvider;
+import org.apache.tinkerpop.shaded.jackson.databind.jsontype.TypeSerializer;
+import org.apache.tinkerpop.shaded.jackson.databind.ser.std.StdSerializer;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeSet;
+
+/**
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ */
+public class StarGraphGraphSONSerializerV1d0 extends StdSerializer<DirectionalStarGraph> {
+    private final boolean normalize;
+    public StarGraphGraphSONSerializerV1d0(final boolean normalize) {
+        super(DirectionalStarGraph.class);
+        this.normalize = normalize;
+    }
+
+    @Override
+    public void serialize(final DirectionalStarGraph starGraph, final JsonGenerator jsonGenerator,
+                          final SerializerProvider serializerProvider) throws IOException, JsonGenerationException {
+        ser(starGraph, jsonGenerator, serializerProvider, null);
+    }
+
+    @Override
+    public void serializeWithType(final DirectionalStarGraph starGraph, final JsonGenerator jsonGenerator,
+                                  final SerializerProvider serializerProvider,
+                                  final TypeSerializer typeSerializer) throws IOException, JsonProcessingException {
+        ser(starGraph, jsonGenerator, serializerProvider, typeSerializer);
+    }
+
+    private void ser(final DirectionalStarGraph directionalStarGraph, final JsonGenerator jsonGenerator,
+                     final SerializerProvider serializerProvider,
+                     final TypeSerializer typeSerializer) throws IOException, JsonProcessingException {
+        final StarGraph starGraph = directionalStarGraph.getStarGraphToSerialize();
+        jsonGenerator.writeStartObject();
+        if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
+        GraphSONUtil.writeWithType(GraphSONTokens.ID, starGraph.starVertex.id, jsonGenerator, serializerProvider, typeSerializer);
+        jsonGenerator.writeStringField(GraphSONTokens.LABEL, starGraph.starVertex.label);
+        if (directionalStarGraph.getDirection() != null) writeEdges(directionalStarGraph, jsonGenerator, serializerProvider, typeSerializer, Direction.IN);
+        if (directionalStarGraph.getDirection() != null) writeEdges(directionalStarGraph, jsonGenerator, serializerProvider, typeSerializer, Direction.OUT);
+        if (starGraph.starVertex.vertexProperties != null && !starGraph.starVertex.vertexProperties.isEmpty()) {
+            jsonGenerator.writeObjectFieldStart(GraphSONTokens.PROPERTIES);
+            if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
+            final Set<String> keys = normalize ? new TreeSet<>(starGraph.starVertex.vertexProperties.keySet()) : starGraph.starVertex.vertexProperties.keySet();
+            for (final String k : keys) {
+                final List<VertexProperty> vp = starGraph.starVertex.vertexProperties.get(k);
+                jsonGenerator.writeArrayFieldStart(k);
+                if (typeSerializer != null) {
+                    jsonGenerator.writeString(ArrayList.class.getName());
+                    jsonGenerator.writeStartArray();
+                }
+
+                final List<VertexProperty> vertexProperties = normalize ? sort(vp, Comparators.PROPERTY_COMPARATOR) : vp;
+                for (final VertexProperty property : vertexProperties) {
+                    jsonGenerator.writeStartObject();
+                    if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
+                    GraphSONUtil.writeWithType(GraphSONTokens.ID, property.id(), jsonGenerator, serializerProvider, typeSerializer);
+                    GraphSONUtil.writeWithType(GraphSONTokens.VALUE, property.value(), jsonGenerator, serializerProvider, typeSerializer);
+
+                    final Iterator<Property> metaProperties = normalize ?
+                            IteratorUtils.list(property.properties(), Comparators.PROPERTY_COMPARATOR).iterator() : property.properties();
+                    if (metaProperties.hasNext()) {
+                        jsonGenerator.writeObjectFieldStart(GraphSONTokens.PROPERTIES);
+                        if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
+                        while (metaProperties.hasNext()) {
+                            final Property<Object> meta = metaProperties.next();
+                            GraphSONUtil.writeWithType(meta.key(), meta.value(), jsonGenerator, serializerProvider, typeSerializer);
+                        }
+                        jsonGenerator.writeEndObject();
+                    }
+                    jsonGenerator.writeEndObject();
+                }
+                jsonGenerator.writeEndArray();
+                if (typeSerializer != null) jsonGenerator.writeEndArray();
+            }
+            jsonGenerator.writeEndObject();
+        }
+        // For some reason, this wasn't closed.
+        jsonGenerator.writeEndObject();
+    }
+
+    private void writeEdges(final DirectionalStarGraph directionalStarGraph, final JsonGenerator jsonGenerator,
+                            final SerializerProvider serializerProvider,
+                            final TypeSerializer typeSerializer,
+                            final Direction direction)  throws IOException, JsonProcessingException {
+        // only write edges if there are some AND if the user requested them to be serialized AND if they match
+        // the direction being serialized by the format
+        final StarGraph starGraph = directionalStarGraph.getStarGraphToSerialize();
+        final Direction edgeDirectionToSerialize = directionalStarGraph.getDirection();
+        final Map<String, List<Edge>> starEdges = direction.equals(Direction.OUT) ? starGraph.starVertex.outEdges : starGraph.starVertex.inEdges;
+        final boolean writeEdges = null != starEdges && edgeDirectionToSerialize != null
+                && (edgeDirectionToSerialize == direction || edgeDirectionToSerialize == Direction.BOTH);
+        if (writeEdges) {
+            jsonGenerator.writeObjectFieldStart(direction == Direction.IN ? GraphSONTokens.IN_E : GraphSONTokens.OUT_E);
+            if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
+            final Set<String> keys = normalize ? new TreeSet<>(starEdges.keySet()) : starEdges.keySet();
+            for (final String k : keys) {
+                final List<Edge> edges = starEdges.get(k);
+                jsonGenerator.writeArrayFieldStart(k);
+                if (typeSerializer != null) {
+                    jsonGenerator.writeString(ArrayList.class.getName());
+                    jsonGenerator.writeStartArray();
+                }
+
+                final List<Edge> edgesToWrite = normalize ? sort(edges, Comparators.EDGE_COMPARATOR) : edges;
+                for (final Edge edge : edgesToWrite) {
+                    jsonGenerator.writeStartObject();
+                    if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
+                    GraphSONUtil.writeWithType(GraphSONTokens.ID, edge.id(), jsonGenerator, serializerProvider, typeSerializer);
+                    GraphSONUtil.writeWithType(direction.equals(Direction.OUT) ? GraphSONTokens.IN : GraphSONTokens.OUT,
+                            direction.equals(Direction.OUT) ? edge.inVertex().id() : edge.outVertex().id(),
+                            jsonGenerator, serializerProvider, typeSerializer);
+
+                    final Iterator<Property<Object>> edgeProperties = normalize ?
+                            IteratorUtils.list(edge.properties(), Comparators.PROPERTY_COMPARATOR).iterator() : edge.properties();
+                    if (edgeProperties.hasNext()) {
+                        jsonGenerator.writeObjectFieldStart(GraphSONTokens.PROPERTIES);
+                        if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
+                        while (edgeProperties.hasNext()) {
+                            final Property<Object> meta = edgeProperties.next();
+                            GraphSONUtil.writeWithType(meta.key(), meta.value(), jsonGenerator, serializerProvider, typeSerializer);
+                        }
+                        jsonGenerator.writeEndObject();
+                    }
+                    jsonGenerator.writeEndObject();
+                }
+                jsonGenerator.writeEndArray();
+                if (typeSerializer != null) jsonGenerator.writeEndArray();
+            }
+            jsonGenerator.writeEndObject();
+        }
+    }
+
+    static <S> List<S> sort(final List<S> listToSort, final Comparator comparator) {
+        Collections.sort(listToSort, comparator);
+        return listToSort;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/StarGraphGraphSONSerializerV2d0.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/StarGraphGraphSONSerializerV2d0.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/StarGraphGraphSONSerializerV2d0.java
new file mode 100644
index 0000000..04d65c5
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/StarGraphGraphSONSerializerV2d0.java
@@ -0,0 +1,165 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.structure.util.star;
+
+import org.apache.tinkerpop.gremlin.structure.Direction;
+import org.apache.tinkerpop.gremlin.structure.Edge;
+import org.apache.tinkerpop.gremlin.structure.Property;
+import org.apache.tinkerpop.gremlin.structure.VertexProperty;
+import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONTokens;
+import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONUtil;
+import org.apache.tinkerpop.gremlin.structure.util.Comparators;
+import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
+import org.apache.tinkerpop.shaded.jackson.core.JsonGenerationException;
+import org.apache.tinkerpop.shaded.jackson.core.JsonGenerator;
+import org.apache.tinkerpop.shaded.jackson.core.JsonProcessingException;
+import org.apache.tinkerpop.shaded.jackson.databind.SerializerProvider;
+import org.apache.tinkerpop.shaded.jackson.databind.jsontype.TypeSerializer;
+import org.apache.tinkerpop.shaded.jackson.databind.ser.std.StdSerializer;
+
+import java.io.IOException;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeSet;
+
+/**
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ */
+public class StarGraphGraphSONSerializerV2d0 extends StdSerializer<DirectionalStarGraph> {
+    private final boolean normalize;
+    public StarGraphGraphSONSerializerV2d0(final boolean normalize) {
+        super(DirectionalStarGraph.class);
+        this.normalize = normalize;
+    }
+
+    @Override
+    public void serialize(final DirectionalStarGraph starGraph, final JsonGenerator jsonGenerator,
+                          final SerializerProvider serializerProvider) throws IOException, JsonGenerationException {
+        ser(starGraph, jsonGenerator, serializerProvider, null);
+    }
+
+    @Override
+    public void serializeWithType(final DirectionalStarGraph starGraph, final JsonGenerator jsonGenerator,
+                                  final SerializerProvider serializerProvider,
+                                  final TypeSerializer typeSerializer) throws IOException, JsonProcessingException {
+        ser(starGraph, jsonGenerator, serializerProvider, typeSerializer);
+    }
+
+    private void ser(final DirectionalStarGraph directionalStarGraph, final JsonGenerator jsonGenerator,
+                     final SerializerProvider serializerProvider,
+                     final TypeSerializer typeSerializer) throws IOException, JsonProcessingException {
+        final StarGraph starGraph = directionalStarGraph.getStarGraphToSerialize();
+        GraphSONUtil.writeStartObject(starGraph, jsonGenerator, typeSerializer);
+        GraphSONUtil.writeWithType(GraphSONTokens.ID, starGraph.starVertex.id, jsonGenerator, serializerProvider, typeSerializer);
+        jsonGenerator.writeStringField(GraphSONTokens.LABEL, starGraph.starVertex.label);
+        if (directionalStarGraph.getDirection() != null) writeEdges(directionalStarGraph, jsonGenerator, serializerProvider, typeSerializer, Direction.IN);
+        if (directionalStarGraph.getDirection() != null) writeEdges(directionalStarGraph, jsonGenerator, serializerProvider, typeSerializer, Direction.OUT);
+        if (starGraph.starVertex.vertexProperties != null && !starGraph.starVertex.vertexProperties.isEmpty()) {
+            jsonGenerator.writeFieldName(GraphSONTokens.PROPERTIES);
+            GraphSONUtil.writeStartObject(starGraph, jsonGenerator, typeSerializer);
+            final Set<String> keys = normalize ? new TreeSet<>(starGraph.starVertex.vertexProperties.keySet()) : starGraph.starVertex.vertexProperties.keySet();
+            for (final String k : keys) {
+                final List<VertexProperty> vp = starGraph.starVertex.vertexProperties.get(k);
+                jsonGenerator.writeFieldName(k);
+                GraphSONUtil.writeStartArray(k, jsonGenerator, typeSerializer);
+
+                final List<VertexProperty> vertexProperties = normalize ?sort(vp, Comparators.PROPERTY_COMPARATOR) : vp;
+                for (final VertexProperty property : vertexProperties) {
+                    GraphSONUtil.writeStartObject(property, jsonGenerator, typeSerializer);
+                    GraphSONUtil.writeWithType(GraphSONTokens.ID, property.id(), jsonGenerator, serializerProvider, typeSerializer);
+                    GraphSONUtil.writeWithType(GraphSONTokens.VALUE, property.value(), jsonGenerator, serializerProvider, typeSerializer);
+
+                    final Iterator<Property> metaProperties = normalize ?
+                            IteratorUtils.list(property.properties(), Comparators.PROPERTY_COMPARATOR).iterator() : property.properties();
+                    if (metaProperties.hasNext()) {
+                        jsonGenerator.writeFieldName(GraphSONTokens.PROPERTIES);
+                        GraphSONUtil.writeStartObject(metaProperties, jsonGenerator, typeSerializer);
+
+                        while (metaProperties.hasNext()) {
+                            final Property<Object> meta = metaProperties.next();
+                            GraphSONUtil.writeWithType(meta.key(), meta.value(), jsonGenerator, serializerProvider, typeSerializer);
+                        }
+                        GraphSONUtil.writeEndObject(metaProperties, jsonGenerator, typeSerializer);
+                    }
+                    GraphSONUtil.writeEndObject(property, jsonGenerator, typeSerializer);
+                }
+                GraphSONUtil.writeEndArray(k, jsonGenerator, typeSerializer);
+            }
+            GraphSONUtil.writeEndObject(starGraph, jsonGenerator, typeSerializer);
+        }
+        GraphSONUtil.writeEndObject(starGraph, jsonGenerator, typeSerializer);
+    }
+
+    private void writeEdges(final DirectionalStarGraph directionalStarGraph, final JsonGenerator jsonGenerator,
+                            final SerializerProvider serializerProvider,
+                            final TypeSerializer typeSerializer,
+                            final Direction direction)  throws IOException, JsonProcessingException {
+        // only write edges if there are some AND if the user requested them to be serialized AND if they match
+        // the direction being serialized by the format
+        final StarGraph starGraph = directionalStarGraph.getStarGraphToSerialize();
+        final Direction edgeDirectionToSerialize = directionalStarGraph.getDirection();
+        final Map<String, List<Edge>> starEdges = direction.equals(Direction.OUT) ? starGraph.starVertex.outEdges : starGraph.starVertex.inEdges;
+        final boolean writeEdges = null != starEdges && edgeDirectionToSerialize != null
+                && (edgeDirectionToSerialize == direction || edgeDirectionToSerialize == Direction.BOTH);
+        if (writeEdges) {
+            jsonGenerator.writeFieldName(direction == Direction.IN ? GraphSONTokens.IN_E : GraphSONTokens.OUT_E);
+            GraphSONUtil.writeStartObject(directionalStarGraph, jsonGenerator, typeSerializer);
+            final Set<String> keys = normalize ? new TreeSet<>(starEdges.keySet()) : starEdges.keySet();
+            for (final String k : keys) {
+                final List<Edge> edges = starEdges.get(k);
+                jsonGenerator.writeFieldName(k);
+                GraphSONUtil.writeStartArray(k, jsonGenerator, typeSerializer);
+
+                final List<Edge> edgesToWrite = normalize ? sort(edges, Comparators.EDGE_COMPARATOR) : edges;
+                for (final Edge edge : edgesToWrite) {
+                    GraphSONUtil.writeStartObject(edge, jsonGenerator, typeSerializer);
+                    GraphSONUtil.writeWithType(GraphSONTokens.ID, edge.id(), jsonGenerator, serializerProvider, typeSerializer);
+                    GraphSONUtil.writeWithType(direction.equals(Direction.OUT) ? GraphSONTokens.IN : GraphSONTokens.OUT,
+                            direction.equals(Direction.OUT) ? edge.inVertex().id() : edge.outVertex().id(),
+                            jsonGenerator, serializerProvider, typeSerializer);
+
+                    final Iterator<Property<Object>> edgeProperties = normalize ?
+                            IteratorUtils.list(edge.properties(), Comparators.PROPERTY_COMPARATOR).iterator() : edge.properties();
+                    if (edgeProperties.hasNext()) {
+                        jsonGenerator.writeFieldName(GraphSONTokens.PROPERTIES);
+                        GraphSONUtil.writeStartObject(edge, jsonGenerator, typeSerializer);
+                        while (edgeProperties.hasNext()) {
+                            final Property<Object> meta = edgeProperties.next();
+                            GraphSONUtil.writeWithType(meta.key(), meta.value(), jsonGenerator, serializerProvider, typeSerializer);
+                        }
+                        GraphSONUtil.writeEndObject(edge, jsonGenerator, typeSerializer);
+                    }
+                    GraphSONUtil.writeEndObject(edge, jsonGenerator, typeSerializer);
+                }
+                GraphSONUtil.writeEndArray(k, jsonGenerator, typeSerializer);
+            }
+            GraphSONUtil.writeEndObject(directionalStarGraph, jsonGenerator, typeSerializer);
+        }
+    }
+
+    private static <S> List<S> sort(final List<S> listToSort, final Comparator comparator) {
+        Collections.sort(listToSort, comparator);
+        return listToSort;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperEmbeddedTypeTest.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperEmbeddedTypeTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperEmbeddedTypeTest.java
index c7549f9..4980adf 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperEmbeddedTypeTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperEmbeddedTypeTest.java
@@ -19,9 +19,9 @@
 package org.apache.tinkerpop.gremlin.structure.io.graphson;
 
 import org.apache.tinkerpop.shaded.jackson.databind.ObjectMapper;
-import org.apache.tinkerpop.shaded.kryo.io.Input;
-import org.apache.tinkerpop.shaded.kryo.io.Output;
 import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
@@ -39,11 +39,26 @@ import java.time.Year;
 import java.time.YearMonth;
 import java.time.ZoneOffset;
 import java.time.ZonedDateTime;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Map;
 
 import static org.junit.Assert.assertEquals;
 
+@RunWith(Parameterized.class)
 public class GraphSONMapperEmbeddedTypeTest {
-    private final ObjectMapper mapper = GraphSONMapper.build().embedTypes(true).create().createMapper();
+
+    @Parameterized.Parameters(name = "{0}")
+    public static Iterable<Object[]> data() {
+        return Arrays.asList(new Object[][]{
+                {GraphSONMapper.build().version(GraphSONVersion.V1_0).embedTypes(true).create().createMapper()},
+                {GraphSONMapper.build().version(GraphSONVersion.V2_0).typeInfo(TypeInfo.PARTIAL_TYPES).create()
+                        .createMapper()},
+        });
+    }
+
+    @Parameterized.Parameter
+    public ObjectMapper mapper;
 
     @Test
     public void shouldHandleDuration()throws Exception  {
@@ -122,6 +137,40 @@ public class GraphSONMapperEmbeddedTypeTest {
         assertEquals(o, serializeDeserialize(o, ZoneOffset.class));
     }
 
+    @Test
+    public void shouldHandleMapWithTypesUsingEmbedTypeSetting() throws Exception {
+        final ObjectMapper mapper = GraphSONMapper.build()
+                .version(GraphSONVersion.V1_0)
+                .typeInfo(TypeInfo.PARTIAL_TYPES)
+                .create()
+                .createMapper();
+
+        final Map<String,Object> m = new HashMap<>();
+        m.put("test", 100L);
+
+        final String json = mapper.writeValueAsString(m);
+        final Map read = mapper.readValue(json, HashMap.class);
+
+        assertEquals(100L, read.get("test"));
+    }
+
+    @Test
+    public void shouldNotHandleMapWithTypesUsingEmbedTypeSetting() throws Exception {
+        final ObjectMapper mapper = GraphSONMapper.build()
+                .version(GraphSONVersion.V1_0)
+                .typeInfo(TypeInfo.NO_TYPES)
+                .create()
+                .createMapper();
+
+        final Map<String,Object> m = new HashMap<>();
+        m.put("test", 100L);
+
+        final String json = mapper.writeValueAsString(m);
+        final Map read = mapper.readValue(json, HashMap.class);
+
+        assertEquals(100, read.get("test"));
+    }
+
     public <T> T serializeDeserialize(final Object o, final Class<T> clazz) throws Exception {
         try (final ByteArrayOutputStream stream = new ByteArrayOutputStream()) {
             mapper.writeValue(stream, o);

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperTest.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperTest.java
index 41e24c6..4b2e98f 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperTest.java
@@ -21,6 +21,8 @@ package org.apache.tinkerpop.gremlin.structure.io.graphson;
 import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalExplanation;
 import org.apache.tinkerpop.shaded.jackson.databind.ObjectMapper;
 import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
 
 import java.time.Duration;
 import java.time.Instant;
@@ -35,12 +37,25 @@ import java.time.Year;
 import java.time.YearMonth;
 import java.time.ZoneOffset;
 import java.time.ZonedDateTime;
+import java.util.Arrays;
 
 import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.__;
 import static org.junit.Assert.assertEquals;
 
+@RunWith(Parameterized.class)
 public class GraphSONMapperTest {
-    private final ObjectMapper mapper = GraphSONMapper.build().embedTypes(false).create().createMapper();
+
+    @Parameterized.Parameters(name = "{0}")
+    public static Iterable<Object[]> data() {
+        return Arrays.asList(new Object[][]{
+                {GraphSONMapper.build().version(GraphSONVersion.V1_0).embedTypes(false).create().createMapper()},
+                {GraphSONMapper.build().version(GraphSONVersion.V2_0).typeInfo(TypeInfo.NO_TYPES).create().createMapper()},
+        });
+    }
+
+    @Parameterized.Parameter
+    public ObjectMapper mapper;
+
 
     @Test
     public void shouldHandleTraversalExplanation() throws Exception {

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperV2d0PartialEmbeddedTypeTest.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperV2d0PartialEmbeddedTypeTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperV2d0PartialEmbeddedTypeTest.java
new file mode 100644
index 0000000..c2ad05e
--- /dev/null
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperV2d0PartialEmbeddedTypeTest.java
@@ -0,0 +1,344 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.structure.io.graphson;
+
+import org.apache.tinkerpop.shaded.jackson.databind.ObjectMapper;
+import org.junit.Test;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.time.Duration;
+import java.time.Instant;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.MonthDay;
+import java.time.OffsetDateTime;
+import java.time.OffsetTime;
+import java.time.Period;
+import java.time.Year;
+import java.time.YearMonth;
+import java.time.ZoneOffset;
+import java.time.ZonedDateTime;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+
+import static org.hamcrest.CoreMatchers.containsString;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.fail;
+
+/**
+ * Tests automatic typed serialization/deserialization for GraphSON 2.0.
+ */
+public class GraphSONMapperV2d0PartialEmbeddedTypeTest {
+
+    private final ObjectMapper mapper = GraphSONMapper.build()
+            .version(GraphSONVersion.V2_0)
+            .typeInfo(TypeInfo.PARTIAL_TYPES)
+            .create()
+            .createMapper();
+
+    @Test
+    public void shouldHandleDurationAuto() throws Exception {
+        final Duration o = Duration.ZERO;
+        assertEquals(o, serializeDeserializeAuto(o));
+    }
+
+    @Test
+    public void shouldHandleInstantAuto() throws Exception {
+        final Instant o = Instant.ofEpochMilli(System.currentTimeMillis());
+        assertEquals(o, serializeDeserializeAuto(o));
+    }
+
+    @Test
+    public void shouldHandleLocalDateAuto() throws Exception {
+        final LocalDate o = LocalDate.now();
+        assertEquals(o, serializeDeserializeAuto(o));
+    }
+
+    @Test
+    public void shouldHandleLocalDateTimeAuto() throws Exception {
+        final LocalDateTime o = LocalDateTime.now();
+        assertEquals(o, serializeDeserializeAuto(o));
+    }
+
+    @Test
+    public void shouldHandleLocalTimeAuto() throws Exception {
+        final LocalTime o = LocalTime.now();
+        assertEquals(o, serializeDeserializeAuto(o));
+    }
+
+    @Test
+    public void shouldHandleMonthDayAuto() throws Exception {
+        final MonthDay o = MonthDay.now();
+        assertEquals(o, serializeDeserializeAuto(o));
+    }
+
+    @Test
+    public void shouldHandleOffsetDateTimeAuto() throws Exception {
+        final OffsetDateTime o = OffsetDateTime.now();
+        assertEquals(o, serializeDeserializeAuto(o));
+    }
+
+    @Test
+    public void shouldHandleOffsetTimeAuto() throws Exception {
+        final OffsetTime o = OffsetTime.now();
+        assertEquals(o, serializeDeserializeAuto(o));
+    }
+
+    @Test
+    public void shouldHandlePeriodAuto() throws Exception {
+        final Period o = Period.ofDays(3);
+        assertEquals(o, serializeDeserializeAuto(o));
+    }
+
+    @Test
+    public void shouldHandleYearAuto() throws Exception {
+        final Year o = Year.now();
+        assertEquals(o, serializeDeserializeAuto(o));
+    }
+
+    @Test
+    public void shouldHandleYearMonthAuto() throws Exception {
+        final YearMonth o = YearMonth.now();
+        assertEquals(o, serializeDeserializeAuto(o));
+    }
+
+    @Test
+    public void shouldHandleZonedDateTimeAuto() throws Exception {
+        final ZonedDateTime o = ZonedDateTime.now();
+        assertEquals(o, serializeDeserializeAuto(o));
+    }
+
+    @Test
+    public void shouldHandleZonedOffsetAuto() throws Exception {
+        final ZoneOffset o = ZonedDateTime.now().getOffset();
+        assertEquals(o, serializeDeserializeAuto(o));
+    }
+
+    @Test
+    // Trying to fail the TypeDeserializer type detection
+    public void shouldSerializeDeserializeNestedCollectionsAndMapAndTypedValuesCorrectly() throws Exception {
+        UUID uuid = UUID.randomUUID();
+        List myList = new ArrayList<>();
+
+        List myList2 = new ArrayList<>();
+        myList2.add(UUID.randomUUID());
+        myList2.add(33L);
+        myList2.add(84);
+        Map map2 = new HashMap<>();
+        map2.put("eheh", UUID.randomUUID());
+        map2.put("normal", "normal");
+        myList2.add(map2);
+
+        Map<String, Object> map1 = new HashMap<>();
+        map1.put("hello", "world");
+        map1.put("test", uuid);
+        map1.put("hehe", myList2);
+        myList.add(map1);
+
+        myList.add("kjkj");
+        myList.add(UUID.randomUUID());
+        assertEquals(myList, serializeDeserializeAuto(myList));
+
+        // no "@value" property
+        String s = "{\""+GraphSONTokens.VALUETYPE+"\":\""+GraphSONTokens.GREMLIN_TYPE_NAMESPACE +":uuid\", \"test\":2}";
+        Map map = new LinkedHashMap<>();
+        map.put(GraphSONTokens.VALUETYPE, "gremlin:uuid");
+        map.put("test", 2);
+        Object res = mapper.readValue(s, Object.class);
+        assertEquals(map, res);
+
+        // "@value" and "@type" property reversed
+        s = "{\""+GraphSONTokens.VALUEPROP+"\":2, \""+ GraphSONTokens.VALUETYPE+"\":\""+GraphSONTokens.GREMLIN_TYPE_NAMESPACE +":int64\"}";
+        res = mapper.readValue(s, Object.class);
+        assertEquals(res, 2L);
+        assertEquals(res.getClass(), Long.class);
+
+        // no "@type" property.
+        s = "{\""+GraphSONTokens.VALUEPROP+"\":2, \"id\":2}";
+        map = new LinkedHashMap<>();
+        map.put(GraphSONTokens.VALUEPROP, 2);
+        map.put("id", 2);
+        res = mapper.readValue(s, Object.class);
+        assertEquals(res, map);
+    }
+
+    @Test
+    public void shouldFailIfMoreThanTwoPropertiesInATypePattern() {
+        String s = "{\"" + GraphSONTokens.VALUEPROP + "\":2, \"" + GraphSONTokens.VALUETYPE + "\":\""+GraphSONTokens.GREMLIN_TYPE_NAMESPACE +":int64\", \"hello\": \"world\"}";
+        try {
+            mapper.readValue(s, Object.class);
+            fail("Should have failed deserializing because there's more than properties in the type.");
+        } catch (IOException e) {
+            assertThat(e.getMessage(), containsString("Detected the type pattern in the JSON payload but the map containing the types and values contains other fields. This is not allowed by the deserializer."));
+        }
+        s = "{\"" + GraphSONTokens.VALUETYPE + "\":\""+GraphSONTokens.GREMLIN_TYPE_NAMESPACE +":int64\",\"" + GraphSONTokens.VALUEPROP + "\":2, \"hello\": \"world\"}";
+        try {
+            mapper.readValue(s, Object.class);
+            fail("Should have failed deserializing because there's more than properties in the type.");
+        } catch (IOException e) {
+            assertThat(e.getMessage(), containsString("Detected the type pattern in the JSON payload but the map containing the types and values contains other fields. This is not allowed by the deserializer."));
+        }
+    }
+
+    @Test
+    public void shouldFailIfTypeSpecifiedIsNotSameTypeInPayload() {
+        final ZoneOffset o = ZonedDateTime.now().getOffset();
+        final ByteArrayOutputStream stream = new ByteArrayOutputStream();
+        try {
+            mapper.writeValue(stream, o);
+            final InputStream inputStream = new ByteArrayInputStream(stream.toByteArray());
+            // What has been serialized is a ZoneOffset with the type, but the user explicitly requires another type.
+            mapper.readValue(inputStream, Instant.class);
+            fail("Should have failed decoding the value");
+        } catch (Exception e) {
+            assertThat(e.getMessage(), containsString("Could not deserialize the JSON value as required. Nested exception: java.lang.InstantiationException: Cannot deserialize the value with the detected type contained in the JSON ('"+GraphSONTokens.GREMLIN_TYPE_NAMESPACE +":zoneoffset') to the type specified in parameter to the object mapper (class java.time.Instant). Those types are incompatible."));
+        }
+    }
+
+    @Test
+    public void shouldHandleRawPOJOs() throws Exception {
+        final FunObject funObject = new FunObject();
+        funObject.setVal("test");
+        assertEquals(funObject.toString(), serializeDeserialize(funObject, FunObject.class).toString());
+        assertEquals(funObject.getClass(), serializeDeserialize(funObject, FunObject.class).getClass());
+    }
+
+    @Test
+    public void shouldHandleMapWithTypesUsingEmbedTypeSetting() throws Exception {
+        final ObjectMapper mapper = GraphSONMapper.build()
+                .version(GraphSONVersion.V2_0)
+                .embedTypes(true)
+                .create()
+                .createMapper();
+
+        final Map<String,Object> m = new HashMap<>();
+        m.put("test", 100L);
+
+        final String json = mapper.writeValueAsString(m);
+        final Map read = mapper.readValue(json, HashMap.class);
+
+        assertEquals(100L, read.get("test"));
+    }
+
+    @Test
+    public void shouldNotHandleMapWithTypesUsingEmbedTypeSetting() throws Exception {
+        final ObjectMapper mapper = GraphSONMapper.build()
+                .version(GraphSONVersion.V2_0)
+                .embedTypes(false)
+                .create()
+                .createMapper();
+
+        final Map<String,Object> m = new HashMap<>();
+        m.put("test", 100L);
+
+        final String json = mapper.writeValueAsString(m);
+        final Map read = mapper.readValue(json, HashMap.class);
+
+        assertEquals(100, read.get("test"));
+    }
+
+    @Test
+    public void shouldLooseTypesInfoWithGraphSONNoType() throws Exception {
+        ObjectMapper mapper = GraphSONMapper.build()
+                .version(GraphSONVersion.V2_0)
+                .typeInfo(TypeInfo.NO_TYPES)
+                .create()
+                .createMapper();
+
+        UUID uuid = UUID.randomUUID();
+        List myList = new ArrayList<>();
+
+        List myList2 = new ArrayList<>();
+        myList2.add(UUID.randomUUID());
+        myList2.add(33L);
+        myList2.add(84);
+        Map map2 = new HashMap<>();
+        map2.put("eheh", UUID.randomUUID());
+        map2.put("normal", "normal");
+        myList2.add(map2);
+
+        Map<String, Object> map1 = new HashMap<>();
+        map1.put("hello", "world");
+        map1.put("test", uuid);
+        map1.put("hehe", myList2);
+        myList.add(map1);
+
+        myList.add("kjkj");
+        myList.add(UUID.randomUUID());
+
+        String json = mapper.writeValueAsString(myList);
+        Object read = mapper.readValue(json, Object.class);
+
+        // Not equals because of type loss
+        assertNotEquals(myList, read);
+    }
+
+
+    // Class needs to be defined as statics as it's a nested class.
+    public static class FunObject {
+        private String val;
+
+        public FunObject() {
+        }
+
+        public String getVal() {
+            return this.val;
+        }
+
+        public void setVal(String s) {
+            this.val = s;
+        }
+
+        public String toString() {
+            return this.val;
+        }
+    }
+
+    public <T> T serializeDeserialize(final Object o, final Class<T> clazz) throws Exception {
+        try (final ByteArrayOutputStream stream = new ByteArrayOutputStream()) {
+            mapper.writeValue(stream, o);
+
+            try (final InputStream inputStream = new ByteArrayInputStream(stream.toByteArray())) {
+                return mapper.readValue(inputStream, clazz);
+            }
+        }
+    }
+
+    public <T> T serializeDeserializeAuto(final Object o) throws Exception {
+        try (final ByteArrayOutputStream stream = new ByteArrayOutputStream()) {
+            mapper.writeValue(stream, o);
+
+            try (final InputStream inputStream = new ByteArrayInputStream(stream.toByteArray())) {
+                // Object.class is the wildcard that triggers the auto discovery.
+                return (T)mapper.readValue(inputStream, Object.class);
+            }
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/AbstractGraphSONMessageSerializerV2d0.java
----------------------------------------------------------------------
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/AbstractGraphSONMessageSerializerV2d0.java b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/AbstractGraphSONMessageSerializerV2d0.java
new file mode 100644
index 0000000..d0303eb
--- /dev/null
+++ b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/AbstractGraphSONMessageSerializerV2d0.java
@@ -0,0 +1,248 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.driver.ser;
+
+import groovy.json.JsonBuilder;
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.ByteBufAllocator;
+import io.netty.util.ReferenceCountUtil;
+import org.apache.tinkerpop.gremlin.driver.message.RequestMessage;
+import org.apache.tinkerpop.gremlin.driver.message.ResponseMessage;
+import org.apache.tinkerpop.gremlin.driver.message.ResponseStatusCode;
+import org.apache.tinkerpop.gremlin.structure.Graph;
+import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONIo;
+import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONMapper;
+import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONUtil;
+import org.apache.tinkerpop.shaded.jackson.core.JsonGenerationException;
+import org.apache.tinkerpop.shaded.jackson.core.JsonGenerator;
+import org.apache.tinkerpop.shaded.jackson.core.type.TypeReference;
+import org.apache.tinkerpop.shaded.jackson.databind.ObjectMapper;
+import org.apache.tinkerpop.shaded.jackson.databind.SerializerProvider;
+import org.apache.tinkerpop.shaded.jackson.databind.jsontype.TypeSerializer;
+import org.apache.tinkerpop.shaded.jackson.databind.module.SimpleModule;
+import org.apache.tinkerpop.shaded.jackson.databind.ser.std.StdSerializer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.IOException;
+import java.util.Map;
+import java.util.UUID;
+
+/**
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ */
+public abstract class AbstractGraphSONMessageSerializerV2d0 extends AbstractMessageSerializer {
+    private static final Logger logger = LoggerFactory.getLogger(AbstractGraphSONMessageSerializerV2d0.class);
+
+    protected ObjectMapper mapper;
+
+    protected static final String TOKEN_USE_MAPPER_FROM_GRAPH = "useMapperFromGraph";
+
+    protected final TypeReference<Map<String, Object>> mapTypeReference = new TypeReference<Map<String, Object>>() {
+    };
+
+    public AbstractGraphSONMessageSerializerV2d0() {
+        final GraphSONMapper.Builder builder = configureBuilder(GraphSONMapper.build());
+        mapper = builder.create().createMapper();
+    }
+
+    public AbstractGraphSONMessageSerializerV2d0(final GraphSONMapper mapper) {
+        this.mapper = mapper.createMapper();
+    }
+
+    abstract byte[] obtainHeader();
+
+    abstract GraphSONMapper.Builder configureBuilder(final GraphSONMapper.Builder builder);
+
+    @Override
+    public void configure(final Map<String, Object> config, final Map<String, Graph> graphs) {
+        final GraphSONMapper.Builder initialBuilder;
+        final Object graphToUseForMapper = config.get(TOKEN_USE_MAPPER_FROM_GRAPH);
+        if (graphToUseForMapper != null) {
+            if (null == graphs) throw new IllegalStateException(String.format(
+                    "No graphs have been provided to the serializer and therefore %s is not a valid configuration", TOKEN_USE_MAPPER_FROM_GRAPH));
+
+            final Graph g = graphs.get(graphToUseForMapper.toString());
+            if (null == g) throw new IllegalStateException(String.format(
+                    "There is no graph named [%s] configured to be used in the %s setting",
+                    graphToUseForMapper, TOKEN_USE_MAPPER_FROM_GRAPH));
+
+            // a graph was found so use the mapper it constructs.  this allows graphson to be auto-configured with any
+            // custom classes that the implementation allows for
+            initialBuilder = g.io(GraphSONIo.build()).mapper();
+        } else {
+            // no graph was supplied so just use the default - this will likely be the case when using a graph
+            // with no custom classes or a situation where the user needs complete control like when using two
+            // distinct implementations each with their own custom classes.
+            initialBuilder = GraphSONMapper.build();
+        }
+
+        addIoRegistries(config, initialBuilder);
+
+        mapper = configureBuilder(initialBuilder).create().createMapper();
+    }
+
+    @Override
+    public ByteBuf serializeResponseAsBinary(final ResponseMessage responseMessage, final ByteBufAllocator allocator) throws SerializationException {
+        ByteBuf encodedMessage = null;
+        try {
+            final byte[] payload = mapper.writeValueAsBytes(responseMessage);
+            encodedMessage = allocator.buffer(payload.length);
+            encodedMessage.writeBytes(payload);
+
+            return encodedMessage;
+        } catch (Exception ex) {
+            if (encodedMessage != null) ReferenceCountUtil.release(encodedMessage);
+
+            logger.warn("Response [{}] could not be serialized by {}.", responseMessage.toString(), AbstractGraphSONMessageSerializerV2d0.class.getName());
+            throw new SerializationException(ex);
+        }
+    }
+
+    @Override
+    public ByteBuf serializeRequestAsBinary(final RequestMessage requestMessage, final ByteBufAllocator allocator) throws SerializationException {
+        ByteBuf encodedMessage = null;
+        try {
+            final byte[] header = obtainHeader();
+            final byte[] payload = mapper.writeValueAsBytes(requestMessage);
+
+            encodedMessage = allocator.buffer(header.length + payload.length);
+            encodedMessage.writeBytes(header);
+            encodedMessage.writeBytes(payload);
+
+            return encodedMessage;
+        } catch (Exception ex) {
+            if (encodedMessage != null) ReferenceCountUtil.release(encodedMessage);
+
+            logger.warn("Request [{}] could not be serialized by {}.", requestMessage.toString(), AbstractGraphSONMessageSerializerV2d0.class.getName());
+            throw new SerializationException(ex);
+        }
+    }
+
+    @Override
+    public RequestMessage deserializeRequest(final ByteBuf msg) throws SerializationException {
+        try {
+            final byte[] payload = new byte[msg.readableBytes()];
+            msg.readBytes(payload);
+            return mapper.readValue(payload, RequestMessage.class);
+        } catch (Exception ex) {
+            logger.warn("Request [{}] could not be deserialized by {}.", msg, AbstractGraphSONMessageSerializerV2d0.class.getName());
+            throw new SerializationException(ex);
+        }
+    }
+
+    @Override
+    public ResponseMessage deserializeResponse(final ByteBuf msg) throws SerializationException {
+        try {
+            final byte[] payload = new byte[msg.readableBytes()];
+            msg.readBytes(payload);
+            final Map<String, Object> responseData = mapper.readValue(payload, mapTypeReference);
+            final Map<String, Object> status = (Map<String, Object>) responseData.get(SerTokens.TOKEN_STATUS);
+            final Map<String, Object> result = (Map<String, Object>) responseData.get(SerTokens.TOKEN_RESULT);
+            return ResponseMessage.build(UUID.fromString(responseData.get(SerTokens.TOKEN_REQUEST).toString()))
+                    .code(ResponseStatusCode.getFromValue((Integer) status.get(SerTokens.TOKEN_CODE)))
+                    .statusMessage(status.get(SerTokens.TOKEN_MESSAGE).toString())
+                    .statusAttributes((Map<String, Object>) status.get(SerTokens.TOKEN_ATTRIBUTES))
+                    .result(result.get(SerTokens.TOKEN_DATA))
+                    .responseMetaData((Map<String, Object>) result.get(SerTokens.TOKEN_META))
+                    .create();
+        } catch (Exception ex) {
+            logger.warn("Response [{}] could not be deserialized by {}.", msg, AbstractGraphSONMessageSerializerV2d0.class.getName());
+            throw new SerializationException(ex);
+        }
+    }
+
+    public final static class GremlinServerModule extends SimpleModule {
+        public GremlinServerModule() {
+            super("graphson-gremlin-server");
+            addSerializer(JsonBuilder.class, new JsonBuilderJacksonSerializer());
+            addSerializer(ResponseMessage.class, new ResponseMessageSerializer());
+        }
+    }
+
+    public final static class JsonBuilderJacksonSerializer extends StdSerializer<JsonBuilder> {
+        public JsonBuilderJacksonSerializer() {
+            super(JsonBuilder.class);
+        }
+
+        @Override
+        public void serialize(final JsonBuilder json, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
+                throws IOException, JsonGenerationException {
+            // the JSON from the builder will already be started/ended as array or object...just need to surround it
+            // with appropriate chars to fit into the serialization pattern.
+            jsonGenerator.writeRaw(":");
+            jsonGenerator.writeRaw(json.toString());
+            jsonGenerator.writeRaw(",");
+        }
+    }
+
+    public final static class ResponseMessageSerializer extends StdSerializer<ResponseMessage> {
+        public ResponseMessageSerializer() {
+            super(ResponseMessage.class);
+        }
+
+        @Override
+        public void serialize(final ResponseMessage responseMessage, final JsonGenerator jsonGenerator,
+                              final SerializerProvider serializerProvider) throws IOException {
+            ser(responseMessage, jsonGenerator, serializerProvider, null);
+        }
+
+        @Override
+        public void serializeWithType(final ResponseMessage responseMessage, final JsonGenerator jsonGenerator,
+                                      final SerializerProvider serializerProvider,
+                                      final TypeSerializer typeSerializer) throws IOException {
+            ser(responseMessage, jsonGenerator, serializerProvider, typeSerializer);
+        }
+
+        public void ser(final ResponseMessage responseMessage, final JsonGenerator jsonGenerator,
+                        final SerializerProvider serializerProvider,
+                        final TypeSerializer typeSerializer) throws IOException {
+            GraphSONUtil.writeStartObject(responseMessage, jsonGenerator, typeSerializer);
+
+            jsonGenerator.writeStringField(SerTokens.TOKEN_REQUEST, responseMessage.getRequestId() != null ? responseMessage.getRequestId().toString() : null);
+            jsonGenerator.writeFieldName(SerTokens.TOKEN_STATUS);
+
+            GraphSONUtil.writeStartObject(responseMessage, jsonGenerator, typeSerializer);
+            jsonGenerator.writeStringField(SerTokens.TOKEN_MESSAGE, responseMessage.getStatus().getMessage());
+            jsonGenerator.writeNumberField(SerTokens.TOKEN_CODE, responseMessage.getStatus().getCode().getValue());
+            jsonGenerator.writeObjectField(SerTokens.TOKEN_ATTRIBUTES, responseMessage.getStatus().getAttributes());
+            GraphSONUtil.writeEndObject(responseMessage, jsonGenerator, typeSerializer);
+
+            jsonGenerator.writeFieldName(SerTokens.TOKEN_RESULT);
+
+            GraphSONUtil.writeStartObject(responseMessage, jsonGenerator, typeSerializer);
+
+            if (null == responseMessage.getResult().getData())
+            {
+                jsonGenerator.writeNullField(SerTokens.TOKEN_DATA);
+            }
+            else
+            {
+                jsonGenerator.writeFieldName(SerTokens.TOKEN_DATA);
+                Object result = responseMessage.getResult().getData();
+                serializerProvider.findTypedValueSerializer(result.getClass(), true, null).serialize(result, jsonGenerator, serializerProvider);
+            }
+
+            jsonGenerator.writeObjectField(SerTokens.TOKEN_META, responseMessage.getResult().getMeta());
+            GraphSONUtil.writeEndObject(responseMessage, jsonGenerator, typeSerializer);
+
+            GraphSONUtil.writeEndObject(responseMessage, jsonGenerator, typeSerializer);
+        }
+    }
+}


[04/48] tinkerpop git commit: Merge branch 'TINKERPOP-1397-tp31' into TINKERPOP-1397

Posted by sp...@apache.org.
Merge branch 'TINKERPOP-1397-tp31' into TINKERPOP-1397


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/b4aaa69b
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/b4aaa69b
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/b4aaa69b

Branch: refs/heads/TINKERPOP-1278
Commit: b4aaa69b9c10a61c7ab2f7476c90e4728ef032e8
Parents: 7842c4e 0022b7f
Author: Dan LaRocque <da...@hopcount.org>
Authored: Wed Aug 10 19:24:10 2016 -0400
Committer: Dan LaRocque <da...@hopcount.org>
Committed: Wed Aug 10 19:24:10 2016 -0400

----------------------------------------------------------------------
 .../gremlin/structure/util/star/StarGraph.java     | 17 ++++++++++-------
 1 file changed, 10 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/b4aaa69b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/StarGraph.java
----------------------------------------------------------------------
diff --cc gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/StarGraph.java
index 73c7ca7,2089c42..90c02ff
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/StarGraph.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/StarGraph.java
@@@ -38,9 -37,9 +38,10 @@@ import org.apache.tinkerpop.gremlin.uti
  
  import java.io.Serializable;
  import java.util.ArrayList;
+ import java.util.Arrays;
  import java.util.Collections;
  import java.util.HashMap;
 +import java.util.HashSet;
  import java.util.Iterator;
  import java.util.List;
  import java.util.Map;


[07/48] tinkerpop git commit: remove excess bulk in tail buffer

Posted by sp...@apache.org.
remove excess bulk in tail buffer


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/6d293942
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/6d293942
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/6d293942

Branch: refs/heads/TINKERPOP-1278
Commit: 6d29394225ff49ad12582d8e8e5bfc7b07e9ccfa
Parents: 4571061
Author: Jason Plurad <pl...@us.ibm.com>
Authored: Sat Jul 30 00:04:54 2016 -0400
Committer: Jason Plurad <pl...@us.ibm.com>
Committed: Fri Aug 12 08:29:01 2016 -0400

----------------------------------------------------------------------
 CHANGELOG.asciidoc                                |  1 +
 .../traversal/step/filter/TailGlobalStep.java     |  5 ++++-
 .../traversal/step/filter/GroovyTailTest.groovy   |  5 +++++
 .../process/traversal/step/filter/TailTest.java   | 18 ++++++++++++++++++
 4 files changed, 28 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6d293942/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 975f6cf..fefffb0 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -29,6 +29,7 @@ TinkerPop 3.1.4 (NOT OFFICIALLY RELEASED YET)
 * Fixed a potential leak of a `ReferenceCounted` resource in Gremlin Server.
 * Renamed distributions to make the prefix "apache-tinkerpop-" as opposed to just "apache-".
 * Fixed a problem (previously thought resolved on 3.1.3) causing Gremlin Server to lock up when parallel requests were submitted on the same session if those parallel requests included a script that blocked indefinitely.
+* Fixed bug in `TailGlobalStep` where excess bulk was not accounted for correctly.
 
 [[release-3-1-3]]
 TinkerPop 3.1.3 (Release Date: July 18, 2016)

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6d293942/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/TailGlobalStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/TailGlobalStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/TailGlobalStep.java
index 19d3d95..33c7c22 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/TailGlobalStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/TailGlobalStep.java
@@ -64,8 +64,11 @@ public final class TailGlobalStep<S> extends AbstractStep<S, S> implements Bypas
             final Traverser.Admin<S> oldest = this.tail.pop();
             // Trim any excess from the oldest traverser.
             final long excess = this.tailBulk - this.limit;
-            if (excess > 0)
+            if (excess > 0) {
                 oldest.setBulk(oldest.bulk() - excess);
+                // Account for the loss of excess in the tail buffer
+                this.tailBulk -= excess;
+            }
             // Account for the loss of bulk in the tail buffer as we emit the oldest traverser.
             this.tailBulk -= oldest.bulk();
             return oldest;

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6d293942/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyTailTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyTailTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyTailTest.groovy
index 50f4d96..7fac07e 100644
--- a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyTailTest.groovy
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyTailTest.groovy
@@ -65,6 +65,11 @@ public abstract class GroovyTailTest {
         }
 
         @Override
+        public Traversal<Vertex, Long> get_g_V_repeatXin_outX_timesX3X_tailX7X_count() {
+            TraversalScriptHelper.compute("g.V.repeat(__.in().out()).times(3).tail(7).count()",g)
+        }
+
+        @Override
         public Traversal<Vertex, List<String>> get_g_V_asXaX_out_asXaX_out_asXaX_selectXaX_byXunfold_valuesXnameX_foldX_tailXlocal_2X() {
             TraversalScriptHelper.compute("g.V.as('a').out.as('a').out.as('a').select('a').by(unfold().values('name').fold).tail(local, 2)",g)
         }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6d293942/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/TailTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/TailTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/TailTest.java
index 21bdbe6..738964c 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/TailTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/TailTest.java
@@ -28,6 +28,7 @@ import org.junit.runner.RunWith;
 
 import static org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.MODERN;
 import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.both;
+import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.in;
 import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.limit;
 import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.unfold;
 import static org.apache.tinkerpop.gremlin.process.traversal.Scope.global;
@@ -35,6 +36,7 @@ import static org.apache.tinkerpop.gremlin.process.traversal.Scope.local;
 import static org.junit.Assert.assertEquals;
 
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
@@ -58,6 +60,8 @@ public abstract class TailTest extends AbstractGremlinProcessTest {
 
     public abstract Traversal<Vertex, Vertex> get_g_V_repeatXbothX_timesX3X_tailX7X();
 
+    public abstract Traversal<Vertex, Long> get_g_V_repeatXin_outX_timesX3X_tailX7X_count();
+
     public abstract Traversal<Vertex, List<String>> get_g_V_asXaX_out_asXaX_out_asXaX_selectXaX_byXunfold_valuesXnameX_foldX_tailXlocal_2X();
 
     public abstract Traversal<Vertex, String> get_g_V_asXaX_out_asXaX_out_asXaX_selectXaX_byXunfold_valuesXnameX_foldX_tailXlocal_1X();
@@ -120,6 +124,15 @@ public abstract class TailTest extends AbstractGremlinProcessTest {
         assertEquals(7, counter);
     }
 
+    /** Scenario: Global scope, using repeat (excess BULK) */
+    @Test
+    @LoadGraphWith(MODERN)
+    public void g_V_repeatXin_outX_timesX3X_tailX7X_count() {
+        final Traversal<Vertex, Long> traversal = get_g_V_repeatXin_outX_timesX3X_tailX7X_count();
+        printTraversalForm(traversal);
+        checkResults(Collections.singletonList(7L), traversal);
+    }
+
     /** Scenario: Local scope, List input, N>1 */
     @Test
     @LoadGraphWith(MODERN)
@@ -221,6 +234,11 @@ public abstract class TailTest extends AbstractGremlinProcessTest {
         }
 
         @Override
+        public Traversal<Vertex, Long> get_g_V_repeatXin_outX_timesX3X_tailX7X_count() {
+            return g.V().repeat(in().out()).times(3).tail(7).count();
+        }
+
+        @Override
         public Traversal<Vertex, List<String>> get_g_V_asXaX_out_asXaX_out_asXaX_selectXaX_byXunfold_valuesXnameX_foldX_tailXlocal_2X() {
             return g.V().as("a").out().as("a").out().as("a").<List<String>>select("a").by(unfold().values("name").fold()).tail(local, 2);
         }


[19/48] tinkerpop git commit: Merge remote-tracking branch 'origin/TINKERPOP-989' into tp31

Posted by sp...@apache.org.
Merge remote-tracking branch 'origin/TINKERPOP-989' into tp31


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/ed418add
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/ed418add
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/ed418add

Branch: refs/heads/TINKERPOP-1278
Commit: ed418add2f83e0c7272c55dfe629890eb9b46e8b
Parents: 4443dcf f1ec0b6
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed Aug 17 07:09:20 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed Aug 17 07:09:20 2016 -0400

----------------------------------------------------------------------
 docs/src/index.asciidoc                    |  87 ++++++++++++++++++++++++
 docs/static/images/gremlin-gym-cropped.png | Bin 0 -> 32532 bytes
 pom.xml                                    |  22 ++++++
 3 files changed, 109 insertions(+)
----------------------------------------------------------------------



[45/48] tinkerpop git commit: Moved upgrade docs for GraphSON 2.0 out of 3.2.1 to 3.2.2. CTR

Posted by sp...@apache.org.
Moved upgrade docs for GraphSON 2.0 out of 3.2.1 to 3.2.2. CTR


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/47106901
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/47106901
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/47106901

Branch: refs/heads/TINKERPOP-1278
Commit: 47106901baaee30dee3af309b9b2d8859daed338
Parents: de139ed
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Mon Aug 22 13:00:45 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Mon Aug 22 13:00:45 2016 -0400

----------------------------------------------------------------------
 .../upgrade/release-3.2.x-incubating.asciidoc   | 44 +++++++++++---------
 1 file changed, 24 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/47106901/docs/src/upgrade/release-3.2.x-incubating.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/upgrade/release-3.2.x-incubating.asciidoc b/docs/src/upgrade/release-3.2.x-incubating.asciidoc
index bf29feb..77333d4 100644
--- a/docs/src/upgrade/release-3.2.x-incubating.asciidoc
+++ b/docs/src/upgrade/release-3.2.x-incubating.asciidoc
@@ -32,6 +32,15 @@ Please see the link:https://github.com/apache/tinkerpop/blob/3.2.2/CHANGELOG.asc
 Upgrading for Users
 ~~~~~~~~~~~~~~~~~~~
 
+GraphSON 2.0
+^^^^^^^^^^^^
+
+GraphSON 2.0 has been introduced to improve and normalize the format of types embedded in GraphSON.
+
+See: link:https://issues.apache.org/jira/browse/TINKERPOP-1274[TINKERPOP-1274],
+link:http://tinkerpop.apache.org/docs/3.2.1-incubating/reference/#graphson-2.0-types[Reference Documentation -
+GraphSON 2.0].
+
 Log4j Dependencies
 ^^^^^^^^^^^^^^^^^^
 
@@ -83,6 +92,21 @@ dependending on `gremlin-test` (or `gremlin-groovy-test`) will need to explicitl
 
 See: link:https://issues.apache.org/jira/browse/TINKERPOP-1151[TINKERPOP-1151]
 
+Graph Drivers Providers
+^^^^^^^^^^^^^^^^^^^^^^
+
+GraphSON 2.0
+++++++++++++
+
+Drivers providers can exploit the new format of typed values JSON serialization offered by GraphSON 2.0. This format
+has been created to allow easy and agnostic parsing of a GraphSON payload without type loss. Drivers of non-Java
+languages can then implement their own mapping of the GraphSON's language agnostic type IDs (e.g. `UUID`, `LocalDate`)
+to the appropriate representation for the driver's language.
+
+See: link:https://issues.apache.org/jira/browse/TINKERPOP-1274[TINKERPOP-1274],
+link:http://tinkerpop.apache.org/docs/3.2.1-incubating/reference/#graphson-2.0-types[Reference Documentation -
+GraphSON 2.0].
+
 TinkerPop 3.2.1
 ---------------
 
@@ -93,13 +117,6 @@ Please see the link:https://github.com/apache/tinkerpop/blob/3.2.1/CHANGELOG.asc
 Upgrading for Users
 ~~~~~~~~~~~~~~~~~~~
 
-GraphSON 2.0
-^^^^^^^^^^^^
-
-GraphSON 2.0 has been introduced to improve and normalize the format of types embedding in GraphSON. Please see
-link:http://tinkerpop.apache.org/docs/3.2.1-incubating/reference/#graphson-2.0-types[Reference Documentation -
-GraphSON 2.0] and link:https://issues.apache.org/jira/browse/TINKERPOP-1274[TINKERPOP-1274].
-
 Gephi Plugin
 ^^^^^^^^^^^^
 
@@ -275,19 +292,6 @@ VertexTest Signatures
 The method signatures of `get_g_VXlistXv1_v2_v3XX_name` and `get_g_VXlistX1_2_3XX_name` of `VertexTest` were changed
 to take arguments for the `Traversal` to be constructed by extending classes.
 
-Graph Drivers Providers
-^^^^^^^^^^^^^^^^^^^^^^
-
-GraphSON 2.0
-++++++++++++
-
-Drivers providers can exploit the new format of typed values JSON serialization offered by GraphSON 2.0. This format
-has been created to allow easy and agnostic parsing of a GraphSON payload without type loss. Drivers of non Java
-languages can then implement their own mapping of the GraphSON's language agnostic type IDs like `UUID`, `LocalDate` to
-the appropriate representation for the driver's language. A more detailed description of GraphSON 2.0 can be found
-there : link:http://tinkerpop.apache.org/docs/3.2.1-incubating/reference/#graphson-2.0-types[Reference Documentation
-- GraphSON 2.0]
-
 TinkerPop 3.2.0
 ---------------
 


[42/48] tinkerpop git commit: Merge branch 'tp31'

Posted by sp...@apache.org.
Merge branch 'tp31'


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/93ee1829
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/93ee1829
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/93ee1829

Branch: refs/heads/TINKERPOP-1278
Commit: 93ee182991584323ee3be809cfb604c9a69ab8d9
Parents: da47a21 5fcaeef
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Mon Aug 22 10:06:53 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Mon Aug 22 10:06:53 2016 -0600

----------------------------------------------------------------------
 CHANGELOG.asciidoc                                             | 1 +
 .../gremlin/process/traversal/step/map/PropertiesTest.java     | 6 ++++--
 2 files changed, 5 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/93ee1829/CHANGELOG.asciidoc
----------------------------------------------------------------------


[15/48] tinkerpop git commit: TINKERPOP-1390 Lowered threshold for failure of this test.

Posted by sp...@apache.org.
TINKERPOP-1390 Lowered threshold for failure of this test.

This test was failing randomly on certain systems. Unsure if the new threshold will prevent the failures, but decided to start high with the setting rather than low. CTR


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/9542419f
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/9542419f
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/9542419f

Branch: refs/heads/TINKERPOP-1278
Commit: 9542419ff262d102f8f8ec21dc28d795fbe876bc
Parents: 5d87d27
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Fri Aug 12 16:06:32 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Fri Aug 12 16:06:32 2016 -0400

----------------------------------------------------------------------
 .../traversal/strategy/TraversalStrategyPerformanceTest.java       | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9542419f/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/TraversalStrategyPerformanceTest.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/TraversalStrategyPerformanceTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/TraversalStrategyPerformanceTest.java
index f589cc3..5b933b8 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/TraversalStrategyPerformanceTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/TraversalStrategyPerformanceTest.java
@@ -51,7 +51,7 @@ public abstract class TraversalStrategyPerformanceTest {
      * original traversal. Default is 100.
      */
     protected double getAssertionPercentile() {
-        return 100.0;
+        return 95.0;
     }
 
     protected abstract Class<? extends TraversalStrategy> getStrategyUnderTest();


[35/48] tinkerpop git commit: TINKERPOP-1274: GraphSON 2.0.

Posted by sp...@apache.org.
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/data/tinkerpop-classic-v2d0-typed.json
----------------------------------------------------------------------
diff --git a/data/tinkerpop-classic-v2d0-typed.json b/data/tinkerpop-classic-v2d0-typed.json
new file mode 100644
index 0000000..56956ea
--- /dev/null
+++ b/data/tinkerpop-classic-v2d0-typed.json
@@ -0,0 +1,6 @@
+{"id":{"@type":"gremlin:int32","@value":1},"label":"vertex","outE":{"created":[{"id":{"@type":"gremlin:int32","@value":9},"inV":{"@type":"gremlin:int32","@value":3},"properties":{"weight":{"@type":"gremlin:float","@value":0.4}}}],"knows":[{"id":{"@type":"gremlin:int32","@value":7},"inV":{"@type":"gremlin:int32","@value":2},"properties":{"weight":{"@type":"gremlin:float","@value":0.5}}},{"id":{"@type":"gremlin:int32","@value":8},"inV":{"@type":"gremlin:int32","@value":4},"properties":{"weight":{"@type":"gremlin:float","@value":1.0}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int32","@value":0},"value":"marko"}],"age":[{"id":{"@type":"gremlin:int32","@value":2},"value":{"@type":"gremlin:int32","@value":29}}]}}
+{"id":{"@type":"gremlin:int32","@value":2},"label":"vertex","inE":{"knows":[{"id":{"@type":"gremlin:int32","@value":7},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"weight":{"@type":"gremlin:float","@value":0.5}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int32","@value":3},"value":"vadas"}],"age":[{"id":{"@type":"gremlin:int32","@value":4},"value":{"@type":"gremlin:int32","@value":27}}]}}
+{"id":{"@type":"gremlin:int32","@value":3},"label":"vertex","inE":{"created":[{"id":{"@type":"gremlin:int32","@value":9},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"weight":{"@type":"gremlin:float","@value":0.4}}},{"id":{"@type":"gremlin:int32","@value":11},"outV":{"@type":"gremlin:int32","@value":4},"properties":{"weight":{"@type":"gremlin:float","@value":0.4}}},{"id":{"@type":"gremlin:int32","@value":12},"outV":{"@type":"gremlin:int32","@value":6},"properties":{"weight":{"@type":"gremlin:float","@value":0.2}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int32","@value":5},"value":"lop"}],"lang":[{"id":{"@type":"gremlin:int32","@value":6},"value":"java"}]}}
+{"id":{"@type":"gremlin:int32","@value":4},"label":"vertex","inE":{"knows":[{"id":{"@type":"gremlin:int32","@value":8},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"weight":{"@type":"gremlin:float","@value":1.0}}}]},"outE":{"created":[{"id":{"@type":"gremlin:int32","@value":10},"inV":{"@type":"gremlin:int32","@value":5},"properties":{"weight":{"@type":"gremlin:float","@value":1.0}}},{"id":{"@type":"gremlin:int32","@value":11},"inV":{"@type":"gremlin:int32","@value":3},"properties":{"weight":{"@type":"gremlin:float","@value":0.4}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int32","@value":7},"value":"josh"}],"age":[{"id":{"@type":"gremlin:int32","@value":8},"value":{"@type":"gremlin:int32","@value":32}}]}}
+{"id":{"@type":"gremlin:int32","@value":5},"label":"vertex","inE":{"created":[{"id":{"@type":"gremlin:int32","@value":10},"outV":{"@type":"gremlin:int32","@value":4},"properties":{"weight":{"@type":"gremlin:float","@value":1.0}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int32","@value":9},"value":"ripple"}],"lang":[{"id":{"@type":"gremlin:int32","@value":10},"value":"java"}]}}
+{"id":{"@type":"gremlin:int32","@value":6},"label":"vertex","outE":{"created":[{"id":{"@type":"gremlin:int32","@value":12},"inV":{"@type":"gremlin:int32","@value":3},"properties":{"weight":{"@type":"gremlin:float","@value":0.2}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int32","@value":11},"value":"peter"}],"age":[{"id":{"@type":"gremlin:int32","@value":12},"value":{"@type":"gremlin:int32","@value":35}}]}}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/data/tinkerpop-classic-v2d0.json
----------------------------------------------------------------------
diff --git a/data/tinkerpop-classic-v2d0.json b/data/tinkerpop-classic-v2d0.json
new file mode 100644
index 0000000..5ccfe05
--- /dev/null
+++ b/data/tinkerpop-classic-v2d0.json
@@ -0,0 +1,6 @@
+{"id":1,"label":"vertex","outE":{"created":[{"id":9,"inV":3,"properties":{"weight":0.4}}],"knows":[{"id":7,"inV":2,"properties":{"weight":0.5}},{"id":8,"inV":4,"properties":{"weight":1.0}}]},"properties":{"name":[{"id":0,"value":"marko"}],"age":[{"id":2,"value":29}]}}
+{"id":2,"label":"vertex","inE":{"knows":[{"id":7,"outV":1,"properties":{"weight":0.5}}]},"properties":{"name":[{"id":3,"value":"vadas"}],"age":[{"id":4,"value":27}]}}
+{"id":3,"label":"vertex","inE":{"created":[{"id":9,"outV":1,"properties":{"weight":0.4}},{"id":11,"outV":4,"properties":{"weight":0.4}},{"id":12,"outV":6,"properties":{"weight":0.2}}]},"properties":{"name":[{"id":5,"value":"lop"}],"lang":[{"id":6,"value":"java"}]}}
+{"id":4,"label":"vertex","inE":{"knows":[{"id":8,"outV":1,"properties":{"weight":1.0}}]},"outE":{"created":[{"id":10,"inV":5,"properties":{"weight":1.0}},{"id":11,"inV":3,"properties":{"weight":0.4}}]},"properties":{"name":[{"id":7,"value":"josh"}],"age":[{"id":8,"value":32}]}}
+{"id":5,"label":"vertex","inE":{"created":[{"id":10,"outV":4,"properties":{"weight":1.0}}]},"properties":{"name":[{"id":9,"value":"ripple"}],"lang":[{"id":10,"value":"java"}]}}
+{"id":6,"label":"vertex","outE":{"created":[{"id":12,"inV":3,"properties":{"weight":0.2}}]},"properties":{"name":[{"id":11,"value":"peter"}],"age":[{"id":12,"value":35}]}}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/data/tinkerpop-crew-v2d0-typed.json
----------------------------------------------------------------------
diff --git a/data/tinkerpop-crew-v2d0-typed.json b/data/tinkerpop-crew-v2d0-typed.json
new file mode 100644
index 0000000..e688520
--- /dev/null
+++ b/data/tinkerpop-crew-v2d0-typed.json
@@ -0,0 +1,6 @@
+{"id":{"@type":"gremlin:int32","@value":1},"label":"person","outE":{"uses":[{"id":{"@type":"gremlin:int32","@value":16},"inV":{"@type":"gremlin:int32","@value":11},"properties":{"skill":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":15},"inV":{"@type":"gremlin:int32","@value":10},"properties":{"skill":{"@type":"gremlin:int32","@value":4}}}],"develops":[{"id":{"@type":"gremlin:int32","@value":13},"inV":{"@type":"gremlin:int32","@value":10},"properties":{"since":{"@type":"gremlin:int32","@value":2009}}},{"id":{"@type":"gremlin:int32","@value":14},"inV":{"@type":"gremlin:int32","@value":11},"properties":{"since":{"@type":"gremlin:int32","@value":2010}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":0},"value":"marko"}],"location":[{"id":{"@type":"gremlin:int64","@value":6},"value":"san diego","properties":{"startTime":{"@type":"gremlin:int32","@value":1997},"endTime":{"@type":"gremlin:int32","@value":2001}}},{"id":{"@type":"gremlin:int6
 4","@value":7},"value":"santa cruz","properties":{"startTime":{"@type":"gremlin:int32","@value":2001},"endTime":{"@type":"gremlin:int32","@value":2004}}},{"id":{"@type":"gremlin:int64","@value":8},"value":"brussels","properties":{"startTime":{"@type":"gremlin:int32","@value":2004},"endTime":{"@type":"gremlin:int32","@value":2005}}},{"id":{"@type":"gremlin:int64","@value":9},"value":"santa fe","properties":{"startTime":{"@type":"gremlin:int32","@value":2005}}}]}}
+{"id":{"@type":"gremlin:int32","@value":7},"label":"person","outE":{"uses":[{"id":{"@type":"gremlin:int32","@value":19},"inV":{"@type":"gremlin:int32","@value":10},"properties":{"skill":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":20},"inV":{"@type":"gremlin:int32","@value":11},"properties":{"skill":{"@type":"gremlin:int32","@value":4}}}],"develops":[{"id":{"@type":"gremlin:int32","@value":17},"inV":{"@type":"gremlin:int32","@value":10},"properties":{"since":{"@type":"gremlin:int32","@value":2010}}},{"id":{"@type":"gremlin:int32","@value":18},"inV":{"@type":"gremlin:int32","@value":11},"properties":{"since":{"@type":"gremlin:int32","@value":2011}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":1},"value":"stephen"}],"location":[{"id":{"@type":"gremlin:int64","@value":10},"value":"centreville","properties":{"startTime":{"@type":"gremlin:int32","@value":1990},"endTime":{"@type":"gremlin:int32","@value":2000}}},{"id":{"@type":"gremlin
 :int64","@value":11},"value":"dulles","properties":{"startTime":{"@type":"gremlin:int32","@value":2000},"endTime":{"@type":"gremlin:int32","@value":2006}}},{"id":{"@type":"gremlin:int64","@value":12},"value":"purcellville","properties":{"startTime":{"@type":"gremlin:int32","@value":2006}}}]}}
+{"id":{"@type":"gremlin:int32","@value":8},"label":"person","outE":{"uses":[{"id":{"@type":"gremlin:int32","@value":22},"inV":{"@type":"gremlin:int32","@value":10},"properties":{"skill":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":23},"inV":{"@type":"gremlin:int32","@value":11},"properties":{"skill":{"@type":"gremlin:int32","@value":3}}}],"develops":[{"id":{"@type":"gremlin:int32","@value":21},"inV":{"@type":"gremlin:int32","@value":10},"properties":{"since":{"@type":"gremlin:int32","@value":2012}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":2},"value":"matthias"}],"location":[{"id":{"@type":"gremlin:int64","@value":13},"value":"bremen","properties":{"startTime":{"@type":"gremlin:int32","@value":2004},"endTime":{"@type":"gremlin:int32","@value":2007}}},{"id":{"@type":"gremlin:int64","@value":14},"value":"baltimore","properties":{"startTime":{"@type":"gremlin:int32","@value":2007},"endTime":{"@type":"gremlin:int32","@value":2011}
 }},{"id":{"@type":"gremlin:int64","@value":15},"value":"oakland","properties":{"startTime":{"@type":"gremlin:int32","@value":2011},"endTime":{"@type":"gremlin:int32","@value":2014}}},{"id":{"@type":"gremlin:int64","@value":16},"value":"seattle","properties":{"startTime":{"@type":"gremlin:int32","@value":2014}}}]}}
+{"id":{"@type":"gremlin:int32","@value":9},"label":"person","outE":{"uses":[{"id":{"@type":"gremlin:int32","@value":24},"inV":{"@type":"gremlin:int32","@value":10},"properties":{"skill":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":25},"inV":{"@type":"gremlin:int32","@value":11},"properties":{"skill":{"@type":"gremlin:int32","@value":3}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":3},"value":"daniel"}],"location":[{"id":{"@type":"gremlin:int64","@value":17},"value":"spremberg","properties":{"startTime":{"@type":"gremlin:int32","@value":1982},"endTime":{"@type":"gremlin:int32","@value":2005}}},{"id":{"@type":"gremlin:int64","@value":18},"value":"kaiserslautern","properties":{"startTime":{"@type":"gremlin:int32","@value":2005},"endTime":{"@type":"gremlin:int32","@value":2009}}},{"id":{"@type":"gremlin:int64","@value":19},"value":"aachen","properties":{"startTime":{"@type":"gremlin:int32","@value":2009}}}]}}
+{"id":{"@type":"gremlin:int32","@value":10},"label":"software","inE":{"uses":[{"id":{"@type":"gremlin:int32","@value":19},"outV":{"@type":"gremlin:int32","@value":7},"properties":{"skill":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":22},"outV":{"@type":"gremlin:int32","@value":8},"properties":{"skill":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":24},"outV":{"@type":"gremlin:int32","@value":9},"properties":{"skill":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":15},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"skill":{"@type":"gremlin:int32","@value":4}}}],"develops":[{"id":{"@type":"gremlin:int32","@value":17},"outV":{"@type":"gremlin:int32","@value":7},"properties":{"since":{"@type":"gremlin:int32","@value":2010}}},{"id":{"@type":"gremlin:int32","@value":21},"outV":{"@type":"gremlin:int32","@value":8},"properties":{"since":{"@type":"gremlin:int32","@value":2012}}},{"id":
 {"@type":"gremlin:int32","@value":13},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"since":{"@type":"gremlin:int32","@value":2009}}}]},"outE":{"traverses":[{"id":{"@type":"gremlin:int32","@value":26},"inV":{"@type":"gremlin:int32","@value":11}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":4},"value":"gremlin"}]}}
+{"id":{"@type":"gremlin:int32","@value":11},"label":"software","inE":{"traverses":[{"id":{"@type":"gremlin:int32","@value":26},"outV":{"@type":"gremlin:int32","@value":10}}],"uses":[{"id":{"@type":"gremlin:int32","@value":16},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"skill":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":20},"outV":{"@type":"gremlin:int32","@value":7},"properties":{"skill":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":23},"outV":{"@type":"gremlin:int32","@value":8},"properties":{"skill":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":25},"outV":{"@type":"gremlin:int32","@value":9},"properties":{"skill":{"@type":"gremlin:int32","@value":3}}}],"develops":[{"id":{"@type":"gremlin:int32","@value":18},"outV":{"@type":"gremlin:int32","@value":7},"properties":{"since":{"@type":"gremlin:int32","@value":2011}}},{"id":{"@type":"gremlin:int32","@value":14},"outV":{"@
 type":"gremlin:int32","@value":1},"properties":{"since":{"@type":"gremlin:int32","@value":2010}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":5},"value":"tinkergraph"}]}}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/data/tinkerpop-crew-v2d0.json
----------------------------------------------------------------------
diff --git a/data/tinkerpop-crew-v2d0.json b/data/tinkerpop-crew-v2d0.json
new file mode 100644
index 0000000..2165e4d
--- /dev/null
+++ b/data/tinkerpop-crew-v2d0.json
@@ -0,0 +1,6 @@
+{"id":1,"label":"person","outE":{"uses":[{"id":16,"inV":11,"properties":{"skill":5}},{"id":15,"inV":10,"properties":{"skill":4}}],"develops":[{"id":13,"inV":10,"properties":{"since":2009}},{"id":14,"inV":11,"properties":{"since":2010}}]},"properties":{"name":[{"id":0,"value":"marko"}],"location":[{"id":6,"value":"san diego","properties":{"startTime":1997,"endTime":2001}},{"id":7,"value":"santa cruz","properties":{"startTime":2001,"endTime":2004}},{"id":8,"value":"brussels","properties":{"startTime":2004,"endTime":2005}},{"id":9,"value":"santa fe","properties":{"startTime":2005}}]}}
+{"id":7,"label":"person","outE":{"uses":[{"id":19,"inV":10,"properties":{"skill":5}},{"id":20,"inV":11,"properties":{"skill":4}}],"develops":[{"id":17,"inV":10,"properties":{"since":2010}},{"id":18,"inV":11,"properties":{"since":2011}}]},"properties":{"name":[{"id":1,"value":"stephen"}],"location":[{"id":10,"value":"centreville","properties":{"startTime":1990,"endTime":2000}},{"id":11,"value":"dulles","properties":{"startTime":2000,"endTime":2006}},{"id":12,"value":"purcellville","properties":{"startTime":2006}}]}}
+{"id":8,"label":"person","outE":{"uses":[{"id":22,"inV":10,"properties":{"skill":3}},{"id":23,"inV":11,"properties":{"skill":3}}],"develops":[{"id":21,"inV":10,"properties":{"since":2012}}]},"properties":{"name":[{"id":2,"value":"matthias"}],"location":[{"id":13,"value":"bremen","properties":{"startTime":2004,"endTime":2007}},{"id":14,"value":"baltimore","properties":{"startTime":2007,"endTime":2011}},{"id":15,"value":"oakland","properties":{"startTime":2011,"endTime":2014}},{"id":16,"value":"seattle","properties":{"startTime":2014}}]}}
+{"id":9,"label":"person","outE":{"uses":[{"id":24,"inV":10,"properties":{"skill":5}},{"id":25,"inV":11,"properties":{"skill":3}}]},"properties":{"name":[{"id":3,"value":"daniel"}],"location":[{"id":17,"value":"spremberg","properties":{"startTime":1982,"endTime":2005}},{"id":18,"value":"kaiserslautern","properties":{"startTime":2005,"endTime":2009}},{"id":19,"value":"aachen","properties":{"startTime":2009}}]}}
+{"id":10,"label":"software","inE":{"uses":[{"id":19,"outV":7,"properties":{"skill":5}},{"id":22,"outV":8,"properties":{"skill":3}},{"id":24,"outV":9,"properties":{"skill":5}},{"id":15,"outV":1,"properties":{"skill":4}}],"develops":[{"id":17,"outV":7,"properties":{"since":2010}},{"id":21,"outV":8,"properties":{"since":2012}},{"id":13,"outV":1,"properties":{"since":2009}}]},"outE":{"traverses":[{"id":26,"inV":11}]},"properties":{"name":[{"id":4,"value":"gremlin"}]}}
+{"id":11,"label":"software","inE":{"traverses":[{"id":26,"outV":10}],"uses":[{"id":16,"outV":1,"properties":{"skill":5}},{"id":20,"outV":7,"properties":{"skill":4}},{"id":23,"outV":8,"properties":{"skill":3}},{"id":25,"outV":9,"properties":{"skill":3}}],"develops":[{"id":18,"outV":7,"properties":{"since":2011}},{"id":14,"outV":1,"properties":{"since":2010}}]},"properties":{"name":[{"id":5,"value":"tinkergraph"}]}}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/data/tinkerpop-modern-v2d0-typed.json
----------------------------------------------------------------------
diff --git a/data/tinkerpop-modern-v2d0-typed.json b/data/tinkerpop-modern-v2d0-typed.json
new file mode 100644
index 0000000..9a297c3
--- /dev/null
+++ b/data/tinkerpop-modern-v2d0-typed.json
@@ -0,0 +1,6 @@
+{"id":{"@type":"gremlin:int32","@value":1},"label":"person","outE":{"created":[{"id":{"@type":"gremlin:int32","@value":9},"inV":{"@type":"gremlin:int32","@value":3},"properties":{"weight":{"@type":"gremlin:double","@value":0.4}}}],"knows":[{"id":{"@type":"gremlin:int32","@value":7},"inV":{"@type":"gremlin:int32","@value":2},"properties":{"weight":{"@type":"gremlin:double","@value":0.5}}},{"id":{"@type":"gremlin:int32","@value":8},"inV":{"@type":"gremlin:int32","@value":4},"properties":{"weight":{"@type":"gremlin:double","@value":1.0}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":0},"value":"marko"}],"age":[{"id":{"@type":"gremlin:int64","@value":1},"value":{"@type":"gremlin:int32","@value":29}}]}}
+{"id":{"@type":"gremlin:int32","@value":2},"label":"person","inE":{"knows":[{"id":{"@type":"gremlin:int32","@value":7},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"weight":{"@type":"gremlin:double","@value":0.5}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":2},"value":"vadas"}],"age":[{"id":{"@type":"gremlin:int64","@value":3},"value":{"@type":"gremlin:int32","@value":27}}]}}
+{"id":{"@type":"gremlin:int32","@value":3},"label":"software","inE":{"created":[{"id":{"@type":"gremlin:int32","@value":9},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"weight":{"@type":"gremlin:double","@value":0.4}}},{"id":{"@type":"gremlin:int32","@value":11},"outV":{"@type":"gremlin:int32","@value":4},"properties":{"weight":{"@type":"gremlin:double","@value":0.4}}},{"id":{"@type":"gremlin:int32","@value":12},"outV":{"@type":"gremlin:int32","@value":6},"properties":{"weight":{"@type":"gremlin:double","@value":0.2}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":4},"value":"lop"}],"lang":[{"id":{"@type":"gremlin:int64","@value":5},"value":"java"}]}}
+{"id":{"@type":"gremlin:int32","@value":4},"label":"person","inE":{"knows":[{"id":{"@type":"gremlin:int32","@value":8},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"weight":{"@type":"gremlin:double","@value":1.0}}}]},"outE":{"created":[{"id":{"@type":"gremlin:int32","@value":10},"inV":{"@type":"gremlin:int32","@value":5},"properties":{"weight":{"@type":"gremlin:double","@value":1.0}}},{"id":{"@type":"gremlin:int32","@value":11},"inV":{"@type":"gremlin:int32","@value":3},"properties":{"weight":{"@type":"gremlin:double","@value":0.4}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":6},"value":"josh"}],"age":[{"id":{"@type":"gremlin:int64","@value":7},"value":{"@type":"gremlin:int32","@value":32}}]}}
+{"id":{"@type":"gremlin:int32","@value":5},"label":"software","inE":{"created":[{"id":{"@type":"gremlin:int32","@value":10},"outV":{"@type":"gremlin:int32","@value":4},"properties":{"weight":{"@type":"gremlin:double","@value":1.0}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":8},"value":"ripple"}],"lang":[{"id":{"@type":"gremlin:int64","@value":9},"value":"java"}]}}
+{"id":{"@type":"gremlin:int32","@value":6},"label":"person","outE":{"created":[{"id":{"@type":"gremlin:int32","@value":12},"inV":{"@type":"gremlin:int32","@value":3},"properties":{"weight":{"@type":"gremlin:double","@value":0.2}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":10},"value":"peter"}],"age":[{"id":{"@type":"gremlin:int64","@value":11},"value":{"@type":"gremlin:int32","@value":35}}]}}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/data/tinkerpop-modern-v2d0.json
----------------------------------------------------------------------
diff --git a/data/tinkerpop-modern-v2d0.json b/data/tinkerpop-modern-v2d0.json
new file mode 100644
index 0000000..18c265d
--- /dev/null
+++ b/data/tinkerpop-modern-v2d0.json
@@ -0,0 +1,6 @@
+{"id":1,"label":"person","outE":{"created":[{"id":9,"inV":3,"properties":{"weight":0.4}}],"knows":[{"id":7,"inV":2,"properties":{"weight":0.5}},{"id":8,"inV":4,"properties":{"weight":1.0}}]},"properties":{"name":[{"id":0,"value":"marko"}],"age":[{"id":1,"value":29}]}}
+{"id":2,"label":"person","inE":{"knows":[{"id":7,"outV":1,"properties":{"weight":0.5}}]},"properties":{"name":[{"id":2,"value":"vadas"}],"age":[{"id":3,"value":27}]}}
+{"id":3,"label":"software","inE":{"created":[{"id":9,"outV":1,"properties":{"weight":0.4}},{"id":11,"outV":4,"properties":{"weight":0.4}},{"id":12,"outV":6,"properties":{"weight":0.2}}]},"properties":{"name":[{"id":4,"value":"lop"}],"lang":[{"id":5,"value":"java"}]}}
+{"id":4,"label":"person","inE":{"knows":[{"id":8,"outV":1,"properties":{"weight":1.0}}]},"outE":{"created":[{"id":10,"inV":5,"properties":{"weight":1.0}},{"id":11,"inV":3,"properties":{"weight":0.4}}]},"properties":{"name":[{"id":6,"value":"josh"}],"age":[{"id":7,"value":32}]}}
+{"id":5,"label":"software","inE":{"created":[{"id":10,"outV":4,"properties":{"weight":1.0}}]},"properties":{"name":[{"id":8,"value":"ripple"}],"lang":[{"id":9,"value":"java"}]}}
+{"id":6,"label":"person","outE":{"created":[{"id":12,"inV":3,"properties":{"weight":0.2}}]},"properties":{"name":[{"id":10,"value":"peter"}],"age":[{"id":11,"value":35}]}}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/docs/src/reference/the-graph.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/reference/the-graph.asciidoc b/docs/src/reference/the-graph.asciidoc
index 8b4916a..151de3a 100644
--- a/docs/src/reference/the-graph.asciidoc
+++ b/docs/src/reference/the-graph.asciidoc
@@ -499,7 +499,7 @@ graph.io(graphson()).writer().create().writeVertex(f, g.V(1).next(), BOTH)
 f.close()
 ----
 
-The following GraphSON example shows the output of `GraphSonWriter.writeVertex()` with associated edges:
+The following GraphSON example shows the output of `GraphSONWriter.writeVertex()` with associated edges:
 
 [source,json]
 ----
@@ -553,7 +553,18 @@ The following GraphSON example shows the output of `GraphSonWriter.writeVertex()
 The vertex properly serializes to valid JSON but note that a consuming application will not automatically know how to
 interpret the numeric values.  In coercing those Java values to JSON, such information is lost.
 
-With a minor change to the construction of the `GraphSONWriter` the lossy nature of GraphSON can be avoided:
+[[graphson-types-embedding]]
+Types embedding
+^^^^^^^^^^^^^^^
+
+With a minor change to the construction of the `GraphSONWriter` the lossy nature of GraphSON can be avoided.
+
+[[graphson-1.0-types]]
+Types with GraphSON 1.0.
+++++++++++++++++++++++++
+
+GraphSON 1.0 is the version enabled by default when creating a GraphSON Mapper. Here is how to enable types with GraphSON
+1.0:
 
 [gremlin-groovy]
 ----
@@ -652,6 +663,128 @@ from JSON typing.  While the output is more verbose, it comes with the security
 non-JVM languages won't be able to consume this information automatically, at least there is a hint as to how the
 values should be coerced back into the correct types in the target language.
 
+[[graphson-2.0-types]]
+GraphSON 2.0.
++++++++++++++
+
+GraphSON 2.0 has been introduced to improve the format of the typed values from GraphSON 1.0. It provides non-Java
+centric types information in a consistent format.
+
+With GraphSON 2.0, types are enabled by default.
+
+The type format is :
+
+* Non typed value : `value`
+* Typed value     : `{"@type":"typeID", "@value":value}`
+
+TypeIDs are composed of 2 parts, a namespace, and a type name, in the format `"namespace:typename"`.
+A namespace gives the possibility for TinkerPop implementors to categorize custom types they may implement
+and avoid collision with existing TinkerPop types. By default, TinkerPop types will have the
+namespace `g`.
+
+GraphSON 2.0 will provide type information for any value that is not String, Boolean, Map or Collection.
+This includes types for Graph objects as well. The current Graph object types provided by
+TinkerPop, and their respective typeIDs are :
+
+* Vertex -> "gremlin:vertex"
+* Edge -> "gremlin:edge"
+* VertexPropery -> "gremlin:vertexproperty"
+* Property -> "gremlin:property"
+* Path -> "gremlin:path"
+* Tree -> "gremlin:tree"
+* Graph -> "gremlin:graph"
+* Metrics -> "gremlin:metrics"
+* TraversalMetrics -> `gremlin:traversalmetrics"
+
+Here's the same previous example of GraphSON 1.0, but with GraphSON 2.0:
+
+[gremlin-groovy]
+----
+graph = TinkerFactory.createModern()
+g = graph.traversal()
+f = new FileOutputStream("vertex-graphson20.json")
+mapper = graph.io(graphson()).mapper().version(GraphSONVersion.V2_0).create()
+v = g.V(1).next()
+v.property("uuid", UUID.randomUUID())
+graph.io(graphson()).writer().mapper(mapper).create().writeObject(f, v)
+f.close()
+----
+
+Creating a GraphSON 2.0 mapper is done by calling `.version(GraphSONVersion.V2_0)` on the mapper builder.
+Here's a sample output:
+
+[source,json]
+----
+{
+    "@type":"gremlin:vertex",
+    "@value":{
+        "id":{
+            "@type":"gremlin:int32",
+            "@value":1
+        },
+        "label":"person",
+        "properties":{
+            "name":[
+                {
+                    "@type":"gremlin:vertexproperty",
+                    "@value":{
+                        "id":{
+                            "@type":"gremlin:int64",
+                            "@value":0
+                        },
+                        "value":"marko",
+                        "label":"name"
+                    }
+                }
+            ],
+            "myUUIDprop":[
+                {
+                    "@type":"gremlin:vertexproperty",
+                    "@value":{
+                        "id":{
+                            "@type":"gremlin:int64",
+                            "@value":12
+                        },
+                        "value":{
+                            "@type":"gremlin:uuid",
+                            "@value":"02c1041b-c7ef-46ce-812e-3d7963ad50b3"
+                        },
+                        "label":"myUUIDprop"
+                    }
+                }
+            ],
+            "age":[
+                {
+                    "@type":"gremlin:vertexproperty",
+                    "@value":{
+                        "id":{
+                            "@type":"gremlin:int64",
+                            "@value":1
+                        },
+                        "value":{
+                            "@type":"gremlin:int32",
+                            "@value":29
+                        },
+                        "label":"age"
+                    }
+                }
+            ]
+        }
+    }
+}
+----
+
+Here's how to disable types when creating a GraphSON 2.0 `Mapper`:
+
+[gremlin-groovy]
+----
+mapper = graph.io(graphson()).mapper().version(GraphSONVersion.V2_0).typeInfo(GraphSONMapper.TypeInfo.NO_TYPES).create()
+----
+
+By disabling types, the JSON payload produced will be the same than GraphSON 2.0, without the
+extra information that is written for types. Please note, disabling types can be unsafe with
+regards to the written data.
+
 [[gryo-reader-writer]]
 Gryo Reader/Writer
 ~~~~~~~~~~~~~~~~~~
@@ -772,4 +905,4 @@ IMPORTANT: TinkerPop uses `tinkerpop.` and `gremlin.` as the prefixes for provid
 reduce implementations, and plugins.
 
 The only truly protected namespace is the _hidden namespace_ provided to graph systems. From there, it's up to
-engineers to respect the namespacing conventions presented.
+engineers to respect the namespacing conventions presented.
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/docs/src/upgrade/release-3.2.x-incubating.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/upgrade/release-3.2.x-incubating.asciidoc b/docs/src/upgrade/release-3.2.x-incubating.asciidoc
index bdcf69e..bf29feb 100644
--- a/docs/src/upgrade/release-3.2.x-incubating.asciidoc
+++ b/docs/src/upgrade/release-3.2.x-incubating.asciidoc
@@ -93,6 +93,13 @@ Please see the link:https://github.com/apache/tinkerpop/blob/3.2.1/CHANGELOG.asc
 Upgrading for Users
 ~~~~~~~~~~~~~~~~~~~
 
+GraphSON 2.0
+^^^^^^^^^^^^
+
+GraphSON 2.0 has been introduced to improve and normalize the format of types embedding in GraphSON. Please see
+link:http://tinkerpop.apache.org/docs/3.2.1-incubating/reference/#graphson-2.0-types[Reference Documentation -
+GraphSON 2.0] and link:https://issues.apache.org/jira/browse/TINKERPOP-1274[TINKERPOP-1274].
+
 Gephi Plugin
 ^^^^^^^^^^^^
 
@@ -268,6 +275,19 @@ VertexTest Signatures
 The method signatures of `get_g_VXlistXv1_v2_v3XX_name` and `get_g_VXlistX1_2_3XX_name` of `VertexTest` were changed
 to take arguments for the `Traversal` to be constructed by extending classes.
 
+Graph Drivers Providers
+^^^^^^^^^^^^^^^^^^^^^^
+
+GraphSON 2.0
+++++++++++++
+
+Drivers providers can exploit the new format of typed values JSON serialization offered by GraphSON 2.0. This format
+has been created to allow easy and agnostic parsing of a GraphSON payload without type loss. Drivers of non Java
+languages can then implement their own mapping of the GraphSON's language agnostic type IDs like `UUID`, `LocalDate` to
+the appropriate representation for the driver's language. A more detailed description of GraphSON 2.0 can be found
+there : link:http://tinkerpop.apache.org/docs/3.2.1-incubating/reference/#graphson-2.0-types[Reference Documentation
+- GraphSON 2.0]
+
 TinkerPop 3.2.0
 ---------------
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalMetrics.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalMetrics.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalMetrics.java
index 1714a9e..058386b 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalMetrics.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalMetrics.java
@@ -54,6 +54,14 @@ public final class DefaultTraversalMetrics implements TraversalMetrics, Serializ
     public DefaultTraversalMetrics() {
     }
 
+    // This is only a convenient constructor needed for GraphSON deserialization.
+    // TODO: see if that's ok to add that.
+    public DefaultTraversalMetrics(long totalStepDurationNs, List<MutableMetrics> metricsMap) {
+        this.totalStepDuration = totalStepDurationNs;
+        this.computedMetrics = new LinkedHashMap<>(metrics.size());
+        metricsMap.forEach(m -> computedMetrics.put(m.getId(), m.getImmutableClone()));
+    }
+
     @Override
     public long getDuration(final TimeUnit unit) {
         return unit.convert(totalStepDuration, MutableMetrics.SOURCE_UNIT);

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/MutableMetrics.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/MutableMetrics.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/MutableMetrics.java
index a952c65..3b0c886 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/MutableMetrics.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/MutableMetrics.java
@@ -42,6 +42,18 @@ public class MutableMetrics extends ImmutableMetrics implements Cloneable {
         this.name = name;
     }
 
+    // create a MutableMetrics from an Immutable one.
+    // needed that for tests, don't know if it is worth keeping it public.
+    // TODO: see if it's ok to add this
+    public MutableMetrics(Metrics other) {
+        this.id = other.getId();
+        this.name = other.getName();
+        this.annotations.putAll(other.getAnnotations());
+        this.durationNs = other.getDuration(TimeUnit.NANOSECONDS);
+        other.getCounts().forEach((key, count) -> this.counts.put(key, new AtomicLong(count)));
+        other.getNested().forEach(nested -> this.addNested(new MutableMetrics(nested)));
+    }
+
     public void addNested(MutableMetrics metrics) {
         this.nested.put(metrics.getId(), metrics);
     }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapper.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapper.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapper.java
index 73e9552..2a000a3 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapper.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapper.java
@@ -29,10 +29,24 @@ import org.apache.tinkerpop.shaded.jackson.databind.jsontype.TypeResolverBuilder
 import org.apache.tinkerpop.shaded.jackson.databind.jsontype.impl.StdTypeResolverBuilder;
 import org.apache.tinkerpop.shaded.jackson.databind.module.SimpleModule;
 import org.apache.tinkerpop.shaded.jackson.databind.ser.DefaultSerializerProvider;
+import org.apache.tinkerpop.shaded.jackson.databind.util.TokenBuffer;
 import org.javatuples.Pair;
 
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.net.InetAddress;
+import java.net.InetSocketAddress;
+import java.sql.Timestamp;
 import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Calendar;
+import java.util.Date;
 import java.util.List;
+import java.util.Map;
+import java.util.TimeZone;
+import java.util.UUID;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicReference;
 
 /**
  * An extension to the standard Jackson {@code ObjectMapper} which automatically registers the standard
@@ -60,14 +74,15 @@ public class GraphSONMapper implements Mapper<ObjectMapper> {
     private final boolean normalize;
     private final boolean embedTypes;
     private final GraphSONVersion version;
+    private final TypeInfo typeInfo;
 
-    private GraphSONMapper(final List<SimpleModule> customModules, final boolean loadCustomSerializers,
-                           final boolean normalize, final boolean embedTypes, final GraphSONVersion version) {
-        this.customModules = customModules;
-        this.loadCustomSerializers = loadCustomSerializers;
-        this.normalize = normalize;
-        this.embedTypes = embedTypes;
-        this.version = version;
+    private GraphSONMapper(final Builder builder) {
+        this.customModules = builder.customModules;
+        this.loadCustomSerializers = builder.loadCustomModules;
+        this.normalize = builder.normalize;
+        this.embedTypes = builder.embedTypes;
+        this.version = builder.version;
+        this.typeInfo = builder.typeInfo;
     }
 
     @Override
@@ -75,32 +90,75 @@ public class GraphSONMapper implements Mapper<ObjectMapper> {
         final ObjectMapper om = new ObjectMapper();
         om.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
 
-        if (embedTypes) {
-            final TypeResolverBuilder<?> typer = new StdTypeResolverBuilder()
-                    .init(JsonTypeInfo.Id.CLASS, null)
-                    .inclusion(JsonTypeInfo.As.PROPERTY)
-                    .typeProperty(GraphSONTokens.CLASS);
-            om.setDefaultTyping(typer);
-        }
-
-        if (normalize)
-            om.enable(SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS);
-
-        // this provider toStrings all unknown classes and converts keys in Map objects that are Object to String.
-        final DefaultSerializerProvider provider = new GraphSONSerializerProvider();
-        provider.setDefaultKeySerializer(new GraphSONSerializers.GraphSONKeySerializer());
-        om.setSerializerProvider(provider);
-
-        om.registerModule(version.getBuilder().create(normalize));
+        GraphSONModule graphSONModule = version.getBuilder().create(normalize);
+        om.registerModule(graphSONModule);
         customModules.forEach(om::registerModule);
 
+
         // plugin external serialization modules
         if (loadCustomSerializers)
             om.findAndRegisterModules();
 
+
+        if (version == GraphSONVersion.V1_0) {
+            if (embedTypes) {
+                final TypeResolverBuilder<?> typer = new StdTypeResolverBuilder()
+                        .init(JsonTypeInfo.Id.CLASS, null)
+                        .inclusion(JsonTypeInfo.As.PROPERTY)
+                        .typeProperty(GraphSONTokens.CLASS);
+                om.setDefaultTyping(typer);
+            }
+        } else if (version == GraphSONVersion.V2_0) {
+            if (typeInfo != TypeInfo.NO_TYPES) {
+                GraphSONTypeIdResolver graphSONTypeIdResolver = new GraphSONTypeIdResolver();
+                final TypeResolverBuilder typer = new GraphSONTypeResolverBuilder()
+                        .typesEmbedding(getTypeInfo())
+                        .valuePropertyName(GraphSONTokens.VALUEPROP)
+                        .init(JsonTypeInfo.Id.CUSTOM, graphSONTypeIdResolver)
+                        .typeProperty(GraphSONTokens.VALUETYPE)
+                        ;
+
+                // Registers native Java types that are supported by Jackson
+                registerJavaBaseTypes(graphSONTypeIdResolver);
+
+                // Registers the GraphSON Module's types
+                graphSONModule.getTypeDefinitions()
+                        .forEach(
+                                (targetClass, typeId) -> graphSONTypeIdResolver.addCustomType(String.format("%s:%s", graphSONModule.getTypeNamespace(), typeId), targetClass)
+                        );
+
+
+                // Register types to typeResolver for the Custom modules
+                customModules.forEach(e -> {
+                    if (e instanceof TinkerPopJacksonModule) {
+                        TinkerPopJacksonModule mod = (TinkerPopJacksonModule) e;
+                        Map<Class, String> moduleTypeDefinitions = mod.getTypeDefinitions();
+                        if (moduleTypeDefinitions != null) {
+                            if (mod.getTypeNamespace() == null || mod.getTypeNamespace().isEmpty()) {
+                                throw new IllegalStateException("Cannot specify a module for GraphSON 2.0 with type definitions but without a type Domain. " +
+                                        "If no specific type domain is required, use Gremlin's default domain, \"gremlin\" but there may be collisions.");
+                            }
+                            moduleTypeDefinitions.forEach(
+                                    (targetClass, typeId) -> graphSONTypeIdResolver.addCustomType(String.format("%s:%s", mod.getTypeNamespace(), typeId), targetClass)
+                            );
+                        }
+                    }
+                });
+                om.setDefaultTyping(typer);
+            }
+        } else {
+            throw new IllegalStateException("Unknown GraphSONVersion : " + version);
+        }
+
+        // this provider toStrings all unknown classes and converts keys in Map objects that are Object to String.
+        final DefaultSerializerProvider provider = new GraphSONSerializerProvider(version);
+        om.setSerializerProvider(provider);
+
+        if (normalize)
+            om.enable(SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS);
+
         // keep streams open to accept multiple values (e.g. multiple vertices)
         om.getFactory().disable(JsonGenerator.Feature.AUTO_CLOSE_TARGET);
-
         return om;
     }
 
@@ -112,6 +170,31 @@ public class GraphSONMapper implements Mapper<ObjectMapper> {
         return new Builder();
     }
 
+    public TypeInfo getTypeInfo() {
+        return this.typeInfo;
+    }
+
+
+    private void registerJavaBaseTypes(GraphSONTypeIdResolver graphSONTypeIdResolver) {
+        Arrays.asList(
+                BigInteger.class,
+                BigDecimal.class,
+                Byte.class,
+                Character.class,
+                UUID.class,
+                InetAddress.class,
+                InetSocketAddress.class,
+                Class.class,
+                Calendar.class,
+                Date.class,
+                TimeZone.class,
+                Timestamp.class,
+                AtomicBoolean.class,
+                AtomicReference.class,
+                TokenBuffer.class
+        ).forEach(e -> graphSONTypeIdResolver.addCustomType(String.format("%s:%s", GraphSONTokens.GREMLIN_TYPE_NAMESPACE, e.getSimpleName().toLowerCase()), e));
+    }
+
     public static class Builder implements Mapper.Builder<Builder> {
         private List<SimpleModule> customModules = new ArrayList<>();
         private boolean loadCustomModules = false;
@@ -119,6 +202,8 @@ public class GraphSONMapper implements Mapper<ObjectMapper> {
         private boolean embedTypes = false;
         private List<IoRegistry> registries = new ArrayList<>();
         private GraphSONVersion version = GraphSONVersion.V1_0;
+        // GraphSON 2.0 should have types activated by default, otherwise use there's no point in using it instead of 1.0.
+        private TypeInfo typeInfo = TypeInfo.PARTIAL_TYPES;
 
         private Builder() {
         }
@@ -133,7 +218,7 @@ public class GraphSONMapper implements Mapper<ObjectMapper> {
         }
 
         /**
-         * Set the version of GraphSON to use.
+         * Set the version of GraphSON to use. The default is {@link GraphSONVersion#V1_0}.
          */
         public Builder version(final GraphSONVersion version) {
             this.version = version;
@@ -174,10 +259,35 @@ public class GraphSONMapper implements Mapper<ObjectMapper> {
         }
 
         /**
-         * Embeds Java types into generated JSON to clarify their origins.
+         * Embeds Java types into generated JSON to clarify their origins. Setting this value will override the value
+         * of {@link #typeInfo(TypeInfo)} where true will set it to {@link TypeInfo#PARTIAL_TYPES} and false will set
+         * it to {@link TypeInfo#NO_TYPES}.
+         *
+         * @deprecated As of release 3.2.1, replaced by {@link #typeInfo(TypeInfo)}.
          */
+        @Deprecated
         public Builder embedTypes(final boolean embedTypes) {
             this.embedTypes = embedTypes;
+            this.typeInfo = embedTypes ? TypeInfo.PARTIAL_TYPES : TypeInfo.NO_TYPES;
+            return this;
+        }
+
+        /**
+         * Specify if the values are going to be typed or not, and at which level. Setting this value will override
+         * the value of {@link #embedTypes(boolean)} where {@link TypeInfo#PARTIAL_TYPES} will set it to true and
+         * {@link TypeInfo#NO_TYPES} will set it to false.
+         *
+         * The level can be NO_TYPES or PARTIAL_TYPES, and could be extended in the future.
+         */
+        public Builder typeInfo(final TypeInfo typeInfo) {
+            this.typeInfo = typeInfo;
+            if (typeInfo.equals(TypeInfo.PARTIAL_TYPES))
+                this.embedTypes = true;
+            else if (typeInfo.equals(TypeInfo.NO_TYPES))
+                this.embedTypes = false;
+            else
+                throw new IllegalArgumentException("This value can only be set to PARTIAL_TYPES and NO_TYPES");
+
             return this;
         }
 
@@ -187,7 +297,8 @@ public class GraphSONMapper implements Mapper<ObjectMapper> {
                 simpleModules.stream().map(Pair::getValue1).forEach(this.customModules::add);
             });
 
-            return new GraphSONMapper(customModules, loadCustomModules, normalize, embedTypes, version);
+            return new GraphSONMapper(this);
         }
+
     }
 }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONModule.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONModule.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONModule.java
index 7cc6c91..a0303cf 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONModule.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONModule.java
@@ -19,15 +19,19 @@
 package org.apache.tinkerpop.gremlin.structure.io.graphson;
 
 import org.apache.tinkerpop.gremlin.process.traversal.Path;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree;
+import org.apache.tinkerpop.gremlin.process.traversal.util.Metrics;
 import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalExplanation;
 import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalMetrics;
 import org.apache.tinkerpop.gremlin.structure.Edge;
 import org.apache.tinkerpop.gremlin.structure.Property;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
 import org.apache.tinkerpop.gremlin.structure.VertexProperty;
-import org.apache.tinkerpop.gremlin.structure.util.star.StarGraphGraphSONSerializer;
-import org.apache.tinkerpop.shaded.jackson.databind.module.SimpleModule;
+import org.apache.tinkerpop.gremlin.structure.util.star.DirectionalStarGraph;
+import org.apache.tinkerpop.gremlin.structure.util.star.StarGraphGraphSONSerializerV1d0;
+import org.apache.tinkerpop.gremlin.structure.util.star.StarGraphGraphSONSerializerV2d0;
 
+import java.nio.ByteBuffer;
 import java.time.Duration;
 import java.time.Instant;
 import java.time.LocalDate;
@@ -41,8 +45,8 @@ import java.time.Year;
 import java.time.YearMonth;
 import java.time.ZoneOffset;
 import java.time.ZonedDateTime;
+import java.util.LinkedHashMap;
 import java.util.Map;
-import org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree;
 
 /**
  * The set of serializers that handle the core graph interfaces.  These serializers support normalization which
@@ -54,13 +58,147 @@ import org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree;
  *
  * @author Stephen Mallette (http://stephen.genoprime.com)
  */
-abstract class GraphSONModule extends SimpleModule {
+abstract class GraphSONModule extends TinkerPopJacksonModule {
 
     GraphSONModule(final String name) {
         super(name);
     }
 
     /**
+     * Version 2.0 of GraphSON.
+     */
+    static final class GraphSONModuleV2d0 extends GraphSONModule {
+        /**
+         * Constructs a new object.
+         */
+        protected GraphSONModuleV2d0(final boolean normalize) {
+            super("graphson-2.0");
+
+            /////////////////////// SERIALIZERS ////////////////////////////
+
+            // graph
+            addSerializer(Edge.class, new GraphSONSerializersV2d0.EdgeJacksonSerializer(normalize));
+            addSerializer(Vertex.class, new GraphSONSerializersV2d0.VertexJacksonSerializer(normalize));
+            addSerializer(VertexProperty.class, new GraphSONSerializersV2d0.VertexPropertyJacksonSerializer(normalize, true));
+            addSerializer(Property.class, new GraphSONSerializersV2d0.PropertyJacksonSerializer());
+            addSerializer(Metrics.class, new GraphSONSerializersV2d0.MetricsJacksonSerializer());
+            addSerializer(TraversalMetrics.class, new GraphSONSerializersV2d0.TraversalMetricsJacksonSerializer());
+            addSerializer(TraversalExplanation.class, new GraphSONSerializersV2d0.TraversalExplanationJacksonSerializer());
+            addSerializer(Path.class, new GraphSONSerializersV2d0.PathJacksonSerializer());
+            addSerializer(DirectionalStarGraph.class, new StarGraphGraphSONSerializerV2d0(normalize));
+            addSerializer(Tree.class, new GraphSONSerializersV2d0.TreeJacksonSerializer());
+
+            // java.util
+            addSerializer(Map.Entry.class, new JavaUtilSerializersV2d0.MapEntryJacksonSerializer());
+
+            // need to explicitly add serializers for those types because Jackson doesn't do it at all.
+            addSerializer(Integer.class, new GraphSONSerializersV2d0.IntegerGraphSONSerializer());
+            addSerializer(Double.class, new GraphSONSerializersV2d0.DoubleGraphSONSerializer());
+
+            // java.time
+            addSerializer(Duration.class, new JavaTimeSerializersV2d0.DurationJacksonSerializer());
+            addSerializer(Instant.class, new JavaTimeSerializersV2d0.InstantJacksonSerializer());
+            addSerializer(LocalDate.class, new JavaTimeSerializersV2d0.LocalDateJacksonSerializer());
+            addSerializer(LocalDateTime.class, new JavaTimeSerializersV2d0.LocalDateTimeJacksonSerializer());
+            addSerializer(LocalTime.class, new JavaTimeSerializersV2d0.LocalTimeJacksonSerializer());
+            addSerializer(MonthDay.class, new JavaTimeSerializersV2d0.MonthDayJacksonSerializer());
+            addSerializer(OffsetDateTime.class, new JavaTimeSerializersV2d0.OffsetDateTimeJacksonSerializer());
+            addSerializer(OffsetTime.class, new JavaTimeSerializersV2d0.OffsetTimeJacksonSerializer());
+            addSerializer(Period.class, new JavaTimeSerializersV2d0.PeriodJacksonSerializer());
+            addSerializer(Year.class, new JavaTimeSerializersV2d0.YearJacksonSerializer());
+            addSerializer(YearMonth.class, new JavaTimeSerializersV2d0.YearMonthJacksonSerializer());
+            addSerializer(ZonedDateTime.class, new JavaTimeSerializersV2d0.ZonedDateTimeJacksonSerializer());
+            addSerializer(ZoneOffset.class, new JavaTimeSerializersV2d0.ZoneOffsetJacksonSerializer());
+
+            /////////////////////// DESERIALIZERS ////////////////////////////
+
+            // Tinkerpop Graph
+            addDeserializer(Vertex.class, new GraphSONSerializersV2d0.VertexJacksonDeserializer());
+            addDeserializer(Edge.class, new GraphSONSerializersV2d0.EdgeJacksonDeserializer());
+            addDeserializer(Property.class, new GraphSONSerializersV2d0.PropertyJacksonDeserializer());
+            addDeserializer(Path.class, new GraphSONSerializersV2d0.PathJacksonDeserializer());
+            addDeserializer(VertexProperty.class, new GraphSONSerializersV2d0.VertexPropertyJacksonDeserializer());
+            addDeserializer(Metrics.class, new GraphSONSerializersV2d0.MetricsJacksonDeserializer());
+            addDeserializer(TraversalMetrics.class, new GraphSONSerializersV2d0.TraversalMetricsJacksonDeserializer());
+            addDeserializer(Tree.class, new GraphSONSerializersV2d0.TreeJacksonDeserializer());
+
+            // java.time
+            addDeserializer(Duration.class, new JavaTimeSerializersV2d0.DurationJacksonDeserializer());
+            addDeserializer(Instant.class, new JavaTimeSerializersV2d0.InstantJacksonDeserializer());
+            addDeserializer(LocalDate.class, new JavaTimeSerializersV2d0.LocalDateJacksonDeserializer());
+            addDeserializer(LocalDateTime.class, new JavaTimeSerializersV2d0.LocalDateTimeJacksonDeserializer());
+            addDeserializer(LocalTime.class, new JavaTimeSerializersV2d0.LocalTimeJacksonDeserializer());
+            addDeserializer(MonthDay.class, new JavaTimeSerializersV2d0.MonthDayJacksonDeserializer());
+            addDeserializer(OffsetDateTime.class, new JavaTimeSerializersV2d0.OffsetDateTimeJacksonDeserializer());
+            addDeserializer(OffsetTime.class, new JavaTimeSerializersV2d0.OffsetTimeJacksonDeserializer());
+            addDeserializer(Period.class, new JavaTimeSerializersV2d0.PeriodJacksonDeserializer());
+            addDeserializer(Year.class, new JavaTimeSerializersV2d0.YearJacksonDeserializer());
+            addDeserializer(YearMonth.class, new JavaTimeSerializersV2d0.YearMonthJacksonDeserializer());
+            addDeserializer(ZonedDateTime.class, new JavaTimeSerializersV2d0.ZonedDateTimeJacksonDeserializer());
+            addDeserializer(ZoneOffset.class, new JavaTimeSerializersV2d0.ZoneOffsetJacksonDeserializer());
+        }
+
+        public static Builder build() {
+            return new Builder();
+        }
+
+        @Override
+        public Map<Class, String> getTypeDefinitions() {
+            return new LinkedHashMap<Class, String>(){{
+                // Those don't have deserializers because handled by Jackson,
+                // but we still want to rename them in GraphSON
+                put(ByteBuffer.class, "bytebuffer");
+                put(Short.class, "int16");
+                put(Integer.class, "int32");
+                put(Long.class, "int64");
+                put(Double.class, "double");
+                put(Float.class, "float");
+
+                // Time serializers/deserializers
+                put(Duration.class, "duration");
+                put(Instant.class, "instant");
+                put(LocalDate.class, "localdate");
+                put(LocalDateTime.class, "localdatetime");
+                put(LocalTime.class, "localtime");
+                put(MonthDay.class, "monthday");
+                put(OffsetDateTime.class, "offsetdatetime");
+                put(OffsetTime.class, "offsettime");
+                put(Period.class, "period");
+                put(Year.class, "year");
+                put(YearMonth.class, "yearmonth");
+                put(ZonedDateTime.class, "zoneddatetime");
+                put(ZoneOffset.class, "zoneoffset");
+
+                // Tinkerpop Graph objects
+                put(Vertex.class, "vertex");
+                put(Edge.class, "edge");
+                put(Property.class, "property");
+                put(Path.class, "path");
+                put(VertexProperty.class, "vertexproperty");
+                put(Metrics.class, "metrics");
+                put(TraversalMetrics.class, "traversalmetrics");
+                put(Tree.class, "tree");
+            }};
+        }
+
+        @Override
+        public String getTypeNamespace() {
+            return GraphSONTokens.GREMLIN_TYPE_NAMESPACE;
+        }
+
+        static final class Builder implements GraphSONModuleBuilder {
+
+            private Builder() {}
+
+            @Override
+            public GraphSONModule create(final boolean normalize) {
+                return new GraphSONModuleV2d0(normalize);
+            }
+
+        }
+    }
+
+    /**
      * Version 1.0 of GraphSON.
      */
     static final class GraphSONModuleV1d0 extends GraphSONModule {
@@ -71,53 +209,65 @@ abstract class GraphSONModule extends SimpleModule {
         protected GraphSONModuleV1d0(final boolean normalize) {
             super("graphson-1.0");
             // graph
-            addSerializer(Edge.class, new GraphSONSerializers.EdgeJacksonSerializer(normalize));
-            addSerializer(Vertex.class, new GraphSONSerializers.VertexJacksonSerializer(normalize));
-            addSerializer(VertexProperty.class, new GraphSONSerializers.VertexPropertyJacksonSerializer(normalize));
-            addSerializer(Property.class, new GraphSONSerializers.PropertyJacksonSerializer());
-            addSerializer(TraversalMetrics.class, new GraphSONSerializers.TraversalMetricsJacksonSerializer());
-            addSerializer(TraversalExplanation.class, new GraphSONSerializers.TraversalExplanationJacksonSerializer());
-            addSerializer(Path.class, new GraphSONSerializers.PathJacksonSerializer());
-            addSerializer(StarGraphGraphSONSerializer.DirectionalStarGraph.class, new StarGraphGraphSONSerializer(normalize));
-            addSerializer(Tree.class, new GraphSONSerializers.TreeJacksonSerializer());
+            addSerializer(Edge.class, new GraphSONSerializersV1d0.EdgeJacksonSerializer(normalize));
+            addSerializer(Vertex.class, new GraphSONSerializersV1d0.VertexJacksonSerializer(normalize));
+            addSerializer(VertexProperty.class, new GraphSONSerializersV1d0.VertexPropertyJacksonSerializer(normalize));
+            addSerializer(Property.class, new GraphSONSerializersV1d0.PropertyJacksonSerializer());
+            addSerializer(TraversalMetrics.class, new GraphSONSerializersV1d0.TraversalMetricsJacksonSerializer());
+            addSerializer(TraversalExplanation.class, new GraphSONSerializersV1d0.TraversalExplanationJacksonSerializer());
+            addSerializer(Path.class, new GraphSONSerializersV1d0.PathJacksonSerializer());
+            addSerializer(DirectionalStarGraph.class, new StarGraphGraphSONSerializerV1d0(normalize));
+            addSerializer(Tree.class, new GraphSONSerializersV1d0.TreeJacksonSerializer());
            
             // java.util
-            addSerializer(Map.Entry.class, new JavaUtilSerializers.MapEntryJacksonSerializer());
+            addSerializer(Map.Entry.class, new JavaUtilSerializersV1d0.MapEntryJacksonSerializer());
 
             // java.time
-            addSerializer(Duration.class, new JavaTimeSerializers.DurationJacksonSerializer());
-            addSerializer(Instant.class, new JavaTimeSerializers.InstantJacksonSerializer());
-            addSerializer(LocalDate.class, new JavaTimeSerializers.LocalDateJacksonSerializer());
-            addSerializer(LocalDateTime.class, new JavaTimeSerializers.LocalDateTimeJacksonSerializer());
-            addSerializer(LocalTime.class, new JavaTimeSerializers.LocalTimeJacksonSerializer());
-            addSerializer(MonthDay.class, new JavaTimeSerializers.MonthDayJacksonSerializer());
-            addSerializer(OffsetDateTime.class, new JavaTimeSerializers.OffsetDateTimeJacksonSerializer());
-            addSerializer(OffsetTime.class, new JavaTimeSerializers.OffsetTimeJacksonSerializer());
-            addSerializer(Period.class, new JavaTimeSerializers.PeriodJacksonSerializer());
-            addSerializer(Year.class, new JavaTimeSerializers.YearJacksonSerializer());
-            addSerializer(YearMonth.class, new JavaTimeSerializers.YearMonthJacksonSerializer());
-            addSerializer(ZonedDateTime.class, new JavaTimeSerializers.ZonedDateTimeJacksonSerializer());
-            addSerializer(ZoneOffset.class, new JavaTimeSerializers.ZoneOffsetJacksonSerializer());
-
-            addDeserializer(Duration.class, new JavaTimeSerializers.DurationJacksonDeserializer());
-            addDeserializer(Instant.class, new JavaTimeSerializers.InstantJacksonDeserializer());
-            addDeserializer(LocalDate.class, new JavaTimeSerializers.LocalDateJacksonDeserializer());
-            addDeserializer(LocalDateTime.class, new JavaTimeSerializers.LocalDateTimeJacksonDeserializer());
-            addDeserializer(LocalTime.class, new JavaTimeSerializers.LocalTimeJacksonDeserializer());
-            addDeserializer(MonthDay.class, new JavaTimeSerializers.MonthDayJacksonDeserializer());
-            addDeserializer(OffsetDateTime.class, new JavaTimeSerializers.OffsetDateTimeJacksonDeserializer());
-            addDeserializer(OffsetTime.class, new JavaTimeSerializers.OffsetTimeJacksonDeserializer());
-            addDeserializer(Period.class, new JavaTimeSerializers.PeriodJacksonDeserializer());
-            addDeserializer(Year.class, new JavaTimeSerializers.YearJacksonDeserializer());
-            addDeserializer(YearMonth.class, new JavaTimeSerializers.YearMonthJacksonDeserializer());
-            addDeserializer(ZonedDateTime.class, new JavaTimeSerializers.ZonedDateTimeJacksonDeserializer());
-            addDeserializer(ZoneOffset.class, new JavaTimeSerializers.ZoneOffsetJacksonDeserializer());
+            addSerializer(Duration.class, new JavaTimeSerializersV1d0.DurationJacksonSerializer());
+            addSerializer(Instant.class, new JavaTimeSerializersV1d0.InstantJacksonSerializer());
+            addSerializer(LocalDate.class, new JavaTimeSerializersV1d0.LocalDateJacksonSerializer());
+            addSerializer(LocalDateTime.class, new JavaTimeSerializersV1d0.LocalDateTimeJacksonSerializer());
+            addSerializer(LocalTime.class, new JavaTimeSerializersV1d0.LocalTimeJacksonSerializer());
+            addSerializer(MonthDay.class, new JavaTimeSerializersV1d0.MonthDayJacksonSerializer());
+            addSerializer(OffsetDateTime.class, new JavaTimeSerializersV1d0.OffsetDateTimeJacksonSerializer());
+            addSerializer(OffsetTime.class, new JavaTimeSerializersV1d0.OffsetTimeJacksonSerializer());
+            addSerializer(Period.class, new JavaTimeSerializersV1d0.PeriodJacksonSerializer());
+            addSerializer(Year.class, new JavaTimeSerializersV1d0.YearJacksonSerializer());
+            addSerializer(YearMonth.class, new JavaTimeSerializersV1d0.YearMonthJacksonSerializer());
+            addSerializer(ZonedDateTime.class, new JavaTimeSerializersV1d0.ZonedDateTimeJacksonSerializer());
+            addSerializer(ZoneOffset.class, new JavaTimeSerializersV1d0.ZoneOffsetJacksonSerializer());
+
+            addDeserializer(Duration.class, new JavaTimeSerializersV1d0.DurationJacksonDeserializer());
+            addDeserializer(Instant.class, new JavaTimeSerializersV1d0.InstantJacksonDeserializer());
+            addDeserializer(LocalDate.class, new JavaTimeSerializersV1d0.LocalDateJacksonDeserializer());
+            addDeserializer(LocalDateTime.class, new JavaTimeSerializersV1d0.LocalDateTimeJacksonDeserializer());
+            addDeserializer(LocalTime.class, new JavaTimeSerializersV1d0.LocalTimeJacksonDeserializer());
+            addDeserializer(MonthDay.class, new JavaTimeSerializersV1d0.MonthDayJacksonDeserializer());
+            addDeserializer(OffsetDateTime.class, new JavaTimeSerializersV1d0.OffsetDateTimeJacksonDeserializer());
+            addDeserializer(OffsetTime.class, new JavaTimeSerializersV1d0.OffsetTimeJacksonDeserializer());
+            addDeserializer(Period.class, new JavaTimeSerializersV1d0.PeriodJacksonDeserializer());
+            addDeserializer(Year.class, new JavaTimeSerializersV1d0.YearJacksonDeserializer());
+            addDeserializer(YearMonth.class, new JavaTimeSerializersV1d0.YearMonthJacksonDeserializer());
+            addDeserializer(ZonedDateTime.class, new JavaTimeSerializersV1d0.ZonedDateTimeJacksonDeserializer());
+            addDeserializer(ZoneOffset.class, new JavaTimeSerializersV1d0.ZoneOffsetJacksonDeserializer());
         }
 
         public static Builder build() {
             return new Builder();
         }
 
+        @Override
+        public Map<Class, String> getTypeDefinitions() {
+            // null is fine and handled by the GraphSONMapper
+            return null;
+        }
+
+        @Override
+        public String getTypeNamespace() {
+            // null is fine and handled by the GraphSONMapper
+            return null;
+        }
+
         static final class Builder implements GraphSONModuleBuilder {
 
             private Builder() {}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONReader.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONReader.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONReader.java
index d95fdff..0b27c61 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONReader.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONReader.java
@@ -35,7 +35,7 @@ import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedEdge;
 import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedProperty;
 import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedVertexProperty;
 import org.apache.tinkerpop.gremlin.structure.util.star.StarGraph;
-import org.apache.tinkerpop.gremlin.structure.util.star.StarGraphGraphSONSerializer;
+import org.apache.tinkerpop.gremlin.structure.util.star.StarGraphGraphSONDeserializer;
 import org.apache.tinkerpop.gremlin.util.function.FunctionUtils;
 import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
 import org.apache.tinkerpop.shaded.jackson.core.type.TypeReference;
@@ -169,14 +169,14 @@ public final class GraphSONReader implements GraphReader {
                              final Function<Attachable<Edge>, Edge> edgeAttachMethod,
                              final Direction attachEdgesOfThisDirection) throws IOException {
         final Map<String, Object> vertexData = mapper.readValue(inputStream, mapTypeReference);
-        final StarGraph starGraph = StarGraphGraphSONSerializer.readStarGraphVertex(vertexData);
+        final StarGraph starGraph = StarGraphGraphSONDeserializer.readStarGraphVertex(vertexData);
         if (vertexAttachMethod != null) vertexAttachMethod.apply(starGraph.getStarVertex());
 
         if (vertexData.containsKey(GraphSONTokens.OUT_E) && (attachEdgesOfThisDirection == Direction.BOTH || attachEdgesOfThisDirection == Direction.OUT))
-            StarGraphGraphSONSerializer.readStarGraphEdges(edgeAttachMethod, starGraph, vertexData, GraphSONTokens.OUT_E);
+            StarGraphGraphSONDeserializer.readStarGraphEdges(edgeAttachMethod, starGraph, vertexData, GraphSONTokens.OUT_E);
 
         if (vertexData.containsKey(GraphSONTokens.IN_E) && (attachEdgesOfThisDirection == Direction.BOTH || attachEdgesOfThisDirection == Direction.IN))
-            StarGraphGraphSONSerializer.readStarGraphEdges(edgeAttachMethod, starGraph, vertexData, GraphSONTokens.IN_E);
+            StarGraphGraphSONDeserializer.readStarGraphEdges(edgeAttachMethod, starGraph, vertexData, GraphSONTokens.IN_E);
 
         return starGraph.getStarVertex();
     }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializerProvider.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializerProvider.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializerProvider.java
index ed20fd9..c373692 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializerProvider.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializerProvider.java
@@ -26,17 +26,24 @@ import org.apache.tinkerpop.shaded.jackson.databind.ser.SerializerFactory;
 import org.apache.tinkerpop.shaded.jackson.databind.ser.std.ToStringSerializer;
 
 /**
- * Implementation of the {@code DefaultSerializerProvider} for Jackson that users the {@code ToStringSerializer} for
+ * Implementation of the {@code DefaultSerializerProvider} for Jackson that uses the {@code ToStringSerializer} for
  * unknown types.
  *
  * @author Stephen Mallette (http://stephen.genoprime.com)
  */
 final class GraphSONSerializerProvider extends DefaultSerializerProvider {
     private static final long serialVersionUID = 1L;
-    private static final ToStringSerializer toStringSerializer = new ToStringSerializer();
+    private static JsonSerializer<Object> unknownTypeSerializer = new ToStringSerializer();
 
-    public GraphSONSerializerProvider() {
+    public GraphSONSerializerProvider(GraphSONVersion version) {
         super();
+        if (version == GraphSONVersion.V1_0) {
+            setDefaultKeySerializer(new GraphSONSerializersV1d0.GraphSONKeySerializer());
+            unknownTypeSerializer = new ToStringSerializer();
+        } else {
+            setDefaultKeySerializer(new GraphSONSerializersV2d0.GraphSONKeySerializer());
+            unknownTypeSerializer = new ToStringGraphSONSerializer();
+        }
     }
 
     protected GraphSONSerializerProvider(final SerializerProvider src,
@@ -46,7 +53,7 @@ final class GraphSONSerializerProvider extends DefaultSerializerProvider {
 
     @Override
     public JsonSerializer<Object> getUnknownTypeSerializer(final Class<?> aClass) {
-        return toStringSerializer;
+        return unknownTypeSerializer;
     }
 
     @Override


[18/48] tinkerpop git commit: Merge branch 'TINKERPOP-1405'

Posted by sp...@apache.org.
Merge branch 'TINKERPOP-1405'


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/6052303f
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/6052303f
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/6052303f

Branch: refs/heads/TINKERPOP-1278
Commit: 6052303f32c0f7e51d020f2c4e0e747c43ea0ad0
Parents: f1617e2 d7ae280
Author: Ted Wilmes <tw...@gmail.com>
Authored: Tue Aug 16 10:48:45 2016 -0500
Committer: Ted Wilmes <tw...@gmail.com>
Committed: Tue Aug 16 10:48:45 2016 -0500

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |  1 +
 .../StandardVerificationStrategy.java           | 15 +++++--
 .../StandardVerificationStrategyTest.java       | 41 +++++++++++++++-----
 3 files changed, 43 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6052303f/CHANGELOG.asciidoc
----------------------------------------------------------------------


[21/48] tinkerpop git commit: Added recipes/glv tutorials to doc landing page. CTR

Posted by sp...@apache.org.
Added recipes/glv tutorials to doc landing page. CTR


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/6231f8d1
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/6231f8d1
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/6231f8d1

Branch: refs/heads/TINKERPOP-1278
Commit: 6231f8d165242d60d8897d56fbf3a7af20c3f837
Parents: f11f6cc
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed Aug 17 07:27:35 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed Aug 17 07:27:35 2016 -0400

----------------------------------------------------------------------
 docs/src/index.asciidoc                           |   4 ++++
 .../images/gremlin-house-of-mirrors-cropped.png   | Bin 0 -> 290361 bytes
 2 files changed, 4 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6231f8d1/docs/src/index.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/index.asciidoc b/docs/src/index.asciidoc
index ea00418..776740e 100644
--- a/docs/src/index.asciidoc
+++ b/docs/src/index.asciidoc
@@ -51,6 +51,10 @@ Tutorials
 A gentle introduction to TinkerPop and the Gremlin traversal language that is divided into five, ten and fifteen minute tutorial blocks.
 |image:gremlin-dashboard.png[] |link:http://tinkerpop.apache.org/docs/x.y.z/tutorials/the-gremlin-console/[The Gremlin Console] +
 Provides a detailed look at The Gremlin Console and how it can be used when working with TinkerPop.
+^|image:gremlin-chef.png[width=125] |link:http://tinkerpop.apache.org/docs/x.y.z/recipes/[Gremlin Recipes]
+A collection of best practices and common traversal patterns for Gremlin.
+^|image:gremlin-house-of-mirrors-cropped.png[width=200] |link:http://tinkerpop.apache.org/docs/x.y.z/gremlin-language-variants/[Gremlin Language Variants]
+Instructs developers on the approach to building a Gremlin variant in their native programming language.
 |image:gremlin-lab-coat.png[width=200] |link:http://sql2gremlin.com/[Sql2Gremlin] +
 Learn Gremlin using typical patterns found when querying data with SQL. (*external*)
 ^|image:gremlin-standing.png[width=125] |link:https://academy.datastax.com/resources/getting-started-graph-databases[Getting Started with Graph Databases] +

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6231f8d1/docs/static/images/gremlin-house-of-mirrors-cropped.png
----------------------------------------------------------------------
diff --git a/docs/static/images/gremlin-house-of-mirrors-cropped.png b/docs/static/images/gremlin-house-of-mirrors-cropped.png
new file mode 100755
index 0000000..e5caa08
Binary files /dev/null and b/docs/static/images/gremlin-house-of-mirrors-cropped.png differ


[11/48] tinkerpop git commit: Merge branch 'tp31'

Posted by sp...@apache.org.
Merge branch 'tp31'


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/bf225b8c
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/bf225b8c
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/bf225b8c

Branch: refs/heads/TINKERPOP-1278
Commit: bf225b8cc6a75e1a7781cb41bb2dd9f368b1ae70
Parents: cc0c06f 4443dcf
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Fri Aug 12 08:14:10 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Fri Aug 12 08:14:10 2016 -0600

----------------------------------------------------------------------
 CHANGELOG.asciidoc                                 |  1 +
 .../gremlin/structure/util/star/StarGraph.java     | 17 ++++++++++-------
 2 files changed, 11 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/bf225b8c/CHANGELOG.asciidoc
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/bf225b8c/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/StarGraph.java
----------------------------------------------------------------------
diff --cc gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/StarGraph.java
index 73c7ca7,2089c42..90c02ff
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/StarGraph.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/star/StarGraph.java
@@@ -38,9 -37,9 +38,10 @@@ import org.apache.tinkerpop.gremlin.uti
  
  import java.io.Serializable;
  import java.util.ArrayList;
+ import java.util.Arrays;
  import java.util.Collections;
  import java.util.HashMap;
 +import java.util.HashSet;
  import java.util.Iterator;
  import java.util.List;
  import java.util.Map;


[16/48] tinkerpop git commit: Added IoBuilder.onMapper() method.

Posted by sp...@apache.org.
Added IoBuilder.onMapper() method.

Deprecated IoBuilder.registry() in the process of doing that. This should provide greater flexibility to Graph providers who can now not only supply a custom IoRegistry but also access other non-generalized features of a Mapper.Builder instance.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/f1617e20
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/f1617e20
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/f1617e20

Branch: refs/heads/TINKERPOP-1278
Commit: f1617e202025db1ff6f94deb70c66f14772273bf
Parents: 9542419
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Mon Aug 15 10:29:46 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Mon Aug 15 10:29:46 2016 -0400

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |  1 +
 .../upgrade/release-3.2.x-incubating.asciidoc   | 11 ++++++++
 .../tinkerpop/gremlin/structure/io/Io.java      | 16 +++++++++++
 .../gremlin/structure/io/graphml/GraphMLIo.java | 27 +++++++++++++++----
 .../structure/io/graphson/GraphSONIo.java       | 28 ++++++++++++++++----
 .../gremlin/structure/io/gryo/GryoIo.java       | 28 ++++++++++++++++----
 .../tinkergraph/structure/TinkerGraph.java      |  2 +-
 .../tinkergraph/structure/TinkerGraphTest.java  | 28 +++++++++++++-------
 8 files changed, 116 insertions(+), 25 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f1617e20/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index bff6907..1ae85fe 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -27,6 +27,7 @@ TinkerPop 3.2.2 (NOT OFFICIALLY RELEASED YET)
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 * Changed scope of log4j dependencies so that they would only be used in tests and the binary distributions of Gremlin Console and Server.
+* Deprecated `Io.Builder.registry()` in favor of the newly introduced `Io.Builder.onMapper()`.
 * Added new recipe for "Traversal Induced Values".
 * Fixed a potential leak of a `ReferenceCounted` resource in Gremlin Server.
 * Added class registrations for `Map.Entry` implementations to `GryoMapper`.

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f1617e20/docs/src/upgrade/release-3.2.x-incubating.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/upgrade/release-3.2.x-incubating.asciidoc b/docs/src/upgrade/release-3.2.x-incubating.asciidoc
index 60092dc..235d228 100644
--- a/docs/src/upgrade/release-3.2.x-incubating.asciidoc
+++ b/docs/src/upgrade/release-3.2.x-incubating.asciidoc
@@ -50,6 +50,17 @@ Upgrading for Providers
 Graph System Providers
 ^^^^^^^^^^^^^^^^^^^^^^
 
+Deprecated Io.Builder.registry()
+++++++++++++++++++++++++++++++++
+
+The `Io.Builder.registry()` has been deprecated in favor of `Io.Builder.onMapper(Consumer<Mapper>)`. This change gives
+the `Graph` implementation greater flexibility over how to modify the `Mapper` implementation. In most cases, the
+implementation will simply add its `IoRegistry` to allow the `Mapper` access to custom serialization classes, but this
+approach makes it possible to also set other specific settings that aren't generalized across all IO implementations.
+A good example of this type of usage would be to provide a custom `ClassRessolver` implementation to a `GryoMapper`.
+
+See: link:https://issues.apache.org/jira/browse/TINKERPOP-1402[TINKERPOP-1402]
+
 Log4j Dependencies
 ++++++++++++++++++
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f1617e20/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/Io.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/Io.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/Io.java
index fbfbd59..820f474 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/Io.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/Io.java
@@ -21,6 +21,7 @@ package org.apache.tinkerpop.gremlin.structure.io;
 import org.apache.tinkerpop.gremlin.structure.Graph;
 
 import java.io.IOException;
+import java.util.function.Consumer;
 
 /**
  * Ties together the core interfaces of an IO format: {@link GraphReader}, {@link GraphWriter} and {@link Mapper}.
@@ -90,10 +91,25 @@ public interface Io<R extends GraphReader.ReaderBuilder, W extends GraphWriter.W
          * should not use this method directly.  If a user wants to register custom serializers, then such things
          * can be done via calls to {@link Io#mapper()} after the {@link Io} is constructed via
          * {@link Graph#io(Io.Builder)}.
+         * @deprecated As of release 3.2.2, replaced by {@link #onMapper(Consumer)}.
          */
+        @Deprecated
         public Builder<? extends Io> registry(final IoRegistry registry);
 
         /**
+         * Allows a {@link Graph} implementation to have full control over the {@link Mapper.Builder} instance.
+         * Typically, the implementation will just pass in its {@link IoRegistry} implementation so that the
+         * {@link Mapper} that gets built will have knowledge of any custom classes and serializers it may have. Note
+         * that if {@link #registry(IoRegistry)} is also set on a {@code Builder} instance it will be applied first
+         * prior to that instance being passed to {@code Consumer}.
+         * <p/>
+         * End-users should not use this method directly.  If a user wants to register custom serializers, then such
+         * things can be done via calls to {@link Io#mapper()} after the {@link Io} is constructed via
+         * {@link Graph#io(Io.Builder)}.
+         */
+        public Builder<? extends Io> onMapper(final Consumer<Mapper.Builder> onMapper);
+
+        /**
          * Providers use this method to supply the current instance of their {@link Graph} to the builder.  End-users
          * should not call this method directly.
          */

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f1617e20/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphml/GraphMLIo.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphml/GraphMLIo.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphml/GraphMLIo.java
index e8117e7..f595fbe 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphml/GraphMLIo.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphml/GraphMLIo.java
@@ -21,13 +21,15 @@ package org.apache.tinkerpop.gremlin.structure.io.graphml;
 import org.apache.tinkerpop.gremlin.structure.Graph;
 import org.apache.tinkerpop.gremlin.structure.io.Io;
 import org.apache.tinkerpop.gremlin.structure.io.IoRegistry;
-import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONMapper;
+import org.apache.tinkerpop.gremlin.structure.io.Mapper;
 
 import java.io.FileInputStream;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
+import java.util.Optional;
+import java.util.function.Consumer;
 
 /**
  * Constructs GraphML IO implementations given a {@link Graph} and {@link IoRegistry}. Implementers of the {@link Graph}
@@ -38,9 +40,11 @@ import java.io.OutputStream;
  */
 public final class GraphMLIo implements Io<GraphMLReader.Builder, GraphMLWriter.Builder, GraphMLMapper.Builder> {
     private final Graph graph;
+    private Optional<Consumer<Mapper.Builder>> onMapper;
 
-    private GraphMLIo(final Graph graph) {
-        this.graph = graph;
+    private GraphMLIo(final Builder builder) {
+        this.graph = builder.graph;
+        this.onMapper = Optional.ofNullable(builder.onMapper);
     }
 
     /**
@@ -64,7 +68,9 @@ public final class GraphMLIo implements Io<GraphMLReader.Builder, GraphMLWriter.
      */
     @Override
     public GraphMLMapper.Builder mapper() {
-        return GraphMLMapper.build();
+        final GraphMLMapper.Builder builder = GraphMLMapper.build();
+        onMapper.ifPresent(c -> c.accept(builder));
+        return builder;
     }
 
     /**
@@ -94,7 +100,12 @@ public final class GraphMLIo implements Io<GraphMLReader.Builder, GraphMLWriter.
     public final static class Builder implements Io.Builder<GraphMLIo> {
 
         private Graph graph;
+        private Consumer<Mapper.Builder> onMapper = null;
 
+        /**
+         * @deprecated As of release 3.2.2, replaced by {@link #onMapper(Consumer)}.
+         */
+        @Deprecated
         @Override
         public Io.Builder<GraphMLIo> registry(final IoRegistry registry) {
             // GraphML doesn't make use of a registry but the contract should simply exist
@@ -102,6 +113,12 @@ public final class GraphMLIo implements Io<GraphMLReader.Builder, GraphMLWriter.
         }
 
         @Override
+        public Io.Builder<? extends Io> onMapper(final Consumer<Mapper.Builder> onMapper) {
+            this.onMapper = onMapper;
+            return this;
+        }
+
+        @Override
         public Io.Builder<GraphMLIo> graph(final Graph g) {
             this.graph = g;
             return this;
@@ -110,7 +127,7 @@ public final class GraphMLIo implements Io<GraphMLReader.Builder, GraphMLWriter.
         @Override
         public GraphMLIo create() {
             if (null == graph) throw new IllegalArgumentException("The graph argument was not specified");
-            return new GraphMLIo(graph);
+            return new GraphMLIo(this);
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f1617e20/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONIo.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONIo.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONIo.java
index 0354a11..89f0f66 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONIo.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONIo.java
@@ -21,12 +21,15 @@ package org.apache.tinkerpop.gremlin.structure.io.graphson;
 import org.apache.tinkerpop.gremlin.structure.Graph;
 import org.apache.tinkerpop.gremlin.structure.io.Io;
 import org.apache.tinkerpop.gremlin.structure.io.IoRegistry;
+import org.apache.tinkerpop.gremlin.structure.io.Mapper;
 
 import java.io.FileInputStream;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
+import java.util.Optional;
+import java.util.function.Consumer;
 
 /**
  * Constructs GraphSON IO implementations given a {@link Graph} and {@link IoRegistry}. Implementers of the {@link Graph}
@@ -37,10 +40,12 @@ import java.io.OutputStream;
 public final class GraphSONIo implements Io<GraphSONReader.Builder, GraphSONWriter.Builder, GraphSONMapper.Builder> {
     private final IoRegistry registry;
     private final Graph graph;
+    private Optional<Consumer<Mapper.Builder>> onMapper;
 
-    private GraphSONIo(final IoRegistry registry, final Graph graph) {
-        this.registry = registry;
-        this.graph = graph;
+    private GraphSONIo(final Builder builder) {
+        this.registry = builder.registry;
+        this.graph = builder.graph;
+        this.onMapper = Optional.ofNullable(builder.onMapper);
     }
 
     /**
@@ -64,7 +69,9 @@ public final class GraphSONIo implements Io<GraphSONReader.Builder, GraphSONWrit
      */
     @Override
     public GraphSONMapper.Builder mapper() {
-        return (null == this.registry) ? GraphSONMapper.build() : GraphSONMapper.build().addRegistry(registry);
+        final GraphSONMapper.Builder builder = (null == this.registry) ? GraphSONMapper.build() : GraphSONMapper.build().addRegistry(this.registry);
+        onMapper.ifPresent(c -> c.accept(builder));
+        return builder;
     }
 
     /**
@@ -95,7 +102,12 @@ public final class GraphSONIo implements Io<GraphSONReader.Builder, GraphSONWrit
 
         private IoRegistry registry = null;
         private Graph graph;
+        private Consumer<Mapper.Builder> onMapper = null;
 
+        /**
+         * @deprecated As of release 3.2.2, replaced by {@link #onMapper(Consumer)}.
+         */
+        @Deprecated
         @Override
         public Io.Builder<GraphSONIo> registry(final IoRegistry registry) {
             this.registry = registry;
@@ -103,6 +115,12 @@ public final class GraphSONIo implements Io<GraphSONReader.Builder, GraphSONWrit
         }
 
         @Override
+        public Io.Builder<? extends Io> onMapper(final Consumer<Mapper.Builder> onMapper) {
+            this.onMapper = onMapper;
+            return this;
+        }
+
+        @Override
         public Io.Builder<GraphSONIo> graph(final Graph g) {
             this.graph = g;
             return this;
@@ -111,7 +129,7 @@ public final class GraphSONIo implements Io<GraphSONReader.Builder, GraphSONWrit
         @Override
         public GraphSONIo create() {
             if (null == graph) throw new IllegalArgumentException("The graph argument was not specified");
-            return new GraphSONIo(registry, graph);
+            return new GraphSONIo(this);
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f1617e20/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoIo.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoIo.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoIo.java
index aca9d74..86d96c9 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoIo.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoIo.java
@@ -21,12 +21,15 @@ package org.apache.tinkerpop.gremlin.structure.io.gryo;
 import org.apache.tinkerpop.gremlin.structure.Graph;
 import org.apache.tinkerpop.gremlin.structure.io.Io;
 import org.apache.tinkerpop.gremlin.structure.io.IoRegistry;
+import org.apache.tinkerpop.gremlin.structure.io.Mapper;
 
 import java.io.FileInputStream;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
+import java.util.Optional;
+import java.util.function.Consumer;
 
 /**
  * Constructs Gryo IO implementations given a {@link Graph} and {@link IoRegistry}. Implementers of the {@link Graph}
@@ -38,10 +41,12 @@ public final class GryoIo implements Io<GryoReader.Builder, GryoWriter.Builder,
 
     private final IoRegistry registry;
     private final Graph graph;
+    private Optional<Consumer<Mapper.Builder>> onMapper;
 
-    private GryoIo(final IoRegistry registry, final Graph graph) {
-        this.registry = registry;
-        this.graph = graph;
+    private GryoIo(final Builder builder) {
+        this.registry = builder.registry;
+        this.graph = builder.graph;
+        this.onMapper = Optional.ofNullable(builder.onMapper);
     }
 
     /**
@@ -64,7 +69,9 @@ public final class GryoIo implements Io<GryoReader.Builder, GryoWriter.Builder,
      */
     @Override
     public GryoMapper.Builder mapper() {
-        return (null == this.registry) ? GryoMapper.build() : GryoMapper.build().addRegistry(this.registry);
+        final GryoMapper.Builder builder = (null == this.registry) ? GryoMapper.build() : GryoMapper.build().addRegistry(this.registry);
+        onMapper.ifPresent(c -> c.accept(builder));
+        return builder;
     }
 
     /**
@@ -95,7 +102,12 @@ public final class GryoIo implements Io<GryoReader.Builder, GryoWriter.Builder,
 
         private IoRegistry registry = null;
         private Graph graph;
+        private Consumer<Mapper.Builder> onMapper = null;
 
+        /**
+         * @deprecated As of release 3.2.2, replaced by {@link #onMapper(Consumer)}.
+         */
+        @Deprecated
         @Override
         public Io.Builder<GryoIo> registry(final IoRegistry registry) {
             this.registry = registry;
@@ -103,6 +115,12 @@ public final class GryoIo implements Io<GryoReader.Builder, GryoWriter.Builder,
         }
 
         @Override
+        public Io.Builder<? extends Io> onMapper(final Consumer<Mapper.Builder> onMapper) {
+            this.onMapper = onMapper;
+            return this;
+        }
+
+        @Override
         public Io.Builder<GryoIo> graph(final Graph g) {
             this.graph = g;
             return this;
@@ -111,7 +129,7 @@ public final class GryoIo implements Io<GryoReader.Builder, GryoWriter.Builder,
         @Override
         public GryoIo create() {
             if (null == graph) throw new IllegalArgumentException("The graph argument was not specified");
-            return new GryoIo(registry, graph);
+            return new GryoIo(this);
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f1617e20/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraph.java
----------------------------------------------------------------------
diff --git a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraph.java b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraph.java
index 4cf264e..42a3b91 100644
--- a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraph.java
+++ b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraph.java
@@ -231,7 +231,7 @@ public final class TinkerGraph implements Graph {
 
     @Override
     public <I extends Io> I io(final Io.Builder<I> builder) {
-        return (I) builder.graph(this).registry(TinkerIoRegistry.getInstance()).create();
+        return (I) builder.graph(this).onMapper(mapper -> mapper.addRegistry(TinkerIoRegistry.getInstance())).create();
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f1617e20/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphTest.java
----------------------------------------------------------------------
diff --git a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphTest.java b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphTest.java
index fca1275..dfcb3a6 100644
--- a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphTest.java
+++ b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphTest.java
@@ -63,6 +63,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Random;
 import java.util.Set;
+import java.util.function.Consumer;
 import java.util.function.Supplier;
 
 import static org.junit.Assert.assertEquals;
@@ -453,7 +454,8 @@ public class TinkerGraphTest {
 
         //Test write graph
         graph.close();
-        assertEquals(TestIoBuilder.calledRegistry, 1);
+        assertEquals(TestIoBuilder.calledRegistry, 0);
+        assertEquals(TestIoBuilder.calledOnMapper, 1);
         assertEquals(TestIoBuilder.calledGraph, 1);
         assertEquals(TestIoBuilder.calledCreate, 1);
 
@@ -465,7 +467,8 @@ public class TinkerGraphTest {
 
         //Test read graph
         final TinkerGraph readGraph = TinkerGraph.open(conf);
-        assertEquals(TestIoBuilder.calledRegistry, 1);
+        assertEquals(TestIoBuilder.calledRegistry, 0);
+        assertEquals(TestIoBuilder.calledOnMapper, 1);
         assertEquals(TestIoBuilder.calledGraph, 1);
         assertEquals(TestIoBuilder.calledCreate, 1);
     }
@@ -575,25 +578,32 @@ public class TinkerGraphTest {
         }
     }
 
-    public static class TestIoBuilder implements Io.Builder{
+    public static class TestIoBuilder implements Io.Builder {
 
-        static int calledRegistry, calledGraph, calledCreate;
+        static int calledRegistry, calledGraph, calledCreate, calledOnMapper;
 
         public TestIoBuilder(){
             //Looks awkward to reset static vars inside a constructor, but makes sense from testing perspective
-            calledRegistry=0;
-            calledGraph=0;
-            calledCreate=0;
+            calledRegistry = 0;
+            calledGraph = 0;
+            calledCreate = 0;
+            calledOnMapper = 0;
         }
 
         @Override
-        public Io.Builder<? extends Io> registry(IoRegistry registry) {
+        public Io.Builder<? extends Io> registry(final IoRegistry registry) {
             calledRegistry++;
             return this;
         }
 
         @Override
-        public Io.Builder<? extends Io> graph(Graph graph) {
+        public Io.Builder<? extends Io> onMapper(final Consumer onMapper) {
+            calledOnMapper++;
+            return this;
+        }
+
+        @Override
+        public Io.Builder<? extends Io> graph(final Graph graph) {
             calledGraph++;
             return this;
         }


[09/48] tinkerpop git commit: Merge branch 'TINKERPOP-1397-tp31' of https://github.com/dalaro/incubator-tinkerpop into tp31

Posted by sp...@apache.org.
Merge branch 'TINKERPOP-1397-tp31' of https://github.com/dalaro/incubator-tinkerpop into tp31


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/2720b97d
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/2720b97d
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/2720b97d

Branch: refs/heads/TINKERPOP-1278
Commit: 2720b97d62d827cf82ffad93715dfa261e34d8d8
Parents: 6d29394 0022b7f
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Fri Aug 12 08:06:23 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Fri Aug 12 08:06:23 2016 -0600

----------------------------------------------------------------------
 .../gremlin/structure/util/star/StarGraph.java     | 17 ++++++++++-------
 1 file changed, 10 insertions(+), 7 deletions(-)
----------------------------------------------------------------------



[34/48] tinkerpop git commit: TINKERPOP-1274: GraphSON 2.0.

Posted by sp...@apache.org.
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializers.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializers.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializers.java
deleted file mode 100644
index aaca316..0000000
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializers.java
+++ /dev/null
@@ -1,465 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.tinkerpop.gremlin.structure.io.graphson;
-
-import org.apache.tinkerpop.gremlin.process.traversal.Path;
-import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
-import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.util.Metrics;
-import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalExplanation;
-import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalMetrics;
-import org.apache.tinkerpop.gremlin.structure.Edge;
-import org.apache.tinkerpop.gremlin.structure.Element;
-import org.apache.tinkerpop.gremlin.structure.Property;
-import org.apache.tinkerpop.gremlin.structure.Vertex;
-import org.apache.tinkerpop.gremlin.structure.VertexProperty;
-import org.apache.tinkerpop.gremlin.structure.util.Comparators;
-import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedVertexProperty;
-import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
-import org.apache.tinkerpop.shaded.jackson.core.JsonGenerationException;
-import org.apache.tinkerpop.shaded.jackson.core.JsonGenerator;
-import org.apache.tinkerpop.shaded.jackson.core.JsonProcessingException;
-import org.apache.tinkerpop.shaded.jackson.databind.SerializerProvider;
-import org.apache.tinkerpop.shaded.jackson.databind.jsontype.TypeSerializer;
-import org.apache.tinkerpop.shaded.jackson.databind.ser.std.StdKeySerializer;
-import org.apache.tinkerpop.shaded.jackson.databind.ser.std.StdSerializer;
-import org.javatuples.Pair;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.TimeUnit;
-import org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree;
-
-/**
- * GraphSON serializers for graph-based objects such as vertices, edges, properties, and paths. These serializers
- * present a generalized way to serialize the implementations of core interfaces.
- *
- * @author Stephen Mallette (http://stephen.genoprime.com)
- */
-final class GraphSONSerializers {
-
-    private GraphSONSerializers() {}
-
-    final static class VertexPropertyJacksonSerializer extends StdSerializer<VertexProperty> {
-
-        private final boolean normalize;
-
-        public VertexPropertyJacksonSerializer(final boolean normalize) {
-            super(VertexProperty.class);
-            this.normalize = normalize;
-        }
-
-        @Override
-        public void serialize(final VertexProperty property, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
-                throws IOException {
-            serializerVertexProperty(property, jsonGenerator, serializerProvider, null, normalize, true);
-        }
-
-        @Override
-        public void serializeWithType(final VertexProperty property, final JsonGenerator jsonGenerator,
-                                      final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException {
-            serializerVertexProperty(property, jsonGenerator, serializerProvider, typeSerializer, normalize, true);
-        }
-    }
-
-    final static class PropertyJacksonSerializer extends StdSerializer<Property> {
-
-        public PropertyJacksonSerializer() {
-            super(Property.class);
-        }
-
-        @Override
-        public void serialize(final Property property, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
-                throws IOException {
-            ser(property, jsonGenerator, serializerProvider, null);
-        }
-        @Override
-        public void serializeWithType(final Property property, final JsonGenerator jsonGenerator,
-                                      final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException {
-            ser(property, jsonGenerator, serializerProvider, typeSerializer);
-        }
-
-        private static void ser(final Property property, final JsonGenerator jsonGenerator,
-                                final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException {
-            jsonGenerator.writeStartObject();
-            if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
-            serializerProvider.defaultSerializeField(GraphSONTokens.KEY, property.key(), jsonGenerator);
-            serializerProvider.defaultSerializeField(GraphSONTokens.VALUE, property.value(), jsonGenerator);
-            jsonGenerator.writeEndObject();
-        }
-    }
-
-    final static class EdgeJacksonSerializer extends StdSerializer<Edge> {
-
-        private final boolean normalize;
-
-        public EdgeJacksonSerializer(final boolean normalize) {
-            super(Edge.class);
-            this.normalize = normalize;
-        }
-
-
-        @Override
-        public void serialize(final Edge edge, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
-                throws IOException {
-            ser(edge, jsonGenerator, serializerProvider, null);
-        }
-        @Override
-        public void serializeWithType(final Edge edge, final JsonGenerator jsonGenerator,
-                                      final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException {
-            ser(edge, jsonGenerator, serializerProvider, typeSerializer);
-        }
-
-        private void ser(final Edge edge, final JsonGenerator jsonGenerator,
-                                final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException {
-            jsonGenerator.writeStartObject();
-            if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
-            GraphSONUtil.writeWithType(GraphSONTokens.ID, edge.id(), jsonGenerator, serializerProvider, typeSerializer);
-
-            jsonGenerator.writeStringField(GraphSONTokens.LABEL, edge.label());
-            jsonGenerator.writeStringField(GraphSONTokens.TYPE, GraphSONTokens.EDGE);
-            jsonGenerator.writeStringField(GraphSONTokens.IN_LABEL, edge.inVertex().label());
-            jsonGenerator.writeStringField(GraphSONTokens.OUT_LABEL, edge.outVertex().label());
-            GraphSONUtil.writeWithType(GraphSONTokens.IN, edge.inVertex().id(), jsonGenerator, serializerProvider, typeSerializer);
-            GraphSONUtil.writeWithType(GraphSONTokens.OUT, edge.outVertex().id(), jsonGenerator, serializerProvider, typeSerializer);
-            writeProperties(edge, jsonGenerator, serializerProvider, typeSerializer);
-            jsonGenerator.writeEndObject();
-        }
-
-        private void writeProperties(final Edge edge, final JsonGenerator jsonGenerator,
-                                            final SerializerProvider serializerProvider,
-                                            final TypeSerializer typeSerializer) throws IOException {
-            final Iterator<Property<Object>> elementProperties = normalize ?
-                    IteratorUtils.list(edge.properties(), Comparators.PROPERTY_COMPARATOR).iterator() : edge.properties();
-            if (elementProperties.hasNext()) {
-                jsonGenerator.writeObjectFieldStart(GraphSONTokens.PROPERTIES);
-                if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
-                while (elementProperties.hasNext()) {
-                    final Property<Object> elementProperty = elementProperties.next();
-                    GraphSONUtil.writeWithType(elementProperty.key(), elementProperty.value(), jsonGenerator, serializerProvider, typeSerializer);
-                }
-                jsonGenerator.writeEndObject();
-            }
-        }
-
-    }
-
-    final static class VertexJacksonSerializer extends StdSerializer<Vertex> {
-
-        private final boolean normalize;
-
-        public VertexJacksonSerializer(final boolean normalize) {
-            super(Vertex.class);
-            this.normalize = normalize;
-        }
-
-        @Override
-        public void serialize(final Vertex vertex, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
-                throws IOException {
-            ser(vertex, jsonGenerator, serializerProvider, null);
-        }
-
-        @Override
-        public void serializeWithType(final Vertex vertex, final JsonGenerator jsonGenerator,
-                                      final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException {
-            ser(vertex, jsonGenerator, serializerProvider, typeSerializer);
-
-        }
-
-        private void ser(final Vertex vertex, final JsonGenerator jsonGenerator,
-                                final SerializerProvider serializerProvider, final TypeSerializer typeSerializer)
-                throws IOException {
-            jsonGenerator.writeStartObject();
-            if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
-            GraphSONUtil.writeWithType(GraphSONTokens.ID, vertex.id(), jsonGenerator, serializerProvider, typeSerializer);
-            jsonGenerator.writeStringField(GraphSONTokens.LABEL, vertex.label());
-            jsonGenerator.writeStringField(GraphSONTokens.TYPE, GraphSONTokens.VERTEX);
-            writeProperties(vertex, jsonGenerator, serializerProvider, typeSerializer);
-            jsonGenerator.writeEndObject();
-        }
-
-        private void writeProperties(final Vertex vertex, final JsonGenerator jsonGenerator,
-                                            final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException {
-            jsonGenerator.writeObjectFieldStart(GraphSONTokens.PROPERTIES);
-            if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
-
-            final List<String> keys = normalize ?
-                    IteratorUtils.list(vertex.keys().iterator(), Comparator.naturalOrder()) : new ArrayList<>(vertex.keys());
-            for (String key : keys) {
-                final Iterator<VertexProperty<Object>> vertexProperties = normalize ?
-                        IteratorUtils.list(vertex.properties(key), Comparators.PROPERTY_COMPARATOR).iterator() : vertex.properties(key);
-
-                if (vertexProperties.hasNext()) {
-                    jsonGenerator.writeArrayFieldStart(key);
-                    if (typeSerializer != null) {
-                        jsonGenerator.writeString(ArrayList.class.getName());
-                        jsonGenerator.writeStartArray();
-                    }
-
-                    while (vertexProperties.hasNext()) {
-                        serializerVertexProperty(vertexProperties.next(), jsonGenerator, serializerProvider, typeSerializer, normalize, false);
-                    }
-
-                    jsonGenerator.writeEndArray();
-                    if (typeSerializer != null) jsonGenerator.writeEndArray();
-                }
-            }
-
-            jsonGenerator.writeEndObject();
-        }
-
-    }
-
-    final static class PathJacksonSerializer extends StdSerializer<Path> {
-
-        public PathJacksonSerializer() {
-            super(Path.class);
-        }
-        @Override
-        public void serialize(final Path path, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
-                throws IOException, JsonGenerationException {
-            ser(path, jsonGenerator, null);
-        }
-
-        @Override
-        public void serializeWithType(final Path path, final JsonGenerator jsonGenerator,
-                                      final SerializerProvider serializerProvider, final TypeSerializer typeSerializer)
-                throws IOException, JsonProcessingException {
-            ser(path, jsonGenerator, typeSerializer);
-        }
-        private static void ser(final Path path, final JsonGenerator jsonGenerator, final TypeSerializer typeSerializer)
-                throws IOException {
-            jsonGenerator.writeStartObject();
-            if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
-            jsonGenerator.writeObjectField(GraphSONTokens.LABELS, path.labels());
-            jsonGenerator.writeObjectField(GraphSONTokens.OBJECTS, path.objects());
-            jsonGenerator.writeEndObject();
-        }
-
-    }
-    
-    final static class TreeJacksonSerializer extends StdSerializer<Tree> {
-
-        public TreeJacksonSerializer() {
-            super(Tree.class);
-        }
-
-        @Override
-        public void serialize(final Tree tree, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider) throws IOException, JsonGenerationException {
-            ser(tree, jsonGenerator, null);
-        }
-        
-        @Override
-        public void serializeWithType(final Tree tree, final JsonGenerator jsonGenerator,
-                                      final SerializerProvider serializerProvider, final TypeSerializer typeSerializer)
-                throws IOException, JsonProcessingException {
-            ser(tree, jsonGenerator, typeSerializer);
-        }
-        
-        private static void ser(final Tree tree, final JsonGenerator jsonGenerator, final TypeSerializer typeSerializer)
-                throws IOException {
-            jsonGenerator.writeStartObject(); 
-            if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
-            
-            Set<Map.Entry<Element, Tree>> set = tree.entrySet();
-            for(Map.Entry<Element, Tree> entry : set)
-            {
-                jsonGenerator.writeObjectFieldStart(entry.getKey().id().toString());
-                if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
-                jsonGenerator.writeObjectField(GraphSONTokens.KEY, entry.getKey()); 
-                jsonGenerator.writeObjectField(GraphSONTokens.VALUE, entry.getValue());
-                jsonGenerator.writeEndObject();
-            }
-            jsonGenerator.writeEndObject();
-        }
-    } 
-    
-    /**
-     * Maps in the JVM can have {@link Object} as a key, but in JSON they must be a {@link String}.
-     */
-    final static class GraphSONKeySerializer extends StdKeySerializer {
-
-        @Override
-        public void serialize(final Object o, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider) throws IOException {
-            ser(o, jsonGenerator, serializerProvider);
-        }
-        @Override
-        public void serializeWithType(final Object o, final JsonGenerator jsonGenerator,
-                                      final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException {
-            ser(o, jsonGenerator, serializerProvider);
-        }
-
-        private void ser(final Object o, final JsonGenerator jsonGenerator,
-                         final SerializerProvider serializerProvider) throws IOException {
-            if (Element.class.isAssignableFrom(o.getClass()))
-                jsonGenerator.writeFieldName((((Element) o).id()).toString());
-            else
-                super.serialize(o, jsonGenerator, serializerProvider);
-        }
-    }
-
-    final static class TraversalExplanationJacksonSerializer extends StdSerializer<TraversalExplanation> {
-        public TraversalExplanationJacksonSerializer() {
-            super(TraversalExplanation.class);
-        }
-
-        @Override
-        public void serialize(final TraversalExplanation traversalExplanation, final JsonGenerator jsonGenerator,
-                              final SerializerProvider serializerProvider) throws IOException {
-            ser(traversalExplanation, jsonGenerator);
-        }
-
-        @Override
-        public void serializeWithType(final TraversalExplanation value, final JsonGenerator gen,
-                                      final SerializerProvider serializers, final TypeSerializer typeSer) throws IOException {
-            ser(value, gen);
-        }
-
-        public void ser(final TraversalExplanation te, final JsonGenerator jsonGenerator) throws IOException {
-            final Map<String, Object> m = new HashMap<>();
-            m.put(GraphSONTokens.ORIGINAL, getStepsAsList(te.getOriginalTraversal()));
-
-            final List<Pair<TraversalStrategy, Traversal.Admin<?,?>>> strategyTraversals = te.getStrategyTraversals();
-
-            final List<Map<String,Object>> intermediates = new ArrayList<>();
-            for (final Pair<TraversalStrategy, Traversal.Admin<?, ?>> pair : strategyTraversals) {
-                final Map<String,Object> intermediate = new HashMap<>();
-                intermediate.put(GraphSONTokens.STRATEGY, pair.getValue0().toString());
-                intermediate.put(GraphSONTokens.CATEGORY, pair.getValue0().getTraversalCategory().getSimpleName());
-                intermediate.put(GraphSONTokens.TRAVERSAL, getStepsAsList(pair.getValue1()));
-                intermediates.add(intermediate);
-            }
-            m.put(GraphSONTokens.INTERMEDIATE, intermediates);
-
-            if (strategyTraversals.isEmpty())
-                m.put(GraphSONTokens.FINAL, getStepsAsList(te.getOriginalTraversal()));
-            else
-                m.put(GraphSONTokens.FINAL, getStepsAsList(strategyTraversals.get(strategyTraversals.size() - 1).getValue1()));
-
-            jsonGenerator.writeObject(m);
-        }
-
-        private List<String> getStepsAsList(final Traversal.Admin<?,?> t) {
-            final List<String> steps = new ArrayList<>();
-            t.getSteps().iterator().forEachRemaining(s -> steps.add(s.toString()));
-            return steps;
-        }
-    }
-
-    final static class TraversalMetricsJacksonSerializer extends StdSerializer<TraversalMetrics> {
-        public TraversalMetricsJacksonSerializer() {
-            super(TraversalMetrics.class);
-        }
-
-        @Override
-        public void serialize(final TraversalMetrics property, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
-                throws IOException {
-            serializeInternal(property, jsonGenerator);
-        }
-
-        @Override
-        public void serializeWithType(final TraversalMetrics property, final JsonGenerator jsonGenerator,
-                                      final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException {
-            serializeInternal(property, jsonGenerator);
-        }
-
-        private static void serializeInternal(final TraversalMetrics traversalMetrics, final JsonGenerator jsonGenerator) throws IOException {
-            // creation of the map enables all the fields to be properly written with their type if required
-            final Map<String, Object> m = new HashMap<>();
-            m.put(GraphSONTokens.DURATION, traversalMetrics.getDuration(TimeUnit.NANOSECONDS) / 1000000d);
-            final List<Map<String, Object>> metrics = new ArrayList<>();
-            traversalMetrics.getMetrics().forEach(it -> metrics.add(metricsToMap(it)));
-            m.put(GraphSONTokens.METRICS, metrics);
-
-            jsonGenerator.writeObject(m);
-        }
-
-        private static Map<String, Object> metricsToMap(final Metrics metrics) {
-            final Map<String, Object> m = new HashMap<>();
-            m.put(GraphSONTokens.ID, metrics.getId());
-            m.put(GraphSONTokens.NAME, metrics.getName());
-            m.put(GraphSONTokens.COUNTS, metrics.getCounts());
-            m.put(GraphSONTokens.DURATION, metrics.getDuration(TimeUnit.NANOSECONDS) / 1000000d);
-
-            if (!metrics.getAnnotations().isEmpty()) {
-                m.put(GraphSONTokens.ANNOTATIONS, metrics.getAnnotations());
-            }
-
-            if (!metrics.getNested().isEmpty()) {
-                final List<Map<String, Object>> nested = new ArrayList<>();
-                metrics.getNested().forEach(it -> nested.add(metricsToMap(it)));
-                m.put(GraphSONTokens.METRICS, nested);
-            }
-            return m;
-        }
-    }
-
-    private static void serializerVertexProperty(final VertexProperty property, final JsonGenerator jsonGenerator,
-                                                 final SerializerProvider serializerProvider,
-                                                 final TypeSerializer typeSerializer, final boolean normalize,
-                                                 final boolean includeLabel) throws IOException {
-        jsonGenerator.writeStartObject();
-        if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
-        GraphSONUtil.writeWithType(GraphSONTokens.ID, property.id(), jsonGenerator, serializerProvider, typeSerializer);
-        GraphSONUtil.writeWithType(GraphSONTokens.VALUE, property.value(), jsonGenerator, serializerProvider, typeSerializer);
-        if (includeLabel) jsonGenerator.writeStringField(GraphSONTokens.LABEL, property.label());
-        tryWriteMetaProperties(property, jsonGenerator, serializerProvider, typeSerializer, normalize);
-        jsonGenerator.writeEndObject();
-    }
-
-    private static void tryWriteMetaProperties(final VertexProperty property, final JsonGenerator jsonGenerator,
-                                               final SerializerProvider serializerProvider,
-                                               final TypeSerializer typeSerializer, final boolean normalize) throws IOException {
-        // when "detached" you can't check features of the graph it detached from so it has to be
-        // treated differently from a regular VertexProperty implementation.
-        if (property instanceof DetachedVertexProperty) {
-            // only write meta properties key if they exist
-            if (property.properties().hasNext()) {
-                writeMetaProperties(property, jsonGenerator, serializerProvider, typeSerializer, normalize);
-            }
-        } else {
-            // still attached - so we can check the features to see if it's worth even trying to write the
-            // meta properties key
-            if (property.graph().features().vertex().supportsMetaProperties() && property.properties().hasNext()) {
-                writeMetaProperties(property, jsonGenerator, serializerProvider, typeSerializer, normalize);
-            }
-        }
-    }
-
-    private static void writeMetaProperties(final VertexProperty property, final JsonGenerator jsonGenerator,
-                                            final SerializerProvider serializerProvider,
-                                            final TypeSerializer typeSerializer, final boolean normalize) throws IOException {
-        jsonGenerator.writeObjectFieldStart(GraphSONTokens.PROPERTIES);
-        if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
-        final Iterator<Property<Object>> metaProperties = normalize ?
-                IteratorUtils.list(( Iterator<Property<Object>>) property.properties(), Comparators.PROPERTY_COMPARATOR).iterator() : property.properties();
-        while (metaProperties.hasNext()) {
-            final Property<Object> metaProperty = metaProperties.next();
-            GraphSONUtil.writeWithType(metaProperty.key(), metaProperty.value(), jsonGenerator, serializerProvider, typeSerializer);
-        }
-        jsonGenerator.writeEndObject();
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV1d0.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV1d0.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV1d0.java
new file mode 100644
index 0000000..2fc9e47
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV1d0.java
@@ -0,0 +1,465 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.structure.io.graphson;
+
+import org.apache.tinkerpop.gremlin.process.traversal.Path;
+import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree;
+import org.apache.tinkerpop.gremlin.process.traversal.util.Metrics;
+import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalExplanation;
+import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalMetrics;
+import org.apache.tinkerpop.gremlin.structure.Edge;
+import org.apache.tinkerpop.gremlin.structure.Element;
+import org.apache.tinkerpop.gremlin.structure.Property;
+import org.apache.tinkerpop.gremlin.structure.Vertex;
+import org.apache.tinkerpop.gremlin.structure.VertexProperty;
+import org.apache.tinkerpop.gremlin.structure.util.Comparators;
+import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedVertexProperty;
+import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
+import org.apache.tinkerpop.shaded.jackson.core.JsonGenerationException;
+import org.apache.tinkerpop.shaded.jackson.core.JsonGenerator;
+import org.apache.tinkerpop.shaded.jackson.core.JsonProcessingException;
+import org.apache.tinkerpop.shaded.jackson.databind.SerializerProvider;
+import org.apache.tinkerpop.shaded.jackson.databind.jsontype.TypeSerializer;
+import org.apache.tinkerpop.shaded.jackson.databind.ser.std.StdKeySerializer;
+import org.apache.tinkerpop.shaded.jackson.databind.ser.std.StdSerializer;
+import org.javatuples.Pair;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * GraphSON serializers for graph-based objects such as vertices, edges, properties, and paths. These serializers
+ * present a generalized way to serialize the implementations of core interfaces.
+ *
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ */
+final class GraphSONSerializersV1d0 {
+
+    private GraphSONSerializersV1d0() {}
+
+    final static class VertexPropertyJacksonSerializer extends StdSerializer<VertexProperty> {
+
+        private final boolean normalize;
+
+        public VertexPropertyJacksonSerializer(final boolean normalize) {
+            super(VertexProperty.class);
+            this.normalize = normalize;
+        }
+
+        @Override
+        public void serialize(final VertexProperty property, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
+                throws IOException {
+            serializerVertexProperty(property, jsonGenerator, serializerProvider, null, normalize, true);
+        }
+
+        @Override
+        public void serializeWithType(final VertexProperty property, final JsonGenerator jsonGenerator,
+                                      final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException {
+            serializerVertexProperty(property, jsonGenerator, serializerProvider, typeSerializer, normalize, true);
+        }
+    }
+
+    final static class PropertyJacksonSerializer extends StdSerializer<Property> {
+
+        public PropertyJacksonSerializer() {
+            super(Property.class);
+        }
+
+        @Override
+        public void serialize(final Property property, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
+                throws IOException {
+            ser(property, jsonGenerator, serializerProvider, null);
+        }
+        @Override
+        public void serializeWithType(final Property property, final JsonGenerator jsonGenerator,
+                                      final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException {
+            ser(property, jsonGenerator, serializerProvider, typeSerializer);
+        }
+
+        private static void ser(final Property property, final JsonGenerator jsonGenerator,
+                                final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException {
+            jsonGenerator.writeStartObject();
+            if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
+            serializerProvider.defaultSerializeField(GraphSONTokens.KEY, property.key(), jsonGenerator);
+            serializerProvider.defaultSerializeField(GraphSONTokens.VALUE, property.value(), jsonGenerator);
+            jsonGenerator.writeEndObject();
+        }
+    }
+
+    final static class EdgeJacksonSerializer extends StdSerializer<Edge> {
+
+        private final boolean normalize;
+
+        public EdgeJacksonSerializer(final boolean normalize) {
+            super(Edge.class);
+            this.normalize = normalize;
+        }
+
+
+        @Override
+        public void serialize(final Edge edge, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
+                throws IOException {
+            ser(edge, jsonGenerator, serializerProvider, null);
+        }
+        @Override
+        public void serializeWithType(final Edge edge, final JsonGenerator jsonGenerator,
+                                      final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException {
+            ser(edge, jsonGenerator, serializerProvider, typeSerializer);
+        }
+
+        private void ser(final Edge edge, final JsonGenerator jsonGenerator,
+                                final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException {
+            jsonGenerator.writeStartObject();
+            if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
+            GraphSONUtil.writeWithType(GraphSONTokens.ID, edge.id(), jsonGenerator, serializerProvider, typeSerializer);
+
+            jsonGenerator.writeStringField(GraphSONTokens.LABEL, edge.label());
+            jsonGenerator.writeStringField(GraphSONTokens.TYPE, GraphSONTokens.EDGE);
+            jsonGenerator.writeStringField(GraphSONTokens.IN_LABEL, edge.inVertex().label());
+            jsonGenerator.writeStringField(GraphSONTokens.OUT_LABEL, edge.outVertex().label());
+            GraphSONUtil.writeWithType(GraphSONTokens.IN, edge.inVertex().id(), jsonGenerator, serializerProvider, typeSerializer);
+            GraphSONUtil.writeWithType(GraphSONTokens.OUT, edge.outVertex().id(), jsonGenerator, serializerProvider, typeSerializer);
+            writeProperties(edge, jsonGenerator, serializerProvider, typeSerializer);
+            jsonGenerator.writeEndObject();
+        }
+
+        private void writeProperties(final Edge edge, final JsonGenerator jsonGenerator,
+                                            final SerializerProvider serializerProvider,
+                                            final TypeSerializer typeSerializer) throws IOException {
+            final Iterator<Property<Object>> elementProperties = normalize ?
+                    IteratorUtils.list(edge.properties(), Comparators.PROPERTY_COMPARATOR).iterator() : edge.properties();
+            if (elementProperties.hasNext()) {
+                jsonGenerator.writeObjectFieldStart(GraphSONTokens.PROPERTIES);
+                if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
+                while (elementProperties.hasNext()) {
+                    final Property<Object> elementProperty = elementProperties.next();
+                    GraphSONUtil.writeWithType(elementProperty.key(), elementProperty.value(), jsonGenerator, serializerProvider, typeSerializer);
+                }
+                jsonGenerator.writeEndObject();
+            }
+        }
+
+    }
+
+    final static class VertexJacksonSerializer extends StdSerializer<Vertex> {
+
+        private final boolean normalize;
+
+        public VertexJacksonSerializer(final boolean normalize) {
+            super(Vertex.class);
+            this.normalize = normalize;
+        }
+
+        @Override
+        public void serialize(final Vertex vertex, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
+                throws IOException {
+            ser(vertex, jsonGenerator, serializerProvider, null);
+        }
+
+        @Override
+        public void serializeWithType(final Vertex vertex, final JsonGenerator jsonGenerator,
+                                      final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException {
+            ser(vertex, jsonGenerator, serializerProvider, typeSerializer);
+
+        }
+
+        private void ser(final Vertex vertex, final JsonGenerator jsonGenerator,
+                                final SerializerProvider serializerProvider, final TypeSerializer typeSerializer)
+                throws IOException {
+            jsonGenerator.writeStartObject();
+            if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
+            GraphSONUtil.writeWithType(GraphSONTokens.ID, vertex.id(), jsonGenerator, serializerProvider, typeSerializer);
+            jsonGenerator.writeStringField(GraphSONTokens.LABEL, vertex.label());
+            jsonGenerator.writeStringField(GraphSONTokens.TYPE, GraphSONTokens.VERTEX);
+            writeProperties(vertex, jsonGenerator, serializerProvider, typeSerializer);
+            jsonGenerator.writeEndObject();
+        }
+
+        private void writeProperties(final Vertex vertex, final JsonGenerator jsonGenerator,
+                                            final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException {
+            jsonGenerator.writeObjectFieldStart(GraphSONTokens.PROPERTIES);
+            if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
+
+            final List<String> keys = normalize ?
+                    IteratorUtils.list(vertex.keys().iterator(), Comparator.naturalOrder()) : new ArrayList<>(vertex.keys());
+            for (String key : keys) {
+                final Iterator<VertexProperty<Object>> vertexProperties = normalize ?
+                        IteratorUtils.list(vertex.properties(key), Comparators.PROPERTY_COMPARATOR).iterator() : vertex.properties(key);
+
+                if (vertexProperties.hasNext()) {
+                    jsonGenerator.writeArrayFieldStart(key);
+                    if (typeSerializer != null) {
+                        jsonGenerator.writeString(ArrayList.class.getName());
+                        jsonGenerator.writeStartArray();
+                    }
+
+                    while (vertexProperties.hasNext()) {
+                        serializerVertexProperty(vertexProperties.next(), jsonGenerator, serializerProvider, typeSerializer, normalize, false);
+                    }
+
+                    jsonGenerator.writeEndArray();
+                    if (typeSerializer != null) jsonGenerator.writeEndArray();
+                }
+            }
+
+            jsonGenerator.writeEndObject();
+        }
+
+    }
+
+    final static class PathJacksonSerializer extends StdSerializer<Path> {
+
+        public PathJacksonSerializer() {
+            super(Path.class);
+        }
+        @Override
+        public void serialize(final Path path, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
+                throws IOException, JsonGenerationException {
+            ser(path, jsonGenerator, null);
+        }
+
+        @Override
+        public void serializeWithType(final Path path, final JsonGenerator jsonGenerator,
+                                      final SerializerProvider serializerProvider, final TypeSerializer typeSerializer)
+                throws IOException, JsonProcessingException {
+            ser(path, jsonGenerator, typeSerializer);
+        }
+        private static void ser(final Path path, final JsonGenerator jsonGenerator, final TypeSerializer typeSerializer)
+                throws IOException {
+            jsonGenerator.writeStartObject();
+            if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
+            jsonGenerator.writeObjectField(GraphSONTokens.LABELS, path.labels());
+            jsonGenerator.writeObjectField(GraphSONTokens.OBJECTS, path.objects());
+            jsonGenerator.writeEndObject();
+        }
+
+    }
+    
+    final static class TreeJacksonSerializer extends StdSerializer<Tree> {
+
+        public TreeJacksonSerializer() {
+            super(Tree.class);
+        }
+
+        @Override
+        public void serialize(final Tree tree, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider) throws IOException, JsonGenerationException {
+            ser(tree, jsonGenerator, null);
+        }
+        
+        @Override
+        public void serializeWithType(final Tree tree, final JsonGenerator jsonGenerator,
+                                      final SerializerProvider serializerProvider, final TypeSerializer typeSerializer)
+                throws IOException, JsonProcessingException {
+            ser(tree, jsonGenerator, typeSerializer);
+        }
+        
+        private static void ser(final Tree tree, final JsonGenerator jsonGenerator, final TypeSerializer typeSerializer)
+                throws IOException {
+            jsonGenerator.writeStartObject(); 
+            if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
+            
+            Set<Map.Entry<Element, Tree>> set = tree.entrySet();
+            for(Map.Entry<Element, Tree> entry : set)
+            {
+                jsonGenerator.writeObjectFieldStart(entry.getKey().id().toString());
+                if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
+                jsonGenerator.writeObjectField(GraphSONTokens.KEY, entry.getKey()); 
+                jsonGenerator.writeObjectField(GraphSONTokens.VALUE, entry.getValue());
+                jsonGenerator.writeEndObject();
+            }
+            jsonGenerator.writeEndObject();
+        }
+    } 
+    
+    /**
+     * Maps in the JVM can have {@link Object} as a key, but in JSON they must be a {@link String}.
+     */
+    final static class GraphSONKeySerializer extends StdKeySerializer {
+
+        @Override
+        public void serialize(final Object o, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider) throws IOException {
+            ser(o, jsonGenerator, serializerProvider);
+        }
+        @Override
+        public void serializeWithType(final Object o, final JsonGenerator jsonGenerator,
+                                      final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException {
+            ser(o, jsonGenerator, serializerProvider);
+        }
+
+        private void ser(final Object o, final JsonGenerator jsonGenerator,
+                         final SerializerProvider serializerProvider) throws IOException {
+            if (Element.class.isAssignableFrom(o.getClass()))
+                jsonGenerator.writeFieldName((((Element) o).id()).toString());
+            else
+                super.serialize(o, jsonGenerator, serializerProvider);
+        }
+    }
+
+    final static class TraversalExplanationJacksonSerializer extends StdSerializer<TraversalExplanation> {
+        public TraversalExplanationJacksonSerializer() {
+            super(TraversalExplanation.class);
+        }
+
+        @Override
+        public void serialize(final TraversalExplanation traversalExplanation, final JsonGenerator jsonGenerator,
+                              final SerializerProvider serializerProvider) throws IOException {
+            ser(traversalExplanation, jsonGenerator);
+        }
+
+        @Override
+        public void serializeWithType(final TraversalExplanation value, final JsonGenerator gen,
+                                      final SerializerProvider serializers, final TypeSerializer typeSer) throws IOException {
+            ser(value, gen);
+        }
+
+        public void ser(final TraversalExplanation te, final JsonGenerator jsonGenerator) throws IOException {
+            final Map<String, Object> m = new HashMap<>();
+            m.put(GraphSONTokens.ORIGINAL, getStepsAsList(te.getOriginalTraversal()));
+
+            final List<Pair<TraversalStrategy, Traversal.Admin<?,?>>> strategyTraversals = te.getStrategyTraversals();
+
+            final List<Map<String,Object>> intermediates = new ArrayList<>();
+            for (final Pair<TraversalStrategy, Traversal.Admin<?, ?>> pair : strategyTraversals) {
+                final Map<String,Object> intermediate = new HashMap<>();
+                intermediate.put(GraphSONTokens.STRATEGY, pair.getValue0().toString());
+                intermediate.put(GraphSONTokens.CATEGORY, pair.getValue0().getTraversalCategory().getSimpleName());
+                intermediate.put(GraphSONTokens.TRAVERSAL, getStepsAsList(pair.getValue1()));
+                intermediates.add(intermediate);
+            }
+            m.put(GraphSONTokens.INTERMEDIATE, intermediates);
+
+            if (strategyTraversals.isEmpty())
+                m.put(GraphSONTokens.FINAL, getStepsAsList(te.getOriginalTraversal()));
+            else
+                m.put(GraphSONTokens.FINAL, getStepsAsList(strategyTraversals.get(strategyTraversals.size() - 1).getValue1()));
+
+            jsonGenerator.writeObject(m);
+        }
+
+        private List<String> getStepsAsList(final Traversal.Admin<?,?> t) {
+            final List<String> steps = new ArrayList<>();
+            t.getSteps().iterator().forEachRemaining(s -> steps.add(s.toString()));
+            return steps;
+        }
+    }
+
+    final static class TraversalMetricsJacksonSerializer extends StdSerializer<TraversalMetrics> {
+        public TraversalMetricsJacksonSerializer() {
+            super(TraversalMetrics.class);
+        }
+
+        @Override
+        public void serialize(final TraversalMetrics property, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
+                throws IOException {
+            serializeInternal(property, jsonGenerator);
+        }
+
+        @Override
+        public void serializeWithType(final TraversalMetrics property, final JsonGenerator jsonGenerator,
+                                      final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException {
+            serializeInternal(property, jsonGenerator);
+        }
+
+        private static void serializeInternal(final TraversalMetrics traversalMetrics, final JsonGenerator jsonGenerator) throws IOException {
+            // creation of the map enables all the fields to be properly written with their type if required
+            final Map<String, Object> m = new HashMap<>();
+            m.put(GraphSONTokens.DURATION, traversalMetrics.getDuration(TimeUnit.NANOSECONDS) / 1000000d);
+            final List<Map<String, Object>> metrics = new ArrayList<>();
+            traversalMetrics.getMetrics().forEach(it -> metrics.add(metricsToMap(it)));
+            m.put(GraphSONTokens.METRICS, metrics);
+
+            jsonGenerator.writeObject(m);
+        }
+
+        private static Map<String, Object> metricsToMap(final Metrics metrics) {
+            final Map<String, Object> m = new HashMap<>();
+            m.put(GraphSONTokens.ID, metrics.getId());
+            m.put(GraphSONTokens.NAME, metrics.getName());
+            m.put(GraphSONTokens.COUNTS, metrics.getCounts());
+            m.put(GraphSONTokens.DURATION, metrics.getDuration(TimeUnit.NANOSECONDS) / 1000000d);
+
+            if (!metrics.getAnnotations().isEmpty()) {
+                m.put(GraphSONTokens.ANNOTATIONS, metrics.getAnnotations());
+            }
+
+            if (!metrics.getNested().isEmpty()) {
+                final List<Map<String, Object>> nested = new ArrayList<>();
+                metrics.getNested().forEach(it -> nested.add(metricsToMap(it)));
+                m.put(GraphSONTokens.METRICS, nested);
+            }
+            return m;
+        }
+    }
+
+    private static void serializerVertexProperty(final VertexProperty property, final JsonGenerator jsonGenerator,
+                                                 final SerializerProvider serializerProvider,
+                                                 final TypeSerializer typeSerializer, final boolean normalize,
+                                                 final boolean includeLabel) throws IOException {
+        jsonGenerator.writeStartObject();
+        if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
+        GraphSONUtil.writeWithType(GraphSONTokens.ID, property.id(), jsonGenerator, serializerProvider, typeSerializer);
+        GraphSONUtil.writeWithType(GraphSONTokens.VALUE, property.value(), jsonGenerator, serializerProvider, typeSerializer);
+        if (includeLabel) jsonGenerator.writeStringField(GraphSONTokens.LABEL, property.label());
+        tryWriteMetaProperties(property, jsonGenerator, serializerProvider, typeSerializer, normalize);
+        jsonGenerator.writeEndObject();
+    }
+
+    private static void tryWriteMetaProperties(final VertexProperty property, final JsonGenerator jsonGenerator,
+                                               final SerializerProvider serializerProvider,
+                                               final TypeSerializer typeSerializer, final boolean normalize) throws IOException {
+        // when "detached" you can't check features of the graph it detached from so it has to be
+        // treated differently from a regular VertexProperty implementation.
+        if (property instanceof DetachedVertexProperty) {
+            // only write meta properties key if they exist
+            if (property.properties().hasNext()) {
+                writeMetaProperties(property, jsonGenerator, serializerProvider, typeSerializer, normalize);
+            }
+        } else {
+            // still attached - so we can check the features to see if it's worth even trying to write the
+            // meta properties key
+            if (property.graph().features().vertex().supportsMetaProperties() && property.properties().hasNext()) {
+                writeMetaProperties(property, jsonGenerator, serializerProvider, typeSerializer, normalize);
+            }
+        }
+    }
+
+    private static void writeMetaProperties(final VertexProperty property, final JsonGenerator jsonGenerator,
+                                            final SerializerProvider serializerProvider,
+                                            final TypeSerializer typeSerializer, final boolean normalize) throws IOException {
+        jsonGenerator.writeObjectFieldStart(GraphSONTokens.PROPERTIES);
+        if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
+        final Iterator<Property<Object>> metaProperties = normalize ?
+                IteratorUtils.list(( Iterator<Property<Object>>) property.properties(), Comparators.PROPERTY_COMPARATOR).iterator() : property.properties();
+        while (metaProperties.hasNext()) {
+            final Property<Object> metaProperty = metaProperties.next();
+            GraphSONUtil.writeWithType(metaProperty.key(), metaProperty.value(), jsonGenerator, serializerProvider, typeSerializer);
+        }
+        jsonGenerator.writeEndObject();
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV2d0.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV2d0.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV2d0.java
new file mode 100644
index 0000000..a689a11
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV2d0.java
@@ -0,0 +1,580 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.structure.io.graphson;
+
+import org.apache.tinkerpop.gremlin.process.traversal.Path;
+import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.MutablePath;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree;
+import org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversalMetrics;
+import org.apache.tinkerpop.gremlin.process.traversal.util.Metrics;
+import org.apache.tinkerpop.gremlin.process.traversal.util.MutableMetrics;
+import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalExplanation;
+import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalMetrics;
+import org.apache.tinkerpop.gremlin.structure.Edge;
+import org.apache.tinkerpop.gremlin.structure.Element;
+import org.apache.tinkerpop.gremlin.structure.Property;
+import org.apache.tinkerpop.gremlin.structure.Vertex;
+import org.apache.tinkerpop.gremlin.structure.VertexProperty;
+import org.apache.tinkerpop.gremlin.structure.util.Comparators;
+import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedEdge;
+import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedProperty;
+import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedVertex;
+import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedVertexProperty;
+import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
+import org.apache.tinkerpop.shaded.jackson.core.JsonGenerationException;
+import org.apache.tinkerpop.shaded.jackson.core.JsonGenerator;
+import org.apache.tinkerpop.shaded.jackson.core.JsonParser;
+import org.apache.tinkerpop.shaded.jackson.core.JsonProcessingException;
+import org.apache.tinkerpop.shaded.jackson.databind.DeserializationContext;
+import org.apache.tinkerpop.shaded.jackson.databind.SerializerProvider;
+import org.apache.tinkerpop.shaded.jackson.databind.deser.std.StdDeserializer;
+import org.apache.tinkerpop.shaded.jackson.databind.jsontype.TypeSerializer;
+import org.apache.tinkerpop.shaded.jackson.databind.ser.std.StdKeySerializer;
+import org.apache.tinkerpop.shaded.jackson.databind.ser.std.StdScalarSerializer;
+import org.apache.tinkerpop.shaded.jackson.databind.ser.std.StdSerializer;
+import org.javatuples.Pair;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.TimeUnit;
+
+import static org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONUtil.safeWriteObjectField;
+
+/**
+ * GraphSON serializers for graph-based objects such as vertices, edges, properties, and paths. These serializers
+ * present a generalized way to serialize the implementations of core interfaces.
+ *
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ */
+public class GraphSONSerializersV2d0 {
+
+    private GraphSONSerializersV2d0() {
+    }
+
+    ////////////////////////////// SERIALIZERS /////////////////////////////////
+
+    final static class VertexJacksonSerializer extends StdScalarSerializer<Vertex> {
+
+        private final boolean normalize;
+
+        public VertexJacksonSerializer(final boolean normalize) {
+            super(Vertex.class);
+            this.normalize = normalize;
+        }
+
+        @Override
+        public void serialize(final Vertex vertex, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
+                throws IOException {
+            jsonGenerator.writeStartObject();
+
+            jsonGenerator.writeObjectField(GraphSONTokens.ID, vertex.id());
+            jsonGenerator.writeStringField(GraphSONTokens.LABEL, vertex.label());
+            writeProperties(vertex, jsonGenerator);
+
+            jsonGenerator.writeEndObject();
+
+        }
+
+        private void writeProperties(final Vertex vertex, final JsonGenerator jsonGenerator) throws IOException {
+            if (vertex.keys().size() == 0)
+                return;
+            jsonGenerator.writeFieldName(GraphSONTokens.PROPERTIES);
+            jsonGenerator.writeStartObject();
+
+            final List<String> keys = normalize ?
+                    IteratorUtils.list(vertex.keys().iterator(), Comparator.naturalOrder()) : new ArrayList<>(vertex.keys());
+            for (String key : keys) {
+                final Iterator<VertexProperty<Object>> vertexProperties = normalize ?
+                        IteratorUtils.list(vertex.properties(key), Comparators.PROPERTY_COMPARATOR).iterator() : vertex.properties(key);
+                if (vertexProperties.hasNext()) {
+                    jsonGenerator.writeFieldName(key);
+
+                    jsonGenerator.writeStartArray();
+                    while (vertexProperties.hasNext()) {
+                        jsonGenerator.writeObject(vertexProperties.next());
+                    }
+                    jsonGenerator.writeEndArray();
+                }
+            }
+
+            jsonGenerator.writeEndObject();
+        }
+    }
+
+    final static class EdgeJacksonSerializer extends StdScalarSerializer<Edge> {
+
+        private final boolean normalize;
+
+        public EdgeJacksonSerializer(final boolean normalize) {
+            super(Edge.class);
+            this.normalize = normalize;
+        }
+
+
+        @Override
+        public void serialize(final Edge edge, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
+                throws IOException {
+            jsonGenerator.writeStartObject();
+
+            jsonGenerator.writeObjectField(GraphSONTokens.ID, edge.id());
+            jsonGenerator.writeStringField(GraphSONTokens.LABEL, edge.label());
+            jsonGenerator.writeStringField(GraphSONTokens.IN_LABEL, edge.inVertex().label());
+            jsonGenerator.writeStringField(GraphSONTokens.OUT_LABEL, edge.outVertex().label());
+            jsonGenerator.writeObjectField(GraphSONTokens.IN, edge.inVertex().id());
+            jsonGenerator.writeObjectField(GraphSONTokens.OUT, edge.outVertex().id());
+            writeProperties(edge, jsonGenerator);
+
+            jsonGenerator.writeEndObject();
+        }
+
+        private void writeProperties(final Edge edge, final JsonGenerator jsonGenerator) throws IOException {
+            final Iterator<Property<Object>> elementProperties = normalize ?
+                    IteratorUtils.list(edge.properties(), Comparators.PROPERTY_COMPARATOR).iterator() : edge.properties();
+            if (elementProperties.hasNext()) {
+                jsonGenerator.writeFieldName(GraphSONTokens.PROPERTIES);
+
+                jsonGenerator.writeStartObject();
+                elementProperties.forEachRemaining(
+                        prop -> safeWriteObjectField(jsonGenerator, prop.key(), prop)
+                );
+                jsonGenerator.writeEndObject();
+            }
+        }
+    }
+
+    final static class PropertyJacksonSerializer extends StdScalarSerializer<Property> {
+
+        public PropertyJacksonSerializer() {
+            super(Property.class);
+        }
+
+        @Override
+        public void serialize(final Property property, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
+                throws IOException {
+            jsonGenerator.writeStartObject();
+            jsonGenerator.writeObjectField(GraphSONTokens.KEY, property.key());
+            jsonGenerator.writeObjectField(GraphSONTokens.VALUE, property.value());
+            jsonGenerator.writeEndObject();
+        }
+    }
+
+    final static class VertexPropertyJacksonSerializer extends StdScalarSerializer<VertexProperty> {
+
+        private final boolean normalize;
+        private final boolean includeLabel;
+
+        public VertexPropertyJacksonSerializer(final boolean normalize, final boolean includeLabel) {
+            super(VertexProperty.class);
+            this.normalize = normalize;
+            this.includeLabel = includeLabel;
+        }
+
+        @Override
+        public void serialize(final VertexProperty property, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
+                throws IOException {
+            jsonGenerator.writeStartObject();
+
+            jsonGenerator.writeObjectField(GraphSONTokens.ID, property.id());
+            jsonGenerator.writeObjectField(GraphSONTokens.VALUE, property.value());
+            if (includeLabel)
+                jsonGenerator.writeStringField(GraphSONTokens.LABEL, property.label());
+            tryWriteMetaProperties(property, jsonGenerator, normalize);
+
+            jsonGenerator.writeEndObject();
+        }
+
+        private static void tryWriteMetaProperties(final VertexProperty property, final JsonGenerator jsonGenerator,
+                                                   final boolean normalize) throws IOException {
+            // when "detached" you can't check features of the graph it detached from so it has to be
+            // treated differently from a regular VertexProperty implementation.
+            if (property instanceof DetachedVertexProperty) {
+                // only write meta properties key if they exist
+                if (property.properties().hasNext()) {
+                    writeMetaProperties(property, jsonGenerator, normalize);
+                }
+            } else {
+                // still attached - so we can check the features to see if it's worth even trying to write the
+                // meta properties key
+                if (property.graph().features().vertex().supportsMetaProperties() && property.properties().hasNext()) {
+                    writeMetaProperties(property, jsonGenerator, normalize);
+                }
+            }
+        }
+
+        private static void writeMetaProperties(final VertexProperty property, final JsonGenerator jsonGenerator,
+                                                final boolean normalize) throws IOException {
+            jsonGenerator.writeFieldName(GraphSONTokens.PROPERTIES);
+            jsonGenerator.writeStartObject();
+
+            final Iterator<Property<Object>> metaProperties = normalize ?
+                    IteratorUtils.list((Iterator<Property<Object>>) property.properties(), Comparators.PROPERTY_COMPARATOR).iterator() : property.properties();
+            while (metaProperties.hasNext()) {
+                final Property<Object> metaProperty = metaProperties.next();
+                jsonGenerator.writeObjectField(metaProperty.key(), metaProperty.value());
+            }
+
+            jsonGenerator.writeEndObject();
+        }
+
+
+    }
+
+    final static class PathJacksonSerializer extends StdScalarSerializer<Path> {
+
+        public PathJacksonSerializer() {
+            super(Path.class);
+        }
+
+        @Override
+        public void serialize(final Path path, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
+                throws IOException, JsonGenerationException {
+            jsonGenerator.writeStartObject();
+
+            jsonGenerator.writeObjectField(GraphSONTokens.LABELS, path.labels());
+            jsonGenerator.writeObjectField(GraphSONTokens.OBJECTS, path.objects());
+
+            jsonGenerator.writeEndObject();
+        }
+    }
+
+    final static class TreeJacksonSerializer extends StdScalarSerializer<Tree> {
+
+        public TreeJacksonSerializer() {
+            super(Tree.class);
+        }
+
+        @Override
+        public void serialize(final Tree tree, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider) throws IOException, JsonGenerationException {
+            jsonGenerator.writeStartArray();
+            Set<Map.Entry<Element, Tree>> set = tree.entrySet();
+            for (Map.Entry<Element, Tree> entry : set) {
+                jsonGenerator.writeStartObject();
+                jsonGenerator.writeObjectField(GraphSONTokens.KEY, entry.getKey());
+                jsonGenerator.writeObjectField(GraphSONTokens.VALUE, entry.getValue());
+                jsonGenerator.writeEndObject();
+            }
+            jsonGenerator.writeEndArray();
+        }
+    }
+
+    final static class TraversalExplanationJacksonSerializer extends StdSerializer<TraversalExplanation> {
+        public TraversalExplanationJacksonSerializer() {
+            super(TraversalExplanation.class);
+        }
+
+        @Override
+        public void serialize(final TraversalExplanation traversalExplanation, final JsonGenerator jsonGenerator,
+                              final SerializerProvider serializerProvider) throws IOException {
+            final Map<String, Object> m = new HashMap<>();
+            m.put(GraphSONTokens.ORIGINAL, getStepsAsList(traversalExplanation.getOriginalTraversal()));
+
+            final List<Pair<TraversalStrategy, Traversal.Admin<?, ?>>> strategyTraversals = traversalExplanation.getStrategyTraversals();
+
+            final List<Map<String, Object>> intermediates = new ArrayList<>();
+            for (final Pair<TraversalStrategy, Traversal.Admin<?, ?>> pair : strategyTraversals) {
+                final Map<String, Object> intermediate = new HashMap<>();
+                intermediate.put(GraphSONTokens.STRATEGY, pair.getValue0().toString());
+                intermediate.put(GraphSONTokens.CATEGORY, pair.getValue0().getTraversalCategory().getSimpleName());
+                intermediate.put(GraphSONTokens.TRAVERSAL, getStepsAsList(pair.getValue1()));
+                intermediates.add(intermediate);
+            }
+            m.put(GraphSONTokens.INTERMEDIATE, intermediates);
+
+            if (strategyTraversals.isEmpty())
+                m.put(GraphSONTokens.FINAL, getStepsAsList(traversalExplanation.getOriginalTraversal()));
+            else
+                m.put(GraphSONTokens.FINAL, getStepsAsList(strategyTraversals.get(strategyTraversals.size() - 1).getValue1()));
+
+            jsonGenerator.writeObject(m);
+        }
+
+        private List<String> getStepsAsList(final Traversal.Admin<?, ?> t) {
+            final List<String> steps = new ArrayList<>();
+            t.getSteps().iterator().forEachRemaining(s -> steps.add(s.toString()));
+            return steps;
+        }
+    }
+
+    final static class IntegerGraphSONSerializer extends StdScalarSerializer<Integer> {
+        public IntegerGraphSONSerializer() {
+            super(Integer.class);
+        }
+
+        @Override
+        public void serialize(Integer integer, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
+            jsonGenerator.writeNumber(((Integer) integer).intValue());
+        }
+    }
+
+    final static class DoubleGraphSONSerializer extends StdScalarSerializer<Double> {
+        public DoubleGraphSONSerializer() {
+            super(Double.class);
+        }
+
+        @Override
+        public void serialize(Double doubleValue, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
+            jsonGenerator.writeNumber(doubleValue);
+        }
+    }
+
+    final static class TraversalMetricsJacksonSerializer extends StdScalarSerializer<TraversalMetrics> {
+        public TraversalMetricsJacksonSerializer() {
+            super(TraversalMetrics.class);
+        }
+
+        @Override
+        public void serialize(final TraversalMetrics traversalMetrics, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
+                throws IOException {
+            // creation of the map enables all the fields to be properly written with their type if required
+            final Map<String, Object> m = new HashMap<>();
+            m.put(GraphSONTokens.DURATION, traversalMetrics.getDuration(TimeUnit.NANOSECONDS) / 1000000d);
+            final List<Metrics> metrics = new ArrayList<>();
+            metrics.addAll(traversalMetrics.getMetrics());
+            m.put(GraphSONTokens.METRICS, metrics);
+
+            jsonGenerator.writeObject(m);
+        }
+    }
+
+    final static class MetricsJacksonSerializer extends StdScalarSerializer<Metrics> {
+        public MetricsJacksonSerializer() {
+            super(Metrics.class);
+        }
+
+        @Override
+        public void serialize(Metrics metrics, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
+            final Map<String, Object> m = new HashMap<>();
+            m.put(GraphSONTokens.ID, metrics.getId());
+            m.put(GraphSONTokens.NAME, metrics.getName());
+            m.put(GraphSONTokens.COUNTS, metrics.getCounts());
+            m.put(GraphSONTokens.DURATION, metrics.getDuration(TimeUnit.NANOSECONDS) / 1000000d);
+
+            if (!metrics.getAnnotations().isEmpty()) {
+                m.put(GraphSONTokens.ANNOTATIONS, metrics.getAnnotations());
+            }
+            if (!metrics.getNested().isEmpty()) {
+                final List<Metrics> nested = new ArrayList<>();
+                metrics.getNested().forEach(it -> nested.add(it));
+                m.put(GraphSONTokens.METRICS, nested);
+            }
+            jsonGenerator.writeObject(m);
+        }
+    }
+
+
+    /**
+     * Maps in the JVM can have {@link Object} as a key, but in JSON they must be a {@link String}.
+     */
+    final static class GraphSONKeySerializer extends StdKeySerializer {
+
+        @Override
+        public void serialize(final Object o, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider) throws IOException {
+            ser(o, jsonGenerator, serializerProvider);
+        }
+
+        @Override
+        public void serializeWithType(final Object o, final JsonGenerator jsonGenerator,
+                                      final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException {
+            ser(o, jsonGenerator, serializerProvider);
+        }
+
+        private void ser(final Object o, final JsonGenerator jsonGenerator,
+                         final SerializerProvider serializerProvider) throws IOException {
+            if (Element.class.isAssignableFrom(o.getClass()))
+                jsonGenerator.writeFieldName((((Element) o).id()).toString());
+            else
+                super.serialize(o, jsonGenerator, serializerProvider);
+        }
+    }
+
+
+    //////////////////////////// DESERIALIZERS ///////////////////////////
+
+    abstract static class AbstractGraphObjectDeserializer<T> extends StdDeserializer<T> {
+
+        protected AbstractGraphObjectDeserializer(Class<T> clazz) {
+            super(clazz);
+        }
+
+        @Override
+        public T deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
+
+            jsonParser.nextToken();
+            // This will automatically parse all typed stuff.
+            Map<String, Object> mapData = deserializationContext.readValue(jsonParser, Map.class);
+
+            return createObject(mapData);
+        }
+
+        abstract T createObject(Map<String, Object> data);
+    }
+
+
+    static class VertexJacksonDeserializer extends AbstractGraphObjectDeserializer<Vertex> {
+
+        public VertexJacksonDeserializer() {
+            super(Vertex.class);
+        }
+
+        @Override
+        Vertex createObject(Map<String, Object> vertexData) {
+            return new DetachedVertex(
+                    vertexData.get(GraphSONTokens.ID),
+                    vertexData.get(GraphSONTokens.LABEL).toString(),
+                    (Map<String, Object>) vertexData.get(GraphSONTokens.PROPERTIES)
+            );
+        }
+    }
+
+    static class EdgeJacksonDeserializer extends AbstractGraphObjectDeserializer<Edge> {
+
+        public EdgeJacksonDeserializer() {
+            super(Edge.class);
+        }
+
+        @Override
+        Edge createObject(Map<String, Object> edgeData) {
+            return new DetachedEdge(
+                    edgeData.get(GraphSONTokens.ID),
+                    edgeData.get(GraphSONTokens.LABEL).toString(),
+                    (Map) edgeData.get(GraphSONTokens.PROPERTIES),
+                    Pair.with(edgeData.get(GraphSONTokens.OUT), edgeData.get(GraphSONTokens.OUT_LABEL).toString()),
+                    Pair.with(edgeData.get(GraphSONTokens.IN), edgeData.get(GraphSONTokens.IN_LABEL).toString())
+            );
+        }
+    }
+
+    static class PropertyJacksonDeserializer extends AbstractGraphObjectDeserializer<Property> {
+
+        public PropertyJacksonDeserializer() {
+            super(Property.class);
+        }
+
+        @Override
+        Property createObject(Map<String, Object> propData) {
+            return new DetachedProperty(
+                    (String) propData.get(GraphSONTokens.KEY),
+                    propData.get(GraphSONTokens.VALUE));
+        }
+    }
+
+    static class PathJacksonDeserializer extends AbstractGraphObjectDeserializer<Path> {
+
+        public PathJacksonDeserializer() {
+            super(Path.class);
+        }
+
+        @Override
+        Path createObject(Map<String, Object> pathData) {
+            Path p = MutablePath.make();
+
+            List labels = (List) pathData.get(GraphSONTokens.LABELS);
+            List objects = (List) pathData.get(GraphSONTokens.OBJECTS);
+
+            for (int i = 0; i < objects.size(); i++) {
+                p.extend(objects.get(i), new HashSet((List) labels.get(i)));
+            }
+            return p;
+        }
+    }
+
+    static class VertexPropertyJacksonDeserializer extends AbstractGraphObjectDeserializer<VertexProperty> {
+
+        protected VertexPropertyJacksonDeserializer() {
+            super(VertexProperty.class);
+        }
+
+        @Override
+        VertexProperty createObject(Map<String, Object> propData) {
+            return new DetachedVertexProperty(
+                    propData.get(GraphSONTokens.ID),
+                    (String) propData.get(GraphSONTokens.LABEL),
+                    propData.get(GraphSONTokens.VALUE),
+                    (Map) propData.get(GraphSONTokens.PROPERTIES)
+            );
+        }
+    }
+
+    static class MetricsJacksonDeserializer extends AbstractGraphObjectDeserializer<Metrics> {
+        public MetricsJacksonDeserializer() {
+            super(Metrics.class);
+        }
+
+        @Override
+        Metrics createObject(Map<String, Object> metricsData) {
+            MutableMetrics m = new MutableMetrics((String)metricsData.get(GraphSONTokens.ID), (String)metricsData.get(GraphSONTokens.NAME));
+
+            m.setDuration(Math.round((Double) metricsData.get(GraphSONTokens.DURATION) * 1000000), TimeUnit.NANOSECONDS);
+            for (Map.Entry<String, Long> count : ((Map<String, Long>)metricsData.getOrDefault(GraphSONTokens.COUNTS, new HashMap<>(0))).entrySet()) {
+                m.setCount(count.getKey(), count.getValue());
+            }
+            for (Map.Entry<String, Long> count : ((Map<String, Long>) metricsData.getOrDefault(GraphSONTokens.ANNOTATIONS, new HashMap<>(0))).entrySet()) {
+                m.setAnnotation(count.getKey(), count.getValue());
+            }
+            for (MutableMetrics nested : (List<MutableMetrics>)metricsData.getOrDefault(GraphSONTokens.METRICS, new ArrayList<>(0))) {
+                m.addNested(nested);
+            }
+            return m;
+        }
+    }
+
+    static class TraversalMetricsJacksonDeserializer extends AbstractGraphObjectDeserializer<TraversalMetrics> {
+
+        public TraversalMetricsJacksonDeserializer() {
+            super(TraversalMetrics.class);
+        }
+
+        @Override
+        TraversalMetrics createObject(Map<String, Object> traversalMetricsData) {
+            return new DefaultTraversalMetrics(
+                    Math.round((Double) traversalMetricsData.get(GraphSONTokens.DURATION) * 1000000),
+                    (List<MutableMetrics>) traversalMetricsData.get(GraphSONTokens.METRICS)
+            );
+        }
+    }
+
+    static class TreeJacksonDeserializer extends StdDeserializer<Tree> {
+
+        public TreeJacksonDeserializer() {
+            super(Tree.class);
+        }
+
+        @Override
+        public Tree deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
+            List<Map> data = deserializationContext.readValue(jsonParser, List.class);
+            Tree t = new Tree();
+            for (Map<String, Object> entry : data) {
+                t.put(entry.get(GraphSONTokens.KEY), entry.get(GraphSONTokens.VALUE));
+            }
+            return t;
+        }
+    }
+}
+
+
+

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTokens.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTokens.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTokens.java
index a91c2d4..e24cbab 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTokens.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTokens.java
@@ -26,6 +26,8 @@ public final class GraphSONTokens {
     private GraphSONTokens() {}
 
     public static final String CLASS = "@class";
+    public static final String VALUETYPE = "@type";
+    public static final String VALUEPROP = "@value";
     public static final String ID = "id";
     public static final String TYPE = "type";
     public static final String VALUE = "value";
@@ -44,6 +46,7 @@ public final class GraphSONTokens {
     public static final String OBJECTS = "objects";
     public static final String IN_LABEL = "inVLabel";
     public static final String OUT_LABEL = "outVLabel";
+    public static final String GREMLIN_TYPE_NAMESPACE = "gremlin";
 
     // TraversalExplanation Tokens
     public static final String ORIGINAL = "original";


[25/48] tinkerpop git commit: TINKERPOP-1274: GraphSON 2.0.

Posted by sp...@apache.org.
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-classic-normalized-v2d0.json
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-classic-normalized-v2d0.json b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-classic-normalized-v2d0.json
new file mode 100644
index 0000000..cb08148
--- /dev/null
+++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-classic-normalized-v2d0.json
@@ -0,0 +1,6 @@
+{"id":1,"label":"vertex","outE":{"created":[{"id":9,"inV":3,"properties":{"weight":0.4}}],"knows":[{"id":7,"inV":2,"properties":{"weight":0.5}},{"id":8,"inV":4,"properties":{"weight":1.0}}]},"properties":{"age":[{"id":2,"value":29}],"name":[{"id":0,"value":"marko"}]}}
+{"id":2,"label":"vertex","inE":{"knows":[{"id":7,"outV":1,"properties":{"weight":0.5}}]},"properties":{"age":[{"id":4,"value":27}],"name":[{"id":3,"value":"vadas"}]}}
+{"id":3,"label":"vertex","inE":{"created":[{"id":11,"outV":4,"properties":{"weight":0.4}},{"id":12,"outV":6,"properties":{"weight":0.2}},{"id":9,"outV":1,"properties":{"weight":0.4}}]},"properties":{"lang":[{"id":6,"value":"java"}],"name":[{"id":5,"value":"lop"}]}}
+{"id":4,"label":"vertex","inE":{"knows":[{"id":8,"outV":1,"properties":{"weight":1.0}}]},"outE":{"created":[{"id":10,"inV":5,"properties":{"weight":1.0}},{"id":11,"inV":3,"properties":{"weight":0.4}}]},"properties":{"age":[{"id":8,"value":32}],"name":[{"id":7,"value":"josh"}]}}
+{"id":5,"label":"vertex","inE":{"created":[{"id":10,"outV":4,"properties":{"weight":1.0}}]},"properties":{"lang":[{"id":10,"value":"java"}],"name":[{"id":9,"value":"ripple"}]}}
+{"id":6,"label":"vertex","outE":{"created":[{"id":12,"inV":3,"properties":{"weight":0.2}}]},"properties":{"age":[{"id":12,"value":35}],"name":[{"id":11,"value":"peter"}]}}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-classic-v2d0-typed.json
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-classic-v2d0-typed.json b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-classic-v2d0-typed.json
new file mode 100644
index 0000000..56956ea
--- /dev/null
+++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-classic-v2d0-typed.json
@@ -0,0 +1,6 @@
+{"id":{"@type":"gremlin:int32","@value":1},"label":"vertex","outE":{"created":[{"id":{"@type":"gremlin:int32","@value":9},"inV":{"@type":"gremlin:int32","@value":3},"properties":{"weight":{"@type":"gremlin:float","@value":0.4}}}],"knows":[{"id":{"@type":"gremlin:int32","@value":7},"inV":{"@type":"gremlin:int32","@value":2},"properties":{"weight":{"@type":"gremlin:float","@value":0.5}}},{"id":{"@type":"gremlin:int32","@value":8},"inV":{"@type":"gremlin:int32","@value":4},"properties":{"weight":{"@type":"gremlin:float","@value":1.0}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int32","@value":0},"value":"marko"}],"age":[{"id":{"@type":"gremlin:int32","@value":2},"value":{"@type":"gremlin:int32","@value":29}}]}}
+{"id":{"@type":"gremlin:int32","@value":2},"label":"vertex","inE":{"knows":[{"id":{"@type":"gremlin:int32","@value":7},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"weight":{"@type":"gremlin:float","@value":0.5}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int32","@value":3},"value":"vadas"}],"age":[{"id":{"@type":"gremlin:int32","@value":4},"value":{"@type":"gremlin:int32","@value":27}}]}}
+{"id":{"@type":"gremlin:int32","@value":3},"label":"vertex","inE":{"created":[{"id":{"@type":"gremlin:int32","@value":9},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"weight":{"@type":"gremlin:float","@value":0.4}}},{"id":{"@type":"gremlin:int32","@value":11},"outV":{"@type":"gremlin:int32","@value":4},"properties":{"weight":{"@type":"gremlin:float","@value":0.4}}},{"id":{"@type":"gremlin:int32","@value":12},"outV":{"@type":"gremlin:int32","@value":6},"properties":{"weight":{"@type":"gremlin:float","@value":0.2}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int32","@value":5},"value":"lop"}],"lang":[{"id":{"@type":"gremlin:int32","@value":6},"value":"java"}]}}
+{"id":{"@type":"gremlin:int32","@value":4},"label":"vertex","inE":{"knows":[{"id":{"@type":"gremlin:int32","@value":8},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"weight":{"@type":"gremlin:float","@value":1.0}}}]},"outE":{"created":[{"id":{"@type":"gremlin:int32","@value":10},"inV":{"@type":"gremlin:int32","@value":5},"properties":{"weight":{"@type":"gremlin:float","@value":1.0}}},{"id":{"@type":"gremlin:int32","@value":11},"inV":{"@type":"gremlin:int32","@value":3},"properties":{"weight":{"@type":"gremlin:float","@value":0.4}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int32","@value":7},"value":"josh"}],"age":[{"id":{"@type":"gremlin:int32","@value":8},"value":{"@type":"gremlin:int32","@value":32}}]}}
+{"id":{"@type":"gremlin:int32","@value":5},"label":"vertex","inE":{"created":[{"id":{"@type":"gremlin:int32","@value":10},"outV":{"@type":"gremlin:int32","@value":4},"properties":{"weight":{"@type":"gremlin:float","@value":1.0}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int32","@value":9},"value":"ripple"}],"lang":[{"id":{"@type":"gremlin:int32","@value":10},"value":"java"}]}}
+{"id":{"@type":"gremlin:int32","@value":6},"label":"vertex","outE":{"created":[{"id":{"@type":"gremlin:int32","@value":12},"inV":{"@type":"gremlin:int32","@value":3},"properties":{"weight":{"@type":"gremlin:float","@value":0.2}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int32","@value":11},"value":"peter"}],"age":[{"id":{"@type":"gremlin:int32","@value":12},"value":{"@type":"gremlin:int32","@value":35}}]}}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-classic-v2d0.json
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-classic-v2d0.json b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-classic-v2d0.json
new file mode 100644
index 0000000..5ccfe05
--- /dev/null
+++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-classic-v2d0.json
@@ -0,0 +1,6 @@
+{"id":1,"label":"vertex","outE":{"created":[{"id":9,"inV":3,"properties":{"weight":0.4}}],"knows":[{"id":7,"inV":2,"properties":{"weight":0.5}},{"id":8,"inV":4,"properties":{"weight":1.0}}]},"properties":{"name":[{"id":0,"value":"marko"}],"age":[{"id":2,"value":29}]}}
+{"id":2,"label":"vertex","inE":{"knows":[{"id":7,"outV":1,"properties":{"weight":0.5}}]},"properties":{"name":[{"id":3,"value":"vadas"}],"age":[{"id":4,"value":27}]}}
+{"id":3,"label":"vertex","inE":{"created":[{"id":9,"outV":1,"properties":{"weight":0.4}},{"id":11,"outV":4,"properties":{"weight":0.4}},{"id":12,"outV":6,"properties":{"weight":0.2}}]},"properties":{"name":[{"id":5,"value":"lop"}],"lang":[{"id":6,"value":"java"}]}}
+{"id":4,"label":"vertex","inE":{"knows":[{"id":8,"outV":1,"properties":{"weight":1.0}}]},"outE":{"created":[{"id":10,"inV":5,"properties":{"weight":1.0}},{"id":11,"inV":3,"properties":{"weight":0.4}}]},"properties":{"name":[{"id":7,"value":"josh"}],"age":[{"id":8,"value":32}]}}
+{"id":5,"label":"vertex","inE":{"created":[{"id":10,"outV":4,"properties":{"weight":1.0}}]},"properties":{"name":[{"id":9,"value":"ripple"}],"lang":[{"id":10,"value":"java"}]}}
+{"id":6,"label":"vertex","outE":{"created":[{"id":12,"inV":3,"properties":{"weight":0.2}}]},"properties":{"name":[{"id":11,"value":"peter"}],"age":[{"id":12,"value":35}]}}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-crew-v2d0-typed.json
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-crew-v2d0-typed.json b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-crew-v2d0-typed.json
new file mode 100644
index 0000000..e688520
--- /dev/null
+++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-crew-v2d0-typed.json
@@ -0,0 +1,6 @@
+{"id":{"@type":"gremlin:int32","@value":1},"label":"person","outE":{"uses":[{"id":{"@type":"gremlin:int32","@value":16},"inV":{"@type":"gremlin:int32","@value":11},"properties":{"skill":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":15},"inV":{"@type":"gremlin:int32","@value":10},"properties":{"skill":{"@type":"gremlin:int32","@value":4}}}],"develops":[{"id":{"@type":"gremlin:int32","@value":13},"inV":{"@type":"gremlin:int32","@value":10},"properties":{"since":{"@type":"gremlin:int32","@value":2009}}},{"id":{"@type":"gremlin:int32","@value":14},"inV":{"@type":"gremlin:int32","@value":11},"properties":{"since":{"@type":"gremlin:int32","@value":2010}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":0},"value":"marko"}],"location":[{"id":{"@type":"gremlin:int64","@value":6},"value":"san diego","properties":{"startTime":{"@type":"gremlin:int32","@value":1997},"endTime":{"@type":"gremlin:int32","@value":2001}}},{"id":{"@type":"gremlin:int6
 4","@value":7},"value":"santa cruz","properties":{"startTime":{"@type":"gremlin:int32","@value":2001},"endTime":{"@type":"gremlin:int32","@value":2004}}},{"id":{"@type":"gremlin:int64","@value":8},"value":"brussels","properties":{"startTime":{"@type":"gremlin:int32","@value":2004},"endTime":{"@type":"gremlin:int32","@value":2005}}},{"id":{"@type":"gremlin:int64","@value":9},"value":"santa fe","properties":{"startTime":{"@type":"gremlin:int32","@value":2005}}}]}}
+{"id":{"@type":"gremlin:int32","@value":7},"label":"person","outE":{"uses":[{"id":{"@type":"gremlin:int32","@value":19},"inV":{"@type":"gremlin:int32","@value":10},"properties":{"skill":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":20},"inV":{"@type":"gremlin:int32","@value":11},"properties":{"skill":{"@type":"gremlin:int32","@value":4}}}],"develops":[{"id":{"@type":"gremlin:int32","@value":17},"inV":{"@type":"gremlin:int32","@value":10},"properties":{"since":{"@type":"gremlin:int32","@value":2010}}},{"id":{"@type":"gremlin:int32","@value":18},"inV":{"@type":"gremlin:int32","@value":11},"properties":{"since":{"@type":"gremlin:int32","@value":2011}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":1},"value":"stephen"}],"location":[{"id":{"@type":"gremlin:int64","@value":10},"value":"centreville","properties":{"startTime":{"@type":"gremlin:int32","@value":1990},"endTime":{"@type":"gremlin:int32","@value":2000}}},{"id":{"@type":"gremlin
 :int64","@value":11},"value":"dulles","properties":{"startTime":{"@type":"gremlin:int32","@value":2000},"endTime":{"@type":"gremlin:int32","@value":2006}}},{"id":{"@type":"gremlin:int64","@value":12},"value":"purcellville","properties":{"startTime":{"@type":"gremlin:int32","@value":2006}}}]}}
+{"id":{"@type":"gremlin:int32","@value":8},"label":"person","outE":{"uses":[{"id":{"@type":"gremlin:int32","@value":22},"inV":{"@type":"gremlin:int32","@value":10},"properties":{"skill":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":23},"inV":{"@type":"gremlin:int32","@value":11},"properties":{"skill":{"@type":"gremlin:int32","@value":3}}}],"develops":[{"id":{"@type":"gremlin:int32","@value":21},"inV":{"@type":"gremlin:int32","@value":10},"properties":{"since":{"@type":"gremlin:int32","@value":2012}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":2},"value":"matthias"}],"location":[{"id":{"@type":"gremlin:int64","@value":13},"value":"bremen","properties":{"startTime":{"@type":"gremlin:int32","@value":2004},"endTime":{"@type":"gremlin:int32","@value":2007}}},{"id":{"@type":"gremlin:int64","@value":14},"value":"baltimore","properties":{"startTime":{"@type":"gremlin:int32","@value":2007},"endTime":{"@type":"gremlin:int32","@value":2011}
 }},{"id":{"@type":"gremlin:int64","@value":15},"value":"oakland","properties":{"startTime":{"@type":"gremlin:int32","@value":2011},"endTime":{"@type":"gremlin:int32","@value":2014}}},{"id":{"@type":"gremlin:int64","@value":16},"value":"seattle","properties":{"startTime":{"@type":"gremlin:int32","@value":2014}}}]}}
+{"id":{"@type":"gremlin:int32","@value":9},"label":"person","outE":{"uses":[{"id":{"@type":"gremlin:int32","@value":24},"inV":{"@type":"gremlin:int32","@value":10},"properties":{"skill":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":25},"inV":{"@type":"gremlin:int32","@value":11},"properties":{"skill":{"@type":"gremlin:int32","@value":3}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":3},"value":"daniel"}],"location":[{"id":{"@type":"gremlin:int64","@value":17},"value":"spremberg","properties":{"startTime":{"@type":"gremlin:int32","@value":1982},"endTime":{"@type":"gremlin:int32","@value":2005}}},{"id":{"@type":"gremlin:int64","@value":18},"value":"kaiserslautern","properties":{"startTime":{"@type":"gremlin:int32","@value":2005},"endTime":{"@type":"gremlin:int32","@value":2009}}},{"id":{"@type":"gremlin:int64","@value":19},"value":"aachen","properties":{"startTime":{"@type":"gremlin:int32","@value":2009}}}]}}
+{"id":{"@type":"gremlin:int32","@value":10},"label":"software","inE":{"uses":[{"id":{"@type":"gremlin:int32","@value":19},"outV":{"@type":"gremlin:int32","@value":7},"properties":{"skill":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":22},"outV":{"@type":"gremlin:int32","@value":8},"properties":{"skill":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":24},"outV":{"@type":"gremlin:int32","@value":9},"properties":{"skill":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":15},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"skill":{"@type":"gremlin:int32","@value":4}}}],"develops":[{"id":{"@type":"gremlin:int32","@value":17},"outV":{"@type":"gremlin:int32","@value":7},"properties":{"since":{"@type":"gremlin:int32","@value":2010}}},{"id":{"@type":"gremlin:int32","@value":21},"outV":{"@type":"gremlin:int32","@value":8},"properties":{"since":{"@type":"gremlin:int32","@value":2012}}},{"id":
 {"@type":"gremlin:int32","@value":13},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"since":{"@type":"gremlin:int32","@value":2009}}}]},"outE":{"traverses":[{"id":{"@type":"gremlin:int32","@value":26},"inV":{"@type":"gremlin:int32","@value":11}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":4},"value":"gremlin"}]}}
+{"id":{"@type":"gremlin:int32","@value":11},"label":"software","inE":{"traverses":[{"id":{"@type":"gremlin:int32","@value":26},"outV":{"@type":"gremlin:int32","@value":10}}],"uses":[{"id":{"@type":"gremlin:int32","@value":16},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"skill":{"@type":"gremlin:int32","@value":5}}},{"id":{"@type":"gremlin:int32","@value":20},"outV":{"@type":"gremlin:int32","@value":7},"properties":{"skill":{"@type":"gremlin:int32","@value":4}}},{"id":{"@type":"gremlin:int32","@value":23},"outV":{"@type":"gremlin:int32","@value":8},"properties":{"skill":{"@type":"gremlin:int32","@value":3}}},{"id":{"@type":"gremlin:int32","@value":25},"outV":{"@type":"gremlin:int32","@value":9},"properties":{"skill":{"@type":"gremlin:int32","@value":3}}}],"develops":[{"id":{"@type":"gremlin:int32","@value":18},"outV":{"@type":"gremlin:int32","@value":7},"properties":{"since":{"@type":"gremlin:int32","@value":2011}}},{"id":{"@type":"gremlin:int32","@value":14},"outV":{"@
 type":"gremlin:int32","@value":1},"properties":{"since":{"@type":"gremlin:int32","@value":2010}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":5},"value":"tinkergraph"}]}}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-crew-v2d0.json
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-crew-v2d0.json b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-crew-v2d0.json
new file mode 100644
index 0000000..2165e4d
--- /dev/null
+++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-crew-v2d0.json
@@ -0,0 +1,6 @@
+{"id":1,"label":"person","outE":{"uses":[{"id":16,"inV":11,"properties":{"skill":5}},{"id":15,"inV":10,"properties":{"skill":4}}],"develops":[{"id":13,"inV":10,"properties":{"since":2009}},{"id":14,"inV":11,"properties":{"since":2010}}]},"properties":{"name":[{"id":0,"value":"marko"}],"location":[{"id":6,"value":"san diego","properties":{"startTime":1997,"endTime":2001}},{"id":7,"value":"santa cruz","properties":{"startTime":2001,"endTime":2004}},{"id":8,"value":"brussels","properties":{"startTime":2004,"endTime":2005}},{"id":9,"value":"santa fe","properties":{"startTime":2005}}]}}
+{"id":7,"label":"person","outE":{"uses":[{"id":19,"inV":10,"properties":{"skill":5}},{"id":20,"inV":11,"properties":{"skill":4}}],"develops":[{"id":17,"inV":10,"properties":{"since":2010}},{"id":18,"inV":11,"properties":{"since":2011}}]},"properties":{"name":[{"id":1,"value":"stephen"}],"location":[{"id":10,"value":"centreville","properties":{"startTime":1990,"endTime":2000}},{"id":11,"value":"dulles","properties":{"startTime":2000,"endTime":2006}},{"id":12,"value":"purcellville","properties":{"startTime":2006}}]}}
+{"id":8,"label":"person","outE":{"uses":[{"id":22,"inV":10,"properties":{"skill":3}},{"id":23,"inV":11,"properties":{"skill":3}}],"develops":[{"id":21,"inV":10,"properties":{"since":2012}}]},"properties":{"name":[{"id":2,"value":"matthias"}],"location":[{"id":13,"value":"bremen","properties":{"startTime":2004,"endTime":2007}},{"id":14,"value":"baltimore","properties":{"startTime":2007,"endTime":2011}},{"id":15,"value":"oakland","properties":{"startTime":2011,"endTime":2014}},{"id":16,"value":"seattle","properties":{"startTime":2014}}]}}
+{"id":9,"label":"person","outE":{"uses":[{"id":24,"inV":10,"properties":{"skill":5}},{"id":25,"inV":11,"properties":{"skill":3}}]},"properties":{"name":[{"id":3,"value":"daniel"}],"location":[{"id":17,"value":"spremberg","properties":{"startTime":1982,"endTime":2005}},{"id":18,"value":"kaiserslautern","properties":{"startTime":2005,"endTime":2009}},{"id":19,"value":"aachen","properties":{"startTime":2009}}]}}
+{"id":10,"label":"software","inE":{"uses":[{"id":19,"outV":7,"properties":{"skill":5}},{"id":22,"outV":8,"properties":{"skill":3}},{"id":24,"outV":9,"properties":{"skill":5}},{"id":15,"outV":1,"properties":{"skill":4}}],"develops":[{"id":17,"outV":7,"properties":{"since":2010}},{"id":21,"outV":8,"properties":{"since":2012}},{"id":13,"outV":1,"properties":{"since":2009}}]},"outE":{"traverses":[{"id":26,"inV":11}]},"properties":{"name":[{"id":4,"value":"gremlin"}]}}
+{"id":11,"label":"software","inE":{"traverses":[{"id":26,"outV":10}],"uses":[{"id":16,"outV":1,"properties":{"skill":5}},{"id":20,"outV":7,"properties":{"skill":4}},{"id":23,"outV":8,"properties":{"skill":3}},{"id":25,"outV":9,"properties":{"skill":3}}],"develops":[{"id":18,"outV":7,"properties":{"since":2011}},{"id":14,"outV":1,"properties":{"since":2010}}]},"properties":{"name":[{"id":5,"value":"tinkergraph"}]}}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-modern-normalized-v2d0.json
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-modern-normalized-v2d0.json b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-modern-normalized-v2d0.json
new file mode 100644
index 0000000..8c259ea
--- /dev/null
+++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-modern-normalized-v2d0.json
@@ -0,0 +1,6 @@
+{"id":1,"label":"person","outE":{"created":[{"id":9,"inV":3,"properties":{"weight":0.4}}],"knows":[{"id":7,"inV":2,"properties":{"weight":0.5}},{"id":8,"inV":4,"properties":{"weight":1.0}}]},"properties":{"age":[{"id":1,"value":29}],"name":[{"id":0,"value":"marko"}]}}
+{"id":2,"label":"person","inE":{"knows":[{"id":7,"outV":1,"properties":{"weight":0.5}}]},"properties":{"age":[{"id":3,"value":27}],"name":[{"id":2,"value":"vadas"}]}}
+{"id":3,"label":"software","inE":{"created":[{"id":11,"outV":4,"properties":{"weight":0.4}},{"id":12,"outV":6,"properties":{"weight":0.2}},{"id":9,"outV":1,"properties":{"weight":0.4}}]},"properties":{"lang":[{"id":5,"value":"java"}],"name":[{"id":4,"value":"lop"}]}}
+{"id":4,"label":"person","inE":{"knows":[{"id":8,"outV":1,"properties":{"weight":1.0}}]},"outE":{"created":[{"id":10,"inV":5,"properties":{"weight":1.0}},{"id":11,"inV":3,"properties":{"weight":0.4}}]},"properties":{"age":[{"id":7,"value":32}],"name":[{"id":6,"value":"josh"}]}}
+{"id":5,"label":"software","inE":{"created":[{"id":10,"outV":4,"properties":{"weight":1.0}}]},"properties":{"lang":[{"id":9,"value":"java"}],"name":[{"id":8,"value":"ripple"}]}}
+{"id":6,"label":"person","outE":{"created":[{"id":12,"inV":3,"properties":{"weight":0.2}}]},"properties":{"age":[{"id":11,"value":35}],"name":[{"id":10,"value":"peter"}]}}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-modern-v2d0-typed.json
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-modern-v2d0-typed.json b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-modern-v2d0-typed.json
new file mode 100644
index 0000000..9a297c3
--- /dev/null
+++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-modern-v2d0-typed.json
@@ -0,0 +1,6 @@
+{"id":{"@type":"gremlin:int32","@value":1},"label":"person","outE":{"created":[{"id":{"@type":"gremlin:int32","@value":9},"inV":{"@type":"gremlin:int32","@value":3},"properties":{"weight":{"@type":"gremlin:double","@value":0.4}}}],"knows":[{"id":{"@type":"gremlin:int32","@value":7},"inV":{"@type":"gremlin:int32","@value":2},"properties":{"weight":{"@type":"gremlin:double","@value":0.5}}},{"id":{"@type":"gremlin:int32","@value":8},"inV":{"@type":"gremlin:int32","@value":4},"properties":{"weight":{"@type":"gremlin:double","@value":1.0}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":0},"value":"marko"}],"age":[{"id":{"@type":"gremlin:int64","@value":1},"value":{"@type":"gremlin:int32","@value":29}}]}}
+{"id":{"@type":"gremlin:int32","@value":2},"label":"person","inE":{"knows":[{"id":{"@type":"gremlin:int32","@value":7},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"weight":{"@type":"gremlin:double","@value":0.5}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":2},"value":"vadas"}],"age":[{"id":{"@type":"gremlin:int64","@value":3},"value":{"@type":"gremlin:int32","@value":27}}]}}
+{"id":{"@type":"gremlin:int32","@value":3},"label":"software","inE":{"created":[{"id":{"@type":"gremlin:int32","@value":9},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"weight":{"@type":"gremlin:double","@value":0.4}}},{"id":{"@type":"gremlin:int32","@value":11},"outV":{"@type":"gremlin:int32","@value":4},"properties":{"weight":{"@type":"gremlin:double","@value":0.4}}},{"id":{"@type":"gremlin:int32","@value":12},"outV":{"@type":"gremlin:int32","@value":6},"properties":{"weight":{"@type":"gremlin:double","@value":0.2}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":4},"value":"lop"}],"lang":[{"id":{"@type":"gremlin:int64","@value":5},"value":"java"}]}}
+{"id":{"@type":"gremlin:int32","@value":4},"label":"person","inE":{"knows":[{"id":{"@type":"gremlin:int32","@value":8},"outV":{"@type":"gremlin:int32","@value":1},"properties":{"weight":{"@type":"gremlin:double","@value":1.0}}}]},"outE":{"created":[{"id":{"@type":"gremlin:int32","@value":10},"inV":{"@type":"gremlin:int32","@value":5},"properties":{"weight":{"@type":"gremlin:double","@value":1.0}}},{"id":{"@type":"gremlin:int32","@value":11},"inV":{"@type":"gremlin:int32","@value":3},"properties":{"weight":{"@type":"gremlin:double","@value":0.4}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":6},"value":"josh"}],"age":[{"id":{"@type":"gremlin:int64","@value":7},"value":{"@type":"gremlin:int32","@value":32}}]}}
+{"id":{"@type":"gremlin:int32","@value":5},"label":"software","inE":{"created":[{"id":{"@type":"gremlin:int32","@value":10},"outV":{"@type":"gremlin:int32","@value":4},"properties":{"weight":{"@type":"gremlin:double","@value":1.0}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":8},"value":"ripple"}],"lang":[{"id":{"@type":"gremlin:int64","@value":9},"value":"java"}]}}
+{"id":{"@type":"gremlin:int32","@value":6},"label":"person","outE":{"created":[{"id":{"@type":"gremlin:int32","@value":12},"inV":{"@type":"gremlin:int32","@value":3},"properties":{"weight":{"@type":"gremlin:double","@value":0.2}}}]},"properties":{"name":[{"id":{"@type":"gremlin:int64","@value":10},"value":"peter"}],"age":[{"id":{"@type":"gremlin:int64","@value":11},"value":{"@type":"gremlin:int32","@value":35}}]}}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-modern-v2d0.json
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-modern-v2d0.json b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-modern-v2d0.json
new file mode 100644
index 0000000..18c265d
--- /dev/null
+++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-modern-v2d0.json
@@ -0,0 +1,6 @@
+{"id":1,"label":"person","outE":{"created":[{"id":9,"inV":3,"properties":{"weight":0.4}}],"knows":[{"id":7,"inV":2,"properties":{"weight":0.5}},{"id":8,"inV":4,"properties":{"weight":1.0}}]},"properties":{"name":[{"id":0,"value":"marko"}],"age":[{"id":1,"value":29}]}}
+{"id":2,"label":"person","inE":{"knows":[{"id":7,"outV":1,"properties":{"weight":0.5}}]},"properties":{"name":[{"id":2,"value":"vadas"}],"age":[{"id":3,"value":27}]}}
+{"id":3,"label":"software","inE":{"created":[{"id":9,"outV":1,"properties":{"weight":0.4}},{"id":11,"outV":4,"properties":{"weight":0.4}},{"id":12,"outV":6,"properties":{"weight":0.2}}]},"properties":{"name":[{"id":4,"value":"lop"}],"lang":[{"id":5,"value":"java"}]}}
+{"id":4,"label":"person","inE":{"knows":[{"id":8,"outV":1,"properties":{"weight":1.0}}]},"outE":{"created":[{"id":10,"inV":5,"properties":{"weight":1.0}},{"id":11,"inV":3,"properties":{"weight":0.4}}]},"properties":{"name":[{"id":6,"value":"josh"}],"age":[{"id":7,"value":32}]}}
+{"id":5,"label":"software","inE":{"created":[{"id":10,"outV":4,"properties":{"weight":1.0}}]},"properties":{"name":[{"id":8,"value":"ripple"}],"lang":[{"id":9,"value":"java"}]}}
+{"id":6,"label":"person","outE":{"created":[{"id":12,"inV":3,"properties":{"weight":0.2}}]},"properties":{"name":[{"id":10,"value":"peter"}],"age":[{"id":11,"value":35}]}}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/tinkergraph-gremlin/pom.xml
----------------------------------------------------------------------
diff --git a/tinkergraph-gremlin/pom.xml b/tinkergraph-gremlin/pom.xml
index 4ee4878..85f7cc9 100644
--- a/tinkergraph-gremlin/pom.xml
+++ b/tinkergraph-gremlin/pom.xml
@@ -76,7 +76,7 @@ limitations under the License.
             </activation>
 
             <properties>
-                <io.tmp.dir>${project.build.directory}/tinkerpop-io</io.tmp.dir>
+                <io.tmp.dir>${project.build.directory}/test-case-data/TinkerGraphTest/tinkerpop-io</io.tmp.dir>
             </properties>
 
             <build>
@@ -115,7 +115,7 @@ limitations under the License.
                                             <directory>${io.tmp.dir}</directory>
                                             <filtering>false</filtering>
                                             <excludes>
-                                                <exclude>**/*-normalized.json</exclude>
+                                                <exclude>**/*-normalized*.json</exclude>
                                                 <exclude>**/sample.kryo</exclude>
                                             </excludes>
                                         </resource>

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerIoRegistryV2d0.java
----------------------------------------------------------------------
diff --git a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerIoRegistryV2d0.java b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerIoRegistryV2d0.java
new file mode 100644
index 0000000..97c1cba
--- /dev/null
+++ b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerIoRegistryV2d0.java
@@ -0,0 +1,213 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.tinkergraph.structure;
+
+import org.apache.tinkerpop.gremlin.structure.Edge;
+import org.apache.tinkerpop.gremlin.structure.Vertex;
+import org.apache.tinkerpop.gremlin.structure.io.AbstractIoRegistry;
+import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONIo;
+import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONTokens;
+import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONUtil;
+import org.apache.tinkerpop.gremlin.structure.io.graphson.TinkerPopJacksonModule;
+import org.apache.tinkerpop.gremlin.structure.io.gryo.GryoIo;
+import org.apache.tinkerpop.gremlin.structure.io.gryo.GryoReader;
+import org.apache.tinkerpop.gremlin.structure.io.gryo.GryoWriter;
+import org.apache.tinkerpop.gremlin.structure.util.Attachable;
+import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedEdge;
+import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedVertex;
+import org.apache.tinkerpop.shaded.jackson.core.JsonGenerator;
+import org.apache.tinkerpop.shaded.jackson.core.JsonParser;
+import org.apache.tinkerpop.shaded.jackson.core.JsonProcessingException;
+import org.apache.tinkerpop.shaded.jackson.databind.DeserializationContext;
+import org.apache.tinkerpop.shaded.jackson.databind.SerializerProvider;
+import org.apache.tinkerpop.shaded.jackson.databind.deser.std.StdDeserializer;
+import org.apache.tinkerpop.shaded.jackson.databind.jsontype.TypeSerializer;
+import org.apache.tinkerpop.shaded.jackson.databind.ser.std.StdScalarSerializer;
+import org.apache.tinkerpop.shaded.jackson.databind.ser.std.StdSerializer;
+import org.apache.tinkerpop.shaded.kryo.Kryo;
+import org.apache.tinkerpop.shaded.kryo.Serializer;
+import org.apache.tinkerpop.shaded.kryo.io.Input;
+import org.apache.tinkerpop.shaded.kryo.io.Output;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * An implementation of the {@link org.apache.tinkerpop.gremlin.structure.io.IoRegistry} interface that provides serializers with custom configurations for
+ * implementation specific classes that might need to be serialized.  This registry allows a {@link org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraph} to
+ * be serialized directly which is useful for moving small graphs around on the network.
+ * <p/>
+ * Most providers need not implement this kind of custom serializer as they will deal with much larger graphs that
+ * wouldn't be practical to serialize in this fashion.  This is a bit of a special case for TinkerGraph given its
+ * in-memory status.  Typical implementations would create serializers for a complex vertex identifier or a
+ * custom data class like a "geographic point".
+ *
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ */
+public final class TinkerIoRegistryV2d0 extends AbstractIoRegistry {
+
+    private static final TinkerIoRegistryV2d0 INSTANCE = new TinkerIoRegistryV2d0();
+
+    private TinkerIoRegistryV2d0() {
+        register(GryoIo.class, TinkerGraph.class, new TinkerGraphGryoSerializer());
+        register(GraphSONIo.class, null, new TinkerModuleV2d0());
+    }
+
+    public static TinkerIoRegistryV2d0 getInstance() {
+        return INSTANCE;
+    }
+
+    /**
+     * Provides a method to serialize an entire {@link org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraph} into itself for Gryo.  This is useful when
+     * shipping small graphs around through Gremlin Server. Reuses the existing Kryo instance for serialization.
+     */
+    final static class TinkerGraphGryoSerializer extends Serializer<TinkerGraph> {
+        @Override
+        public void write(final Kryo kryo, final Output output, final TinkerGraph graph) {
+            try (final ByteArrayOutputStream stream = new ByteArrayOutputStream()) {
+                GryoWriter.build().mapper(() -> kryo).create().writeGraph(stream, graph);
+                final byte[] bytes = stream.toByteArray();
+                output.writeInt(bytes.length);
+                output.write(bytes);
+            } catch (Exception io) {
+                throw new RuntimeException(io);
+            }
+        }
+
+        @Override
+        public TinkerGraph read(final Kryo kryo, final Input input, final Class<TinkerGraph> tinkerGraphClass) {
+            final TinkerGraph graph = TinkerGraph.open();
+            final int len = input.readInt();
+            final byte[] bytes = input.readBytes(len);
+            try (final ByteArrayInputStream stream = new ByteArrayInputStream(bytes)) {
+                GryoReader.build().mapper(() -> kryo).create().readGraph(stream, graph);
+            } catch (Exception io) {
+                throw new RuntimeException(io);
+            }
+
+            return graph;
+        }
+    }
+
+    /**
+     * Provides a method to serialize an entire {@link org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraph} into itself for GraphSON. This is useful when
+     * shipping small graphs around through Gremlin Server.
+     */
+    final static class TinkerModuleV2d0 extends TinkerPopJacksonModule {
+        public TinkerModuleV2d0() {
+            super("tinkergraph-2.0");
+            addSerializer(TinkerGraph.class, new TinkerGraphJacksonSerializer());
+            addDeserializer(TinkerGraph.class, new TinkerGraphJacksonDeserializer());
+        }
+
+        @Override
+        public Map<Class, String> getTypeDefinitions() {
+            return new HashMap<Class, String>(){{
+                put(TinkerGraph.class, "graph");
+            }};
+        }
+
+        @Override
+        public String getTypeNamespace() {
+            return "gremlin";
+        }
+    }
+
+    /**
+     * Serializes the graph into an edge list format.  Edge list is a better choices than adjacency list (which is
+     * typically standard from the {@link org.apache.tinkerpop.gremlin.structure.io.GraphReader} and {@link org.apache.tinkerpop.gremlin.structure.io.GraphWriter} perspective) in this case because
+     * the use case for this isn't around massive graphs.  The use case is for "small" subgraphs that are being
+     * shipped over the wire from Gremlin Server. Edge list format is a bit easier for non-JVM languages to work
+     * with as a format and doesn't require a cache for loading (as vertex labels are not serialized in adjacency
+     * list).
+     */
+    final static class TinkerGraphJacksonSerializer extends StdScalarSerializer<TinkerGraph> {
+
+        public TinkerGraphJacksonSerializer() {
+            super(TinkerGraph.class);
+        }
+
+        @Override
+        public void serialize(final TinkerGraph graph, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
+                throws IOException {
+            jsonGenerator.writeStartObject();
+            jsonGenerator.writeFieldName(GraphSONTokens.VERTICES);
+            jsonGenerator.writeStartArray();
+
+            final Iterator<Vertex> vertices = graph.vertices();
+            while (vertices.hasNext()) {
+                serializerProvider.defaultSerializeValue(vertices.next(), jsonGenerator);
+            }
+
+            jsonGenerator.writeEndArray();
+            jsonGenerator.writeFieldName(GraphSONTokens.EDGES);
+            jsonGenerator.writeStartArray();
+
+            final Iterator<Edge> edges = graph.edges();
+            while (edges.hasNext()) {
+                serializerProvider.defaultSerializeValue(edges.next(), jsonGenerator);
+            }
+
+            jsonGenerator.writeEndArray();
+            jsonGenerator.writeEndObject();
+        }
+    }
+
+    /**
+     * Deserializes the edge list format.
+     */
+    static class TinkerGraphJacksonDeserializer extends StdDeserializer<TinkerGraph> {
+        public TinkerGraphJacksonDeserializer() {
+            super(TinkerGraph.class);
+        }
+
+        @Override
+        public TinkerGraph deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
+            final TinkerGraph graph = TinkerGraph.open();
+
+            final List<? extends Edge> edges;
+            final List<? extends Vertex> vertices;
+
+            jsonParser.nextToken();
+            final Map<String, Object> graphData = deserializationContext.readValue(jsonParser, Map.class);
+            vertices = (List<DetachedVertex>) graphData.get(GraphSONTokens.VERTICES);
+            edges = (List<DetachedEdge>) graphData.get(GraphSONTokens.EDGES);
+
+
+            vertices.forEach(e -> {
+                if (e instanceof DetachedVertex) {
+                    ((DetachedVertex)e).attach(Attachable.Method.getOrCreate(graph));
+                }
+            });
+
+            edges.forEach(e -> {
+                if (e instanceof DetachedEdge) {
+                    ((DetachedEdge) e).attach(Attachable.Method.getOrCreate(graph));
+                }
+            });
+
+            return graph;
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/IoDataGenerationTest.java
----------------------------------------------------------------------
diff --git a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/IoDataGenerationTest.java b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/IoDataGenerationTest.java
index 86fc733..d07105b 100644
--- a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/IoDataGenerationTest.java
+++ b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/IoDataGenerationTest.java
@@ -30,7 +30,9 @@ import org.apache.tinkerpop.gremlin.structure.Vertex;
 import org.apache.tinkerpop.gremlin.structure.io.GraphReader;
 import org.apache.tinkerpop.gremlin.structure.io.graphml.GraphMLWriter;
 import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONMapper;
+import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONVersion;
 import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONWriter;
+import org.apache.tinkerpop.gremlin.structure.io.graphson.TypeInfo;
 import org.apache.tinkerpop.gremlin.structure.io.gryo.GryoReader;
 import org.apache.tinkerpop.gremlin.structure.io.gryo.GryoWriter;
 import org.junit.BeforeClass;
@@ -49,7 +51,7 @@ import java.util.stream.IntStream;
  * @author Stephen Mallette (http://stephen.genoprime.com)
  */
 public class IoDataGenerationTest {
-    private static String tempPath;
+    private static final String tempPath;
 
     static {
         tempPath = TestHelper.makeTestDataPath(TinkerGraphTest.class, "tinkerpop-io").getPath() + File.separator;
@@ -195,6 +197,94 @@ public class IoDataGenerationTest {
         os.close();
     }
 
+    /**
+     * No assertions.  Just write out the graph for convenience.
+     */
+    @Test
+    public void shouldWriteClassicGraphAsGraphSONV2d0NoTypes() throws IOException {
+        final OutputStream os = new FileOutputStream(tempPath + "tinkerpop-classic-v2d0.json");
+        GraphSONWriter.build().mapper(GraphSONMapper.build().version(GraphSONVersion.V2_0).typeInfo(TypeInfo.NO_TYPES).create()).create()
+                .writeGraph(os, TinkerFactory.createClassic());
+        os.close();
+    }
+
+    /**
+     * No assertions.  Just write out the graph for convenience.
+     */
+    @Test
+    public void shouldWriteModernGraphAsGraphSOV2d0NNoTypes() throws IOException {
+        final OutputStream os = new FileOutputStream(tempPath + "tinkerpop-modern-v2d0.json");
+        GraphSONWriter.build().mapper(GraphSONMapper.build().version(GraphSONVersion.V2_0).typeInfo(TypeInfo.NO_TYPES).create()).create()
+                .writeGraph(os, TinkerFactory.createModern());
+        os.close();
+    }
+
+    /**
+     * No assertions.  Just write out the graph for convenience.
+     */
+    @Test
+    public void shouldWriteCrewGraphAsGraphSONV2d0NoTypes() throws IOException {
+        final OutputStream os = new FileOutputStream(tempPath + "tinkerpop-crew-v2d0.json");
+        GraphSONWriter.build().mapper(GraphSONMapper.build().version(GraphSONVersion.V2_0).typeInfo(TypeInfo.NO_TYPES).create()).create()
+                .writeGraph(os, TinkerFactory.createTheCrew());
+        os.close();
+    }
+
+    /**
+     * No assertions.  Just write out the graph for convenience.
+     */
+    @Test
+    public void shouldWriteClassicGraphNormalizedAsGraphSONV2d0() throws IOException {
+        final OutputStream os = new FileOutputStream(tempPath + "tinkerpop-classic-normalized-v2d0.json");
+        GraphSONWriter.build().mapper(GraphSONMapper.build().version(GraphSONVersion.V2_0).typeInfo(TypeInfo.NO_TYPES).normalize(true).create()).create()
+                .writeGraph(os, TinkerFactory.createClassic());
+        os.close();
+    }
+
+    /**
+     * No assertions.  Just write out the graph for convenience.
+     */
+    @Test
+    public void shouldWriteModernGraphNormalizedAsGraphSONV2d0() throws IOException {
+        final OutputStream os = new FileOutputStream(tempPath + "tinkerpop-modern-normalized-v2d0.json");
+        GraphSONWriter.build().mapper(GraphSONMapper.build().version(GraphSONVersion.V2_0).typeInfo(TypeInfo.NO_TYPES).normalize(true).create()).create()
+                .writeGraph(os, TinkerFactory.createModern());
+        os.close();
+    }
+
+    /**
+     * No assertions.  Just write out the graph for convenience.
+     */
+    @Test
+    public void shouldWriteClassicGraphAsGraphSONV2d0WithTypes() throws IOException {
+        final OutputStream os = new FileOutputStream(tempPath + "tinkerpop-classic-v2d0-typed.json");
+        GraphSONWriter.build().mapper(GraphSONMapper.build().version(GraphSONVersion.V2_0).create()).create()
+                .writeGraph(os, TinkerFactory.createClassic());
+        os.close();
+    }
+
+    /**
+     * No assertions.  Just write out the graph for convenience.
+     */
+    @Test
+    public void shouldWriteModernGraphAsGraphSONV2d0WithTypes() throws IOException {
+        final OutputStream os = new FileOutputStream(tempPath + "tinkerpop-modern-v2d0-typed.json");
+        GraphSONWriter.build().mapper(GraphSONMapper.build().version(GraphSONVersion.V2_0).create()).create()
+                .writeGraph(os, TinkerFactory.createModern());
+        os.close();
+    }
+
+    /**
+     * No assertions.  Just write out the graph for convenience.
+     */
+    @Test
+    public void shouldWriteCrewGraphAsGraphSONV2d0WithTypes() throws IOException {
+        final OutputStream os = new FileOutputStream(tempPath + "tinkerpop-crew-v2d0-typed.json");
+        GraphSONWriter.build().mapper(GraphSONMapper.build().version(GraphSONVersion.V2_0).create()).create()
+                .writeGraph(os, TinkerFactory.createTheCrew());
+        os.close();
+    }
+
     @Test
     public void shouldWriteSampleForGremlinServer() throws IOException {
         final Graph g = TinkerGraph.open();
@@ -267,12 +357,27 @@ public class IoDataGenerationTest {
         GraphSONWriter.build().mapper(GraphSONMapper.build().create()).create().writeGraph(os2, g);
         os2.close();
 
-        final OutputStream os3 = new FileOutputStream(tempPath + "grateful-dead.xml");
-        GraphMLWriter.build().create().writeGraph(os3, g);
+        final OutputStream os3 = new FileOutputStream(tempPath + "grateful-dead-v2d0.json");
+        GraphSONWriter.build().mapper(GraphSONMapper.build().version(GraphSONVersion.V2_0)
+                .typeInfo(TypeInfo.NO_TYPES).create())
+                .create()
+                .writeGraph(os3, g);
         os3.close();
 
-        final OutputStream os4 = new FileOutputStream(tempPath + "grateful-dead-typed.json");
-        GraphSONWriter.build().mapper(GraphSONMapper.build().embedTypes(true).create()).create().writeGraph(os4, g);
+        final OutputStream os4 = new FileOutputStream(tempPath + "grateful-dead.xml");
+        GraphMLWriter.build().create().writeGraph(os4, g);
         os4.close();
+
+        final OutputStream os5 = new FileOutputStream(tempPath + "grateful-dead-typed.json");
+        GraphSONWriter.build().mapper(GraphSONMapper.build().embedTypes(true).create()).create().writeGraph(os5, g);
+        os5.close();
+
+        final OutputStream os6 = new FileOutputStream(tempPath + "grateful-dead-v2d0-typed.json");
+        GraphSONWriter.build().mapper(GraphSONMapper.build().version(GraphSONVersion.V2_0)
+                .typeInfo(TypeInfo.PARTIAL_TYPES).create())
+                .create()
+                .writeGraph(os6, g);
+        os6.close();
+
     }
 }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/115eb3c7/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphGraphSONSerializerV2d0Test.java
----------------------------------------------------------------------
diff --git a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphGraphSONSerializerV2d0Test.java b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphGraphSONSerializerV2d0Test.java
new file mode 100644
index 0000000..907aaed
--- /dev/null
+++ b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphGraphSONSerializerV2d0Test.java
@@ -0,0 +1,557 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.tinkergraph.structure;
+
+import org.apache.tinkerpop.gremlin.process.traversal.Path;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree;
+import org.apache.tinkerpop.gremlin.process.traversal.util.Metrics;
+import org.apache.tinkerpop.gremlin.process.traversal.util.MutableMetrics;
+import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalMetrics;
+import org.apache.tinkerpop.gremlin.structure.Edge;
+import org.apache.tinkerpop.gremlin.structure.Graph;
+import org.apache.tinkerpop.gremlin.structure.Property;
+import org.apache.tinkerpop.gremlin.structure.T;
+import org.apache.tinkerpop.gremlin.structure.Vertex;
+import org.apache.tinkerpop.gremlin.structure.VertexProperty;
+import org.apache.tinkerpop.gremlin.structure.io.GraphReader;
+import org.apache.tinkerpop.gremlin.structure.io.GraphWriter;
+import org.apache.tinkerpop.gremlin.structure.io.IoTest;
+import org.apache.tinkerpop.gremlin.structure.io.Mapper;
+import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONMapper;
+import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONReader;
+import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONVersion;
+import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONWriter;
+import org.apache.tinkerpop.gremlin.structure.io.graphson.TypeInfo;
+import org.junit.Test;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.nio.ByteBuffer;
+import java.time.Duration;
+import java.time.LocalDateTime;
+import java.time.Year;
+import java.util.Iterator;
+import java.util.Set;
+import java.util.UUID;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+
+public class TinkerGraphGraphSONSerializerV2d0Test {
+
+    // As of TinkerPop 3.2.1 default for GraphSON 2.0 means types enabled.
+    Mapper defaultMapperV2d0 = GraphSONMapper.build()
+            .version(GraphSONVersion.V2_0)
+            .addRegistry(TinkerIoRegistryV2d0.getInstance())
+            .create();
+
+    Mapper noTypesMapperV2d0 = GraphSONMapper.build()
+            .version(GraphSONVersion.V2_0)
+            .typeInfo(TypeInfo.NO_TYPES)
+            .addRegistry(TinkerIoRegistryV2d0.getInstance())
+            .create();
+
+    /**
+     * Checks that the graph has been fully ser/deser with types.
+     */
+    @Test
+    public void shouldDeserializeGraphSONIntoTinkerGraphWithPartialTypes() throws IOException {
+        GraphWriter writer = getWriter(defaultMapperV2d0);
+        GraphReader reader = getReader(defaultMapperV2d0);
+        TinkerGraph baseModern = TinkerFactory.createModern();
+
+        try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
+            writer.writeGraph(out, baseModern);
+            String json = out.toString();
+            TinkerGraph read = TinkerGraph.open();
+            reader.readGraph(new ByteArrayInputStream(json.getBytes()), read);
+            IoTest.assertModernGraph(read, true, false);
+        }
+    }
+
+    /**
+     * Checks that the graph has been fully ser/deser without types.
+     */
+    @Test
+    public void shouldDeserializeGraphSONIntoTinkerGraphWithoutTypes() throws IOException {
+        GraphWriter writer = getWriter(noTypesMapperV2d0);
+        GraphReader reader = getReader(noTypesMapperV2d0);
+        TinkerGraph baseModern = TinkerFactory.createModern();
+
+        try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
+            writer.writeGraph(out, baseModern);
+            String json = out.toString();
+            TinkerGraph read = TinkerGraph.open();
+            reader.readGraph(new ByteArrayInputStream(json.getBytes()), read);
+            IoTest.assertModernGraph(read, true, false);
+        }
+    }
+
+    /**
+     * Thorough types verification for Vertex ids, Vertex props, Edge ids, Edge props
+     */
+    @Test
+    public void shouldDeserializeGraphSONIntoTinkerGraphKeepingTypes() throws IOException {
+        GraphWriter writer = getWriter(defaultMapperV2d0);
+        GraphReader reader = getReader(defaultMapperV2d0);
+
+        Graph sampleGraph1 = TinkerFactory.createModern();
+        Vertex v1 = sampleGraph1.addVertex(T.id, 100, "name", "kevin", "theUUID", UUID.randomUUID());
+        Vertex v2 = sampleGraph1.addVertex(T.id, 101L, "name", "henri", "theUUID", UUID.randomUUID());
+        v1.addEdge("hello", v2, T.id, 101L,
+                "uuid", UUID.randomUUID());
+
+        try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
+            writer.writeObject(out, sampleGraph1);
+            String json = out.toString();
+
+            TinkerGraph read = reader.readObject(new ByteArrayInputStream(json.getBytes()), TinkerGraph.class);
+            assertTrue(approximateGraphsCheck(sampleGraph1, read));
+        }
+    }
+
+    /**
+     * Asserts the approximateGraphsChecks function fails when expected. Vertex ids.
+     */
+    @Test
+    public void shouldLooseTypesWithGraphSONNoTypesForVertexIds() throws IOException {
+        GraphWriter writer = getWriter(noTypesMapperV2d0);
+        GraphReader reader = getReader(noTypesMapperV2d0);
+        Graph sampleGraph1 = TinkerFactory.createModern();
+        sampleGraph1.addVertex(T.id, 100L, "name", "kevin");
+        try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
+            writer.writeGraph(out, sampleGraph1);
+            String json = out.toString();
+            TinkerGraph read = TinkerGraph.open();
+            reader.readGraph(new ByteArrayInputStream(json.getBytes()), read);
+            // Should fail on deserialized vertex Id.
+            assertFalse(approximateGraphsCheck(sampleGraph1, read));
+        }
+    }
+
+    /**
+     * Asserts the approximateGraphsChecks function fails when expected. Vertex props.
+     */
+    @Test
+    public void shouldLooseTypesWithGraphSONNoTypesForVertexProps() throws IOException {
+        GraphWriter writer = getWriter(noTypesMapperV2d0);
+        GraphReader reader = getReader(noTypesMapperV2d0);
+        Graph sampleGraph1 = TinkerFactory.createModern();
+
+        sampleGraph1.addVertex(T.id, 100, "name", "kevin", "uuid", UUID.randomUUID());
+        try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
+            writer.writeGraph(out, sampleGraph1);
+            String json = out.toString();
+            TinkerGraph read = TinkerGraph.open();
+            reader.readGraph(new ByteArrayInputStream(json.getBytes()), read);
+            // Should fail on deserialized vertex prop.
+            assertFalse(approximateGraphsCheck(sampleGraph1, read));
+        }
+    }
+
+    /**
+     * Asserts the approximateGraphsChecks function fails when expected. Edge ids.
+     */
+    @Test
+    public void shouldLooseTypesWithGraphSONNoTypesForEdgeIds() throws IOException {
+        GraphWriter writer = getWriter(noTypesMapperV2d0);
+        GraphReader reader = getReader(noTypesMapperV2d0);
+        Graph sampleGraph1 = TinkerFactory.createModern();
+        Vertex v1 = sampleGraph1.addVertex(T.id, 100, "name", "kevin");
+        v1.addEdge("hello", sampleGraph1.traversal().V().has("name", "marko").next(), T.id, 101L);
+        try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
+            writer.writeGraph(out, sampleGraph1);
+            String json = out.toString();
+            TinkerGraph read = TinkerGraph.open();
+            reader.readGraph(new ByteArrayInputStream(json.getBytes()), read);
+            // Should fail on deserialized edge Id.
+            assertFalse(approximateGraphsCheck(sampleGraph1, read));
+        }
+    }
+
+    /**
+     * Asserts the approximateGraphsChecks function fails when expected. Edge props.
+     */
+    @Test
+    public void shouldLooseTypesWithGraphSONNoTypesForEdgeProps() throws IOException {
+        GraphWriter writer = getWriter(noTypesMapperV2d0);
+        GraphReader reader = getReader(noTypesMapperV2d0);
+        Graph sampleGraph1 = TinkerFactory.createModern();
+
+        Vertex v1 = sampleGraph1.addVertex(T.id, 100, "name", "kevin");
+        v1.addEdge("hello", sampleGraph1.traversal().V().has("name", "marko").next(), T.id, 101,
+                "uuid", UUID.randomUUID());
+        try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
+            writer.writeGraph(out, sampleGraph1);
+            String json = out.toString();
+            TinkerGraph read = TinkerGraph.open();
+            reader.readGraph(new ByteArrayInputStream(json.getBytes()), read);
+            // Should fail on deserialized edge prop.
+            assertFalse(approximateGraphsCheck(sampleGraph1, read));
+        }
+    }
+
+    /**
+     * Those kinds of types are declared differently in the GraphSON type deserializer, check that all are handled
+     * properly.
+     */
+    @Test
+    public void shouldKeepTypesWhenDeserializingSerializedTinkerGraph() throws IOException {
+        TinkerGraph tg = TinkerGraph.open();
+
+        Vertex v = tg.addVertex("vertexTest");
+        UUID uuidProp = UUID.randomUUID();
+        Duration durationProp = Duration.ofHours(3);
+        Long longProp = 2L;
+        ByteBuffer byteBufferProp = ByteBuffer.wrap("testbb".getBytes());
+
+        // One Java util type natively supported by Jackson
+        v.property("uuid", uuidProp);
+        // One custom time type added by the GraphSON module
+        v.property("duration", durationProp);
+        // One Java native type not handled by JSON natively
+        v.property("long", longProp);
+        // One Java util type added by GraphSON
+        v.property("bytebuffer", byteBufferProp);
+
+        GraphWriter writer = getWriter(defaultMapperV2d0);
+        GraphReader reader = getReader(defaultMapperV2d0);
+        try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
+            writer.writeGraph(out, tg);
+            String json = out.toString();
+            TinkerGraph read = TinkerGraph.open();
+            reader.readGraph(new ByteArrayInputStream(json.getBytes()), read);
+            Vertex vRead = read.traversal().V().hasLabel("vertexTest").next();
+            assertEquals(vRead.property("uuid").value(), uuidProp);
+            assertEquals(vRead.property("duration").value(), durationProp);
+            assertEquals(vRead.property("long").value(), longProp);
+            assertEquals(vRead.property("bytebuffer").value(), byteBufferProp);
+        }
+    }
+
+
+    @Test
+    public void deserializersTestsVertex() {
+        TinkerGraph tg = TinkerGraph.open();
+
+        Vertex v = tg.addVertex("vertexTest");
+        v.property("born", LocalDateTime.of(1971, 1, 2, 20, 50));
+        v.property("dead", LocalDateTime.of(1971, 1, 7, 20, 50));
+
+        GraphWriter writer = getWriter(defaultMapperV2d0);
+        GraphReader reader = getReader(defaultMapperV2d0);
+
+        try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
+            writer.writeObject(out, v);
+            String json = out.toString();
+
+            // Object works, because there's a type in the payload now
+            // Vertex.class would work as well
+            // Anything else would not because we check the type in param here with what's in the JSON, for safety.
+            Vertex vRead = (Vertex)reader.readObject(new ByteArrayInputStream(json.getBytes()), Object.class);
+            assertEquals(v, vRead);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+    @Test
+    public void deserializersTestsEdge() {
+        TinkerGraph tg = TinkerGraph.open();
+
+        Vertex v = tg.addVertex("vertexTest");
+        Vertex v2 = tg.addVertex("vertexTest");
+
+        Edge ed = v.addEdge("knows", v2, "time", LocalDateTime.now());
+
+        GraphWriter writer = getWriter(defaultMapperV2d0);
+        GraphReader reader = getReader(defaultMapperV2d0);
+
+        try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
+            writer.writeObject(out, ed);
+            String json = out.toString();
+
+            // Object works, because there's a type in the payload now
+            // Edge.class would work as well
+            // Anything else would not because we check the type in param here with what's in the JSON, for safety.
+            Edge eRead = (Edge)reader.readObject(new ByteArrayInputStream(json.getBytes()), Object.class);
+            assertEquals(ed, eRead);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+    @Test
+    public void deserializersTestsTinkerGraph() {
+        TinkerGraph tg = TinkerGraph.open();
+
+        Vertex v = tg.addVertex("vertexTest");
+        Vertex v2 = tg.addVertex("vertexTest");
+
+        Edge ed = v.addEdge("knows", v2);
+
+        GraphWriter writer = getWriter(defaultMapperV2d0);
+        GraphReader reader = getReader(defaultMapperV2d0);
+
+        try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
+            writer.writeObject(out, tg);
+            String json = out.toString();
+
+            Graph gRead = (Graph)reader.readObject(new ByteArrayInputStream(json.getBytes()), Object.class);
+            assertTrue(approximateGraphsCheck(tg, gRead));
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+    @Test
+    public void deserializersTestsProperty() {
+        TinkerGraph tg = TinkerGraph.open();
+
+        Vertex v = tg.addVertex("vertexTest");
+        Vertex v2 = tg.addVertex("vertexTest");
+
+        Edge ed = v.addEdge("knows", v2);
+
+        GraphWriter writer = getWriter(defaultMapperV2d0);
+        GraphReader reader = getReader(defaultMapperV2d0);
+
+        Property prop = ed.property("since", Year.parse("1993"));
+
+        try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
+            writer.writeObject(out, prop);
+            String json = out.toString();
+
+            Property pRead = (Property)reader.readObject(new ByteArrayInputStream(json.getBytes()), Object.class);
+            //can't use equals here, because pRead is detached, its parent element has not been intentionally
+            //serialized and "equals()" checks that.
+            assertTrue(prop.key().equals(pRead.key()) && prop.value().equals(pRead.value()));
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+    @Test
+    public void deserializersTestsVertexProperty() {
+        TinkerGraph tg = TinkerGraph.open();
+
+        Vertex v = tg.addVertex("vertexTest");
+
+        GraphWriter writer = getWriter(defaultMapperV2d0);
+        GraphReader reader = getReader(defaultMapperV2d0);
+
+        VertexProperty prop = v.property("born", LocalDateTime.of(1971, 1, 2, 20, 50));
+
+        try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
+            writer.writeObject(out, prop);
+            String json = out.toString();
+
+            VertexProperty vPropRead = (VertexProperty)reader.readObject(new ByteArrayInputStream(json.getBytes()), Object.class);
+            //only classes and ids are checked, that's ok, full vertex property ser/de
+            //is checked elsewhere.
+            assertEquals(prop, vPropRead);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+    @Test
+    public void deserializersTestsPath() {
+        TinkerGraph tg = TinkerFactory.createModern();
+
+        GraphWriter writer = getWriter(defaultMapperV2d0);
+        GraphReader reader = getReader(defaultMapperV2d0);
+
+        Path p = tg.traversal().V(1).as("a").has("name").as("b").
+                out("knows").out("created").as("c").
+                has("name", "ripple").values("name").as("d").
+                identity().as("e").path().next();
+
+        try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
+            writer.writeObject(out, p);
+            String json = out.toString();
+
+            Path pathRead = (Path)reader.readObject(new ByteArrayInputStream(json.getBytes()), Object.class);
+
+            for (int i = 0; i < p.objects().size(); i++) {
+                Object o = p.objects().get(i);
+                Object oRead = pathRead.objects().get(i);
+                assertEquals(o, oRead);
+            }
+            for (int i = 0; i < p.labels().size(); i++) {
+                Set<String> o = p.labels().get(i);
+                Set<String> oRead = pathRead.labels().get(i);
+                assertEquals(o, oRead);
+            }
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+    @Test
+    public void deserializersTestsMetrics() {
+        TinkerGraph tg = TinkerFactory.createModern();
+
+        GraphWriter writer = getWriter(defaultMapperV2d0);
+        GraphReader reader = getReader(defaultMapperV2d0);
+
+        TraversalMetrics tm = tg.traversal().V(1).as("a").has("name").as("b").
+                out("knows").out("created").as("c").
+                has("name", "ripple").values("name").as("d").
+                identity().as("e").profile().next();
+
+        MutableMetrics m = new MutableMetrics(tm.getMetrics(0));
+        // making sure nested metrics are included in serde
+        m.addNested(new MutableMetrics(tm.getMetrics(1)));
+
+        try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
+            writer.writeObject(out, m);
+            String json = out.toString();
+
+            Metrics metricsRead = (Metrics)reader.readObject(new ByteArrayInputStream(json.getBytes()), Object.class);
+            // toString should be enough to compare Metrics
+            assertTrue(m.toString().equals(metricsRead.toString()));
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+    @Test
+    public void deserializersTestsTraversalMetrics() {
+        TinkerGraph tg = TinkerFactory.createModern();
+
+        GraphWriter writer = getWriter(defaultMapperV2d0);
+        GraphReader reader = getReader(defaultMapperV2d0);
+
+        TraversalMetrics tm = tg.traversal().V(1).as("a").has("name").as("b").
+                out("knows").out("created").as("c").
+                has("name", "ripple").values("name").as("d").
+                identity().as("e").profile().next();
+
+        try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
+            writer.writeObject(out, tm);
+            String json = out.toString();
+
+            TraversalMetrics traversalMetricsRead = (TraversalMetrics)reader.readObject(new ByteArrayInputStream(json.getBytes()), Object.class);
+            // toString should be enough to compare TraversalMetrics
+            assertTrue(tm.toString().equals(traversalMetricsRead.toString()));
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+    @Test
+    public void deserializersTree() {
+        TinkerGraph tg = TinkerFactory.createModern();
+
+        GraphWriter writer = getWriter(noTypesMapperV2d0);
+        GraphReader reader = getReader(noTypesMapperV2d0);
+
+        Tree t = tg.traversal().V().out().out().tree().next();
+
+        try (final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
+            Vertex v = tg.traversal().V(1).next();
+                     v.property("myUUIDprop", UUID.randomUUID());
+            writer.writeObject(out, v);
+
+
+//            writer.writeObject(out, t);
+            String json = out.toString();
+
+            System.out.println("json = " + json);
+
+//            Tree treeRead = (Tree)reader.readObject(new ByteArrayInputStream(json.getBytes()), Object.class);
+            //Map's equals should check each component of the tree recursively
+            //on each it will call "equals()" which for Vertices will compare ids, which
+            //is ok. Complete vertex deser is checked elsewhere.
+//            assertEquals(t, treeRead);
+
+
+
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+    private GraphWriter getWriter(Mapper paramMapper) {
+        return GraphSONWriter.build().mapper(paramMapper).create();
+    }
+
+    private GraphReader getReader(Mapper paramMapper) {
+        return GraphSONReader.build().mapper(paramMapper).create();
+    }
+
+    /**
+     * Checks sequentially vertices and egdes of both graphs. Will check sequentially Vertex IDs, Vertex Properties IDs
+     * and values and classes. Then same for edges. To use when serializing a Graph and deserializing the supposedly
+     * same Graph.
+     */
+    private boolean approximateGraphsCheck(Graph g1, Graph g2) {
+        Iterator<Vertex> itV = g1.vertices();
+        Iterator<Vertex> itVRead = g2.vertices();
+
+        while (itV.hasNext()) {
+            Vertex v = itV.next();
+            Vertex vRead = itVRead.next();
+
+            // Will only check IDs but that's 'good' enough.
+            if (!v.equals(vRead)) {
+                return false;
+            }
+
+            Iterator itVP = v.properties();
+            Iterator itVPRead = vRead.properties();
+            while (itVP.hasNext()) {
+                VertexProperty vp = (VertexProperty) itVP.next();
+                VertexProperty vpRead = (VertexProperty) itVPRead.next();
+                if (!vp.value().equals(vpRead.value())
+                        || !vp.equals(vpRead)) {
+                    return false;
+                }
+            }
+        }
+
+        Iterator<Edge> itE = g1.edges();
+        Iterator<Edge> itERead = g2.edges();
+
+        while (itE.hasNext()) {
+            Edge e = itE.next();
+            Edge eRead = itERead.next();
+            // Will only check IDs but that's good enough.
+            if (!e.equals(eRead)) {
+                return false;
+            }
+
+            Iterator itEP = e.properties();
+            Iterator itEPRead = eRead.properties();
+            while (itEP.hasNext()) {
+                Property ep = (Property) itEP.next();
+                Property epRead = (Property) itEPRead.next();
+                if (!ep.value().equals(epRead.value())
+                        || !ep.equals(epRead)) {
+                    return false;
+                }
+            }
+        }
+        return true;
+    }
+}


[14/48] tinkerpop git commit: TINKERPOP-1334 Added getter methods for Cluster settings on driver.

Posted by sp...@apache.org.
TINKERPOP-1334 Added getter methods for Cluster settings on driver.

This was a simple change that provided a way to read settings out of the Cluster once they were set. CTR


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/5d87d279
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/5d87d279
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/5d87d279

Branch: refs/heads/TINKERPOP-1278
Commit: 5d87d279f2e142d25a4f92991b1caa5700c9b821
Parents: 1799fa4
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Fri Aug 12 15:33:36 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Fri Aug 12 15:33:36 2016 -0400

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |   1 +
 .../tinkerpop/gremlin/driver/Cluster.java       | 154 ++++++++++++++++++-
 2 files changed, 151 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/5d87d279/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 8232065..bff6907 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -30,6 +30,7 @@ TinkerPop 3.2.2 (NOT OFFICIALLY RELEASED YET)
 * Added new recipe for "Traversal Induced Values".
 * Fixed a potential leak of a `ReferenceCounted` resource in Gremlin Server.
 * Added class registrations for `Map.Entry` implementations to `GryoMapper`.
+* Added methods to retrieve `Cluster` settings in `gremlin-driver`.
 * Fixed a severe bug in `SubgraphStrategy`.
 * Deprecated `SubgraphStrategy.Builder.vertexCriterion()/edgeCriterion()` in favor of `vertices()/edges()`.
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/5d87d279/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Cluster.java
----------------------------------------------------------------------
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Cluster.java b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Cluster.java
index 32600a2..c7ea041 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Cluster.java
+++ b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Cluster.java
@@ -266,6 +266,148 @@ public final class Cluster {
                 .collect(Collectors.toList()));
     }
 
+    /**
+     * Size of the pool for handling request/response operations.
+     */
+    public int getNioPoolSize() {
+        return manager.nioPoolSize;
+    }
+
+    /**
+     * Size of the pool for handling background work.
+     */
+    public int getWorkerPoolSize() {
+        return manager.workerPoolSize;
+    }
+
+    /**
+     * Get the {@link MessageSerializer} MIME types supported.
+     */
+    public String[] getSerializers() {
+        return getSerializer().mimeTypesSupported();
+    }
+
+    /**
+     * Determines if connectivity over SSL is enabled.
+     */
+    public boolean isSslEnabled() {
+        return manager.connectionPoolSettings.enableSsl;
+    }
+
+    /**
+     * Gets the minimum number of in-flight requests that can occur on a {@link Connection} before it is considered
+     * for closing on return to the {@link ConnectionPool}.
+     */
+    public int getMinInProcessPerConnection() {
+        return manager.connectionPoolSettings.minInProcessPerConnection;
+    }
+
+    /**
+     * Gets the maximum number of in-flight requests that can occur on a {@link Connection}.
+     */
+    public int getMaxInProcessPerConnection() {
+        return manager.connectionPoolSettings.maxInProcessPerConnection;
+    }
+
+    /**
+     * Gets the maximum number of times that a {@link Connection} can be borrowed from the pool simultaneously.
+     */
+    public int maxSimultaneousUsagePerConnection() {
+        return manager.connectionPoolSettings.maxSimultaneousUsagePerConnection;
+    }
+
+    /**
+     * Gets the minimum number of times that a {@link Connection} should be borrowed from the pool before it falls
+     * under consideration for closing.
+     */
+    public int minSimultaneousUsagePerConnection() {
+        return manager.connectionPoolSettings.minSimultaneousUsagePerConnection;
+    }
+
+    /**
+     * Gets the maximum size that the {@link ConnectionPool} can grow.
+     */
+    public int maxConnectionPoolSize() {
+        return manager.connectionPoolSettings.maxSize;
+    }
+
+    /**
+     * Gets the minimum size of the {@link ConnectionPool}.
+     */
+    public int minConnectionPoolSize() {
+        return manager.connectionPoolSettings.minSize;
+    }
+
+    /**
+     * Gets the override for the server setting that determines how many results are returned per batch.
+     */
+    public int getResultIterationBatchSize() {
+        return manager.connectionPoolSettings.resultIterationBatchSize;
+    }
+
+    /**
+     * Gets the maximum amount of time to wait for a connection to be borrowed from the connection pool.
+     */
+    public int getMaxWaitForConnection() {
+        return manager.connectionPoolSettings.maxWaitForConnection;
+    }
+
+    /**
+     * Gets how long a session will stay open assuming the current connection actually is configured for their use.
+     */
+    public int getMaxWaitForSessionClose() {
+        return manager.connectionPoolSettings.maxWaitForSessionClose;
+    }
+
+    /**
+     * Gets the maximum size in bytes of any request sent to the server.
+     */
+    public int getMaxContentLength() {
+        return manager.connectionPoolSettings.maxContentLength;
+    }
+
+    /**
+     * Gets the {@link Channelizer} implementation to use on the client when creating a {@link Connection}.
+     */
+    public String getChannelizer() {
+        return manager.connectionPoolSettings.channelizer;
+    }
+
+    /**
+     * Gets time in milliseconds to wait before attempting to reconnect to a dead host after it has been marked dead.
+     */
+    public int getReconnectIntialDelay() {
+        return manager.connectionPoolSettings.reconnectInitialDelay;
+    }
+
+    /**
+     * Gets time in milliseconds to wait between retries when attempting to reconnect to a dead host.
+     */
+    public int getReconnectInterval() {
+        return manager.connectionPoolSettings.reconnectInterval;
+    }
+
+    /**
+     * Specifies the load balancing strategy to use on the client side.
+     */
+    public Class<? extends LoadBalancingStrategy> getLoadBalancingStrategy() {
+        return manager.loadBalancingStrategy.getClass();
+    }
+
+    /**
+     * Gets the port that the Gremlin Servers will be listening on.
+     */
+    public int getPort() {
+        return manager.port;
+    }
+
+    /**
+     * Gets a list of all the configured hosts.
+     */
+    public Collection<Host> allHosts() {
+        return Collections.unmodifiableCollection(manager.allHosts());
+    }
+
     Factory getFactory() {
         return manager.factory;
     }
@@ -290,10 +432,6 @@ public final class Cluster {
         return manager.authProps;
     }
 
-    Collection<Host> allHosts() {
-        return manager.allHosts();
-    }
-
     SslContext createSSLContext() throws Exception  {
         // if the context is provided then just use that and ignore the other settings
         if (manager.sslContextOptional.isPresent()) return manager.sslContextOptional.get();
@@ -704,6 +842,10 @@ public final class Cluster {
 
         private final ScheduledExecutorService executor;
 
+        private final int nioPoolSize;
+        private final int workerPoolSize;
+        private final int port;
+
         private final AtomicReference<CompletableFuture<Void>> closeFuture = new AtomicReference<>();
 
         private Manager(final Builder builder) {
@@ -733,6 +875,10 @@ public final class Cluster {
 
             sslContextOptional = Optional.ofNullable(builder.sslContext);
 
+            nioPoolSize = builder.nioPoolSize;
+            workerPoolSize = builder.workerPoolSize;
+            port = builder.port;
+
             this.factory = new Factory(builder.nioPoolSize);
             this.serializer = builder.serializer;
             this.executor = Executors.newScheduledThreadPool(builder.workerPoolSize,